도서 - SQL 첫걸음
by choising
SQL 첫걸음
1장 데이터베이스와 SQL
3. 데이터베이스 서버
- RDBMS의 클라이언트/ 서버
- 웹 시스템에는 없었던
사용자 인증
이 필요하다 - 사용자 별로 데이터베이스 접근을 제한
- 웹 시스템에는 없었던
- SQL 명령 실행
- 한 번 DB에 접속하면, 이를 유지하여 재접속 없이
SQL 명령을 여러 번
보낼 수 있다
- 한 번 DB에 접속하면, 이를 유지하여 재접속 없이
-
실제 데이터베이스에 접속하는 것은
CGI 프로그램
이다 - Client -> WebServer -> CGI -> DB
- Request 가 요론식으로 흘러가고 최우측은 가장 가까운 좌측을 client 로 보는 것
- 실제로 대규모 시스템에서 이러한 구조를 가져갈 경우 웹서버나 DB서버를 여러대로 증설 가능하다
-
Client-Server 모델은 시스템의 하드웨어 구성을 유연하게 해줌
- 자신의 PC에 클라이언트와 서버가 모두 있을 경우
- 네트워크를 경유해서 PC의 서버로 되돌아오는 형태로 접속한다
- 이를
루프 백 접속
이라 부른다
8강 패턴 매칭에 의한 검색
1. LIKE로 패턴 매칭하기
- 와일드 카드
- % : 임의의 문자열, 즉 복수개의 문자
- _ : 임의의 문자, 즉 하나의 문자
- ex)
SELECT * FROM sample1 WHERE text like 'SQL%';
- 만약 검색조건에 ‘%’, ‘_’ 를 포함하고 싶을 경우
- 이스케이프 처리 (\%)
- 추가로 홑따옴표 같은 경우에는 두 개를 연달아 씀으로 이스케이프 (‘’)
- 이스케이프 처리 (\%)
10강. 복수의 열을 지정해 정렬하기
SELECT *
FROM sample1
ORDER BY order_no, cancel_date;
- 먼저 order_no 로 정렬 하고, 값이 같은 경우 cancel_date 로 정렬하여 노출한다.
SELECT *
FROM sample1
ORDER BY order_no ASC, cancel_date DESC;
- 정렬방법을 지정하는 것도 가능
11강. 결과 행 제한하기 - LIMIT
- 보통 offset과 함께 페이징 할 때 많이 사용됨.
SELECT *
FROM sample1
LIMIT 10 OFFSET 10;
- 실행결과 11번째부터 20번째데이터 까지 10개를 가져올 것.
12강. 수치 연산
- 처리순서 : WHERE 구 -> SELECT 구 -> ORDER BY 구
- 때문에 SELECT 에서 as 로 alias 를 지정한 경우 where 절에서는 사용 불가, orderby 에서는 사용 가능
13강. 문자열 연산
-
+
,||
, CONCAT 함수 로 문자열 결합 가능 -
ex) sample35 table. | no | price | quantity | unit | |:—:|:—:|:—:|:—:| | 1 | 100 | 10 | 개 | | 2 | 230 | 24 | 캔 | | 3 | 1980 | 1 | 장 |
SELECT CONCAT(quantity, unit)
FROM sample35
-
result | CONCAT(quantity, unit) | |:—:| | 10개 | | 24캔 | | 1장 |
- SUBSTRING 함수
- ex) SUBSTRING(‘20140125001’, 1, 4) -> ‘2014’
- TRIM 함수
- 문자열의 앞 뒤 공백 제거 문자열 사이의 공백은 제거되지 않음
- ex) TRIM(‘ABC ‘) -> ‘ABC’
- CHARCTER_LENGTH 함수
- VARCHAR 같은 가변형의 경우 길이가 서로 다르기 때문
14강. 날짜 연산
- 오라클의 경우 문자열 데이터 -> 날짜형 데이터
- TO_DATE(‘2014/01/25’, ‘YYYY/MM/DD’)
- 반대는 TO_CHAR
- 날짜의 덧셈과 뺄셈
- SELECT CURRENT_DATE + INTERVAL 1 DAY;
- SELECT CURRENT_DATE - INTERVAL 1 DAY;
- 날짜형 간의 뺄셈
- MySQL : DATEDIFF(‘2014-02-28’, ‘2014-01-01’)
15강. CASE 문으로 데이터 변환하기
- CASE문 SYNTAX
CASE WHEN 조건식1 THEN 식1
[ WHEN 조건식2 THEN 식2 ... ]
[ ELS 식3 ]
END
-
sample 37 table | a | |:—:| | 1 | | 2 | | NULL |
-
case 문으로 null 을 0 으로
SELECT a,
CASE WHEN a IS NULL THEN 0
ELSE a
END
as "a(null=0)"
FROM sample37;
-
result | a | a(null=0) | |:—:|:—:| | 1 | 1 | | 2 | 2 | | NULL | 0 |
-
사실 이걸 간단하게 하는 COALESCE 함수가 존재함
- 복수 개의 argumnet 를 지정 가능 하고,
- 주어진 인수 가운데 NULL 이 아닌 값에 대해서는 가장 먼저 지정된 인수의 값을 반환
- COALESCE(a, 0) 하면
- a 가 null 이 아니면 그대로 a 일 것이고,
- a 가 null 이면 0 이 출력될 것
22강 그룹화
- 내부 처리 순서
- WHERE 구 > GROUP BY 구 > HAVING 구 > SELECT 구 > ORDER BY 구
23강 서브쿼리
-
괄호로 묶어서 지정
-
ex) 테이블에서 a 의 최솟값 row 삭제.
(SELECT MIN(a) FROM sample54)
요게 서브쿼리
DELETE FROM sample54 WHERE a = (SELECT MIN(a) FROM sample54);
- 서브쿼리의 패턴
- 1) 하나의 값을 반환하는 패턴
- ex) SELECT MIN(a) FROM sample54;
- 2) 복수의 행이 반환되지만 열은 하나인 패턴
- ex) SELECT no FROM sample54;
no 1 2 4 - 3) 하나의 행이 반환되지만 열이 복수인 패턴
- ex) SELECT MIN(a), MAX(no) FROM sample54;
MIN(a) MAX(no) 80 4 - 4) 복수의 행, 복수의 열이 반환되는 패턴
- 1) 하나의 값을 반환하는 패턴
- SELECT 명령이 하나의 값만 반환하는 것을
스칼라 값을 반환한다
고 한다- 이런 1)번 같은 패턴이 서브쿼리로 사용하기 젤쉽다
Subscribe via RSS