SQL 문법 한 번에 정리하기
SELECT
select column_name from table_name;
- ALIAS
select t.column_name from table_name t;
ORDER BY
SELECT first, second
FROM table_name
ORDER BY first;
기본 값은 오름차순(ASC)
- DESC 와 ASC 함께 쓰기
SELECT first_c, second_c
FROM table_name
ORDER BY
first_c ASC, second_c DESC;
- 컬럼 순서에 따라 적용 가능
SELECT first_c, second_c
FROM table_name
ORDER BY
1 ASC, 2 DESC;
DISTINCT
SELECT DISTINCT c_1
FROM table_name;
SELECT DISTINCT c_1, c_2
FROM table_name
ORDER BY c_1, c_2;
컬럼 두 개의 값이 모두 같은 행이 있을 경우 하나만 표시한다. 가독성을 위해 ORDER BY 를 사용한다.
SELECT
DISTINCT ON (c_1) c_1, c_2
FROM table_name
ORDER BY c_1, c_2
;
괄호에 있는 c_1 컬럼 기준으로 중복이 제거된다. c_1의 중복된 행들 중 하나만 표시한다. 이때 표시되는 행은 c_2 의 정렬된 값 중 가장 우선 순위의 값을 표시한다.
WHERE
- 연산자: =, >, <, <=, >=, <> (또는 !=), AND, OR
SELECT fst_name, last_name --3
FROM customer --1
WHERE fst_name = "Amy" --2
AND last_name = "Rice"
;
LIMIT
특정 집합을 출력 시 출력하는 행의 수를 한정하는 역할을 한다. 부분 범위 처리 시 사용된다. PostgreSQL, MySQL 등에서 지원한다.
SELECT *
FROM T1
LIMIT 10 OFFSET 2
;
출력하는 행의 수를 10개로 지정한다. 행의 시작 위치는 0, 1 의 2개의 행을 제외한 3번째 행부터 시작한다.
ORDER BY 로 정렬을 하면 이 정렬된 결과 중에서 3번째 부터 10개의 값을 가져온다.
FETCH
출력하는 행의 수를 한정한다. 오라클에서 제공한다. LIMIT 절과 FETCH 절 중 선택해서 사용한다.
SELECT *
FROM T1
FETCH FIRST [N] ROW ONLY
;
N 개의 행을 가져온다.
N 을 입력하지 않고 ROW ONLY 만 입력하면 한 건만 출력한다.
SELECT *
FROM T1
OFFSET 5 ROWS
FETCH FIRST 10 ROW ONLY
;
6번째 행부터 10개의 행을 가져온다.
IN, NOT IN 연산자
특정 집합(컬럼 혹은 리스트)에서 특정 집합 혹은 리스트가 존재하는지 판단한다.
- IN
SELECT *
FROM T1
WHERE C1 IN (V1, V2)
;
C1 이 V1 혹은 V2 값인 행을 출력한다.
C1 = V1 OR C1 = V2 와 같다.
IN 을 쓰는 이유는 가독성을 위함이며, DBMS 의 옵티마이저의 특성상 IN 이 OR 보다 성능이 좋다.
- NOT IN
SELECT C1, C2
FROM T1
WHERE C1 NOT IN (V1, V2) -- 1
ORDER BY C2 DESC; --2
;
C1 이 V1 도 아니고 V2 도 아니어야 한다.
C1 <> V1 AND C1 <> V2 와 같다.
ORDER BY 는 WHERE 절에서 가져온 행에 대해서 진행된다.
- 서브 쿼리
SELECT name
FROM customer
WHERE customer_id IN (
SELECT customer_id
FROM rental
WHERE
CAST(return_date AS DATE) = '2019-05-27'
)
;
서브 쿼리에서 return_date 가 2019-05-27 인 customer_id 를 먼저 출력한다.
메인 쿼리에서는 위의 해당되는 customer_id 의 name 을 출력한다.
- DATE 표현 ` CAST(return_date AS DATE) = ‘2019-05-27’`
(NOT) BETWEEN
컬럼 값이 특정 범위 안에 들어가는 집합을 출력한다.
SELECT *
FROM T1
WHERE C1
BETWEEN 1 AND 10
;
1 과 10을 포함하는 사이의 값을 출력한다.
- NOT BETWEEN
SELECT *
FROM T1
WHERE C1
NOT BETWEEN 1 AND 10
;
1 과 10을 포함하는 사이의 값을 제외한 값을 출력한다. (C1 < 1 AND C1 > 10)
- 날짜
WHERE CAST(payment_date AS DATE)
BETWEEN `2017-02-07` AND '2017-02-15'
;
또는 TO_CHAR(payment_date, 'YYYY-MM-DD')
(NOT) LIKE
컬럼의 값이 특정 값과 유사한 패턴을 갖는 집한을 출력한다.
% 는 한 개 이상의 문자 매칭 _ 는 한 개의 문자의 매칭
WHERE name LIKE "Jen%"
Jen 으로 시작하는 문자열
WHERE name LIKE "_o_"
가운데에 o 가 들어가는 세 자리의 문자열
IS NULL
SELECT *
FROM T1
WHERE C1 IS NOT NULL
;
WHERE C1 = NULL 처럼 등호 연산자를 사용할 수 없다.
