1. SET OPERATORS
- SET 연산자는 두 개 이상의 SELECT문의 결과 집합을 결합하는데 사용한다.
- SET 연산자를 통해 결합하는 결과 집합의 컬럼이 동일해야 한다.
- join이 가로로 하는 거라면 set operators는 세로로 병합하는 것
1. UNION
- 두 개 이상의 SELECT 문의 결과를 결합하여 중복된 레코드를 제거한 후 반환하는 SQL 연산자
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE category_code = 10
UNION
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE menu_price < 9000;
2. UNION ALL
- 두 개 이상의 SELECT 문의 결과를 결합하며 중복된 레코드를 제거하지 않고 모두 반환하는 SQL 연산자
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE category_code = 10
UNION ALL
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE menu_price < 9000
ORDER BY 1;
3. INTERSECT
- mysql에서는 사용하지 않는 함수로 inner join이나 in 연산자 활용해서 구해야 한다
- 두 SELECT 문의 결과 중 공통되는 레코드만을 반환하는 SQL 연산자
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE category_code = 10
intersect
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE menu_price < 9000
ORDER BY 1;
SELECT
a.menu_code
, a.menu_name
, a.menu_price
, a.category_code
, a.orderable_status
FROM tbl_menu a
INNER JOIN (SELECT menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE menu_price < 9000) b ON (a.menu_code = b.menu_code)
WHERE a.category_code = 10;
SELECT
a.menu_code
, a.menu_name
, a.menu_price
, a.category_code
, a.orderable_status
FROM tbl_menu a
WHERE category_code = 10
AND menu_code IN (SELECT menu_code
FROM tbl_menu
WHERE menu_price < 9000);
4. MINUS
- mysql에서는 사용하지 않는 함수로 LEFT JOIN 활용해서 구해야 한다
- 첫 번째 SELECT 문의 결과에서 두 번째 SELECT 문의 결과가 포함하는 레코드를 제외한 레코드를 반환하는 SQL 연산자
SELECT
a.menu_code
, a.menu_name
, a.menu_price
, a.category_code
, a.orderable_status
, b.*
FROM tbl_menu a
LEFT JOIN (SELECT menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE menu_price < 9000) b ON (a.menu_code = b.menu_code)
WHERE a.category_code = 10
AND b.menu_code IS NULL;