[강의명]
패스트캠퍼스 SQL 100제 + 자격증 완성 온라인 완주반
[수강목록]
38. 집합 연산자와 서브커리 - 03. INTERSECT 연산
39. 집합 연산자와 서브커리 - 04. EXCEPT 연산
[강의내용]
38. 집합 연산자와 서브커리 - 03. INTERSECT 연산
INTERSECT 연산자는 2개 이상의 SELECT 문들의 결과 집합을 하나의 결과 집합으로 결합한다.
교집합을 만들어준다.
INNER JOIN과 똑같기 때문에 실무에서 굳이 쓰지 않는다.
약간의 차이점은
UNION 류와 마찬가지로 2개의 SELECT문 간 컬럼의 갯수가 동일해야 하고, 데이터 타입이 동일해야 한다.
또한 NATURAL JOIN과 비슷하게 ON 뒤에 조건을 적어주지 않아도 INNER JOIN의 효과를 낼 수있다.
[샘플데이터 확인]
[실습1]
KEYS 테이블의 employee_id와 HIPOS 테이블의 employee_id를 INTERSECT한다.
SELECT EMPLOYEE_ID
FROM KEYS
INTERSECT
SELECT EMPLOYEE_ID
FROM HIPOS;
39. 집합 연산자와 서브커리 - 04. EXCEPT 연산
EXCEPT 연산자는 맨위에 SELECT문의 결과 집합에서 그 아래에 있는 SELECT문의 결과 집합을 제외한 결과를 리턴한다.
A와 B의 차집합과 동일하다 (A―B)
INTERSECT와 마찬가지로 2개의 SELECT문 간 컬럼의 갯수가 동일해야 하고, 데이터 타입이 동일해야 한다.
실무에서 많이 쓰인다.
[실습1]
우선, 재고가 존재하는 영화의 film_id와 영화 제목을 추출한다.inventory 테이블에 film_id가 존재한다는 것은 그 영화의 재고가 있다는 것을 의미한다.
SELECT DISTINCT INVENTORY.FILM_ID, FILM.TITLE
FROM INVENTORY
JOIN FILM ON FILM.FILM_ID = INVENTORY.FILM_ID
ORDER BY FILM.TITLE;
이제 재고가 없는 영화들을 추출해본다.
모든 필름 정보에서 재고가 있는 필름 정보를 제외한다.
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;