SELECT 컬럼 FROM 테이블 WHERE 컬럼='값'
=
: 동등 연산자<>
: 부등 연산자WHERE
문에 AND
연산자 / OR
연산자로 조건 집합 추가IN
사용 ex) WHERE 컬럼 IN ('1', '2');
WHERE 컬럼=NULL
(X) : 아무것도 검색되지 않는다.WHERE 컬럼 IS NULL
, WHERE 컬럼 IS NOT NULL
(O)합계 또는 평균 등 집계 연산. 테이블을 홀케이크처럼 자른다고 이해할 수 있다.
SELECT 컬럼 FROM 테이블 GROUP BY 컬럼
GROUP BY
결과 집합에 또 한번 조건을 건다. (WHERE
구와 비슷하게 사용)
SELECT ~ FROM ~ GROUP BY ~ HAVING 조건
WHERE
구 : 레코드에 조건 지정HAVING
구 : 집합에 조건 지정SELECT
구문의 결과 순서를 보장하려면 반드시 명시
SELECT ~ FROM ~ ORDER BY 컬럼 ASC/DESC
DESC
: 내림차순ASC
: 오름차순 (default)자주 사용하는 SELECT
구문을 데이터베이스에 저장하는 것
CREATE VIEW 뷰이름 (필드1, 필드2, ...) AS SELECT ~
사용 시
SELECT ~ FROM 뷰이름
FROM
구에 직접 지정하는 SELECT
구문, 뷰는 결국 저장해둔 SELECT
를 서브쿼리 하는 것
SELECT ~ FROM A WHERE ~ IN (SELECT ~ FROM B)
SELECT
서브쿼리도 가능CASE
식 : switch
문과 비슷하다.CASE WHEN 평가식 THEN 식
WHEN 평가식 THEN 식
WHEN 평가식 THEN 식
.
.
.
ELSE 식 END
SELECT ~
CASE WHEN 컬럼='값' THEN '값'
WHEN 컬럼='값' THEN '값'
ELSE NULL END AS ~
FROM ~
CASE
식의 강력한 점은 '식' 이라는 점SELECT
, WHERE
, GROUP BY
, HAVING
, ORDER BY
와 같은 곳 어디에나 사용 가능SELECT ~ FROM a UNION SELECT ~ FROM b
UNION
은 중복 데이터를 제거한다. 만약 중복 제거를 원하지 않는다면 UNION ALL
사용
SELECT ~ FROM a INTERSECT SELECT ~ FROM b
SELECT ~ FROM a EXCEPT SELECT ~ FROM b
집약 기능이 없는 GROUP BY
구
집약 구문 뒤에 OVER
구 작성, 내부에 PARTITION BY
또는 ORDER BY
작성
SELECT ~ COUNT(*) OVER(PARTITION BY ~) FROM ~
카운트 결과는 GROUP BY
와 같으나 레코드 수가 실제와 같이 나온다.
예를 들어 RANK()
함수를 사용할 때,
SELECT ~ COUNT(*) OVER(ORDER BY ~ DESC) AS rnk FROM ~
같은 조건값인 경우 순위가 같고, 갯수만큼 건너뜀 (3위가 2명일 시, 4위는 없고 5위부터 랭킹)
→ 건너뛰지 않으려면 DENSE_RANK()
사용