반응형
--3)INTERSECT 연산자
--두 개 이상의 SELECT문들의 결과 집합을 하나의 결과 집합으로 결합한다.
--즉 테이블1과 테이블2의 교집합을 리턴
SELECT COLUMN_1_1, COLUMN_1_2 --두 개의 SELECT문 간 컬럼의 개수는 동일해야하고
--해당 순서의 열에는 서로 호환되는 데이터 유형이어야한다.
FROM TABLE_NAME_1
INTERSECT
SELECT COLUMN_2_1, COLUMN_2_2
FROM TABLE_NAME_2;
select EMPLOYEE_ID
from keys k
intersect
select employee_id
from HIPOS;
--실무에서 많이쓰이지 않음
--왜냐면 INNER JOIN과 결과가 동일하기 때문
select A.EMPLOYEE_ID
from KEYS A, HIPOS B
where A.employee_id = B.employee_id ;
--ORDER BY 사용
select EMPLOYEE_ID
from keys k
intersect
select employee_id
from hipos h
order by employee_id desc; --마지막 SELECT문 뒤에 order by절
--4)EXCEPT 연산자
--맨위에 SELECT문의 결과 집합에서 그 아래에 있는 SELECT문의 결과 집합을 제외한 결과를 리턴
--테이블 1과 테이블 2의 차집합을 리턴(테이블1-테이블2)
--실무에서 많이 쓰임
select COLUMN_1_1, COLUMN_1_2 --두 개의 SELECT문 간 컬럼의 개수는 동일해야하고
from TABLE_NAME_1 --해당 순서의 열에는 서로 호환되는 데이터 유형이어야한다.
except
select COLUMN_2_1, COLUMN_2_2
from TABLE_NAME_2;
--재고가 존재하는 영화의 필름ID와 영화제목을 추출하는 SQL
select distinct INVENTORY.FILM_ID, TITLE
from INVENTORY
inner join film
on FILM.film_id = INVENTORY.film_id
order by TITLE;
--필름과 인벤토리는 1:M관계 -> 두테이블을 조인하면 -> 영화 하나당 여러개의 재고가 나온다. ->증복을 제거하기위해 DISTINCT사용
--그렇다면 재고가 존재하지 않는 영화는 어떻게 추출하는가
--필름집합 - 재고가 존재하는 영화 = 재고가 존재하지 않은 영화
SELECT FILM_ID, TITLE --전체영화에서
FROM FILM
EXCEPT --재고가 존재하는 영화를 뺀다.
SELECT DISTINCT INVENTORY.FILM_ID, TITLE
FROM INVENTORY
INNER JOIN FILM
ON FILM.FILM_ID = INVENTORY.FILM_ID
ORDER BY TITLE;
반응형
'DataBase' 카테고리의 다른 글
[postgreSQL] ANY 연산자, ALL 연산자,EXISTS 연산자 (0) | 2021.09.15 |
---|---|
[postgreSQL] 서브 쿼리 종류 (0) | 2021.09.14 |
[postgreSQL][집합연산자] UNION, UNION ALL (0) | 2021.09.14 |
[postgreSQL] GROUP BY, HAVING 절 (0) | 2021.09.14 |
[postgreSQL] NATURAL JOIN (0) | 2021.09.14 |
댓글