union 시 주의할 점은 열이 같아야지 합처진다 그런데 A , B 중에서 중복은제거

UNION 은 || or 연산과 비슷한데 중복은 제거 한다

select playerID, AVG(salary)
from salaries
group by playerID
having AVG(salary) >= 3000000

UNION

--12월에 태어난 선수들의 playerID
select playerID, birthMonth
from players
where birthMonth = 12
order by playerID asc
;

 

아래는 위 결과를 실행했을때의 결과인데 avg 와 birthmonth 때문에 합쳐지지 않아

silvaca01 이 별도 있는 거을 볼 수 있다

 

 

 

 

 

 

union 열을 같게끔 해주면 중복은제거된다

 

--커리어 평균 연봉이 3000000 이상인 선수들의 playerID
select playerID
from salaries

group by playerID
having AVG(salary) >= 300000 

UNION

--12월에 태어난 선수들의 playerID
select playerID
from players
where birthMonth = 12
order by playerID asc
;

이렇게 하면 합쳐진 하나만 나오는 것을 알수 있다 ( 중복 제거 )

 

 

 

 

union all 은 중복을 허용한다

select playerID
from salaries

group by playerID
having AVG(salary) >= 300000 

UNION all

--12월에 태어난 선수들의 playerID
select playerID
from players
where birthMonth = 12
order by playerID asc
;

 

 

union 을 쓰게 되면 order by 는 가장 하단에 와야 한다

 

 

 

 

교집합(intersect) 을 구한다 즉 양쪽 모두 만족하고 존재하는것을 구한다

--교집합(intersect) 을 구한다 즉 양쪽 모두 만족하고 존재하는것을 구한다
--커리어 평균 연봉이 3000000 이상이거나 (&&) 12월에 태어난 선수들
select playerID
from salaries

group by playerID
having AVG(salary) >= 300000 

intersect

--12월에 태어난 선수들의 playerID
select playerID
from players
where birthMonth = 12
order by playerID asc
;

 

 

 

 

--차집합
--커리어 평균 연봉이 3000000 이상이거나 (-) 12월에 태어난 선수들
select playerID
from salaries

group by playerID
having AVG(salary) >= 300000 

except

--12월에 태어난 선수들의 playerID
select playerID
from players
where birthMonth = 12
order by playerID asc
;

위는 차집합으로 A - B 가 된다

명령어는 except 가 된다

 

반응형

'서버(Server) > DB' 카테고리의 다른 글

DB : TRANSACTION  (0) 2023.02.17
DB : INNER JOIN, CROSS JOIN  (0) 2023.02.16
DB : 인덱스(Index)  (0) 2023.02.13
DB : DB(스키마) 만들기, 테이블 만들기와 Primary Key 의 성능  (0) 2023.02.12
DB : SUBQUERY  (0) 2023.02.10

+ Recent posts