[SQL 레벨업] 2장 - SQL 기초

Jiwon Youn·2022년 6월 24일
0

SQL 레벨업

목록 보기
2/2

WHERE 구

SELECT 컬럼 FROM 테이블 WHERE 컬럼='값'

WHERE 문의 연산자

  • = : 동등 연산자
  • <> : 부등 연산자
  • WHERE 문에 AND 연산자 / OR 연산자로 조건 집합 추가
    → 조건이 많아질 경우 IN 사용 ex) WHERE 컬럼 IN ('1', '2');

NULL 검색 시

  • WHERE 컬럼=NULL (X) : 아무것도 검색되지 않는다.
  • WHERE 컬럼 IS NULL, WHERE 컬럼 IS NOT NULL (O)

GROUP BY 구

합계 또는 평균 등 집계 연산. 테이블을 홀케이크처럼 자른다고 이해할 수 있다.

SELECT 컬럼 FROM 테이블 GROUP BY 컬럼

HAVING 구

GROUP BY 결과 집합에 또 한번 조건을 건다. (WHERE 구와 비슷하게 사용)

SELECT ~ FROM ~ GROUP BY ~ HAVING 조건
  • WHERE 구 : 레코드에 조건 지정
  • HAVING 구 : 집합에 조건 지정

ORDER BY 구

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 서브쿼리도 가능
  • SQL은 서브쿼리부터 가장 먼저 실행

SQL과 조건 분기

  • 검색 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 와 같은 곳 어디에나 사용 가능

SQL의 집합 연산

UNION : 합집합 (=OR)

SELECT ~ FROM a UNION SELECT ~ FROM b

UNION은 중복 데이터를 제거한다. 만약 중복 제거를 원하지 않는다면 UNION ALL 사용


INTERSECT : 교집합 (=AND)

SELECT ~ FROM a INTERSECT SELECT ~ FROM b

EXCEPT : 차집합 (a-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() 사용

0개의 댓글