SQL에 대한 메모

Programming 2019. 3. 13. 09:50

SELECT 구문이 실행되는 순서는 다음과 같다.

1. driving 테이블에서 driven테이블들로의 연쇄적인 where 적용 및 조인 실행

2. GROUP BY 적용: 레코드 그룹핑

3. DISTINCT 적용

4. HAVING 조건 필터링

5. ORDER BY 정렬

6. LIMIT 적용


GROUP BY 절 없이 실행될 때는 다음과 같다.

1. driving테이블 ORDER BY 정렬

2. driven테이블의 연쇄적인 where 적용 및 조인 실행

3. LIMIT 적용


HAVING절.

집계함수를 사용할 수 없는 WHERE절의 한계를 보완할 수 있음


합집합.

UNION, UNION ALL 사용

UNION ALL은 중복허용

비슷한 데이터타입의 테이블을 합치는데, 쓸모가 있긴 한걸까...


교집합.

가장 많이 사용하는 쿼리. 아래와 같은 형태로 사용

SELECT * FROM a A, b B WHERE A.no = B.no

이 쿼리는 곱집합이므로 a와 b테이블의 모든 속성이 출력


차집합.

SELECT * FROM a A WHERE no NOT IN(SELECT DISTINCT no FROM b B)

DISTINCT를 사용하여 중복되는 레코드를 줄일 수 있음


대칭차집합.

SELECT * FROM a A WHERE no NOT IN(SELECT DISTINCT no FROM b B)

UNION ALL

SELECT * FROM b B WHERE no NOT IN(SELECT DISTINCT no FROM a A)

어디에서 사용할 수 있을까 이건...


조인 vs. 레프트 조인.

상황에 따라 다르지만, 레프트 조인은 되도록이면 지양해야 함

매칭되는 레코드가 없을 때 조인은 레코드를 형성하지 않지만, 레프트 조인은 null을 입력하여 레코드를 추가해버림

즉, 레프트 조인에서는 생성된 데이터가 불필요할 수 있으므로 메모리가 낭비될 여지가 있음

admin