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을 사용하여 집계함수를 넣어 조건비교를 하고 있다.





+ Recent posts