전체/Oracle
UNION, UNION ALL 차이점
effortDev
2017. 11. 23. 17:00
1. UNION, UNION ALL 차이점
1.1 UNION
1 2 3 4 5 6 7 8 9 | -- UNION SELECT 1 ID, '수학' SUBJECT, 90 SCORE FROM DUAL UNION SELECT 1 ID, '수학' SUBJECT, 90 SCORE FROM DUAL UNION SELECT 1 ID, '수학' SUBJECT, 90 SCORE FROM DUAL -- Result 1 -- ID SUBJECT SCORE -- 1 수학 90 ; | cs |
1.2 UNION ALL
1 2 3 4 5 6 7 8 9 10 11 | -- UNION ALL SELECT 1 ID, '수학' SUBJECT, 90 SCORE FROM DUAL UNION ALL SELECT 1 ID, '수학' SUBJECT, 90 SCORE FROM DUAL UNION ALL SELECT 1 ID, '수학' SUBJECT, 90 SCORE FROM DUAL -- Result 2 -- ID SUBJECT SCORE -- 1 수학 90 -- 1 수학 90 -- 1 수학 90 ; | cs |
UNION 을 사용하면 컬럼의 값이 모두 같은 값이며 중복되면 중복되는 컬럼 row를 제외하고 출력되지만
UNION ALL 을 사용하면 컬럼의 값이 모두 같은 값이며 중복되더라도 모든 컬럼 row가 출력된다.
2. GROUP BY와 HAVING 이해하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | -- GROUP BY와 HAVING 이해하기 SELECT A1.ID, A1.NAME, SUM(A1.SCORE) AS SCORE FROM ( SELECT 1 ID, '김상현' NAME, '영어' SUBJECT, 80 SCORE FROM DUAL UNION ALL SELECT 1 ID, '김상현' NAME, '수학' SUBJECT, 80 SCORE FROM DUAL UNION ALL SELECT 2 ID, '이상현' NAME, '영어' SUBJECT, 100 SCORE FROM DUAL UNION ALL SELECT 2 ID, '이상현' NAME, '수학' SUBJECT, 100 SCORE FROM DUAL ) A1 WHERE A1.NAME LIKE '%상현%' GROUP BY A1.ID, A1.NAME, SCORE HAVING SUM(SCORE) >= 170 -- RESULT -- ID NAME SCORE -- 2 이상현 200 ; | cs |
해당 쿼리를 통해
GROUP BY는 데이터들을 그룹별로 나눌수 있고.
WHERE 절에서 집계함수를 사용 할 수 없으므로
HAVING을 사용하여 집계함수를 넣어 조건비교를 하고 있다.