SQL에 대한 메모
Programming 2019. 3. 13. 09:50SELECT 구문이 실행되는 순서는 다음과 같다.
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을 입력하여 레코드를 추가해버림
즉, 레프트 조인에서는 생성된 데이터가 불필요할 수 있으므로 메모리가 낭비될 여지가 있음
'Programming' 카테고리의 다른 글
호환성 보기에 대한 기록. (0) | 2020.03.06 |
---|---|
Qt Android Build 환경 설정 (Command Line) (0) | 2020.03.03 |
딥러닝 아나콘다, 텐서플로우, 쥬피터 환경 설정 (0) | 2018.10.16 |
아이폰 해상도 정리 (XS, XS MAX, XR) (0) | 2018.09.28 |
푸시, Signing, Entitlements... 너희가 날 괴롭혀... (0) | 2018.09.28 |