SQL - SET_OPERATORS

김규린·2024년 8월 23일
0

Data Base

목록 보기
10/20

1. SET OPERATORS

  • SET 연산자는 두 개 이상의 SELECT문의 결과 집합을 결합하는데 사용한다.
  • SET 연산자를 통해 결합하는 결과 집합의 컬럼이 동일해야 한다.

  • join이 가로로 하는 거라면 set operators는 세로로 병합하는 것

1. UNION

  • 두 개 이상의 SELECT 문의 결과를 결합하여 중복된 레코드를 제거한 후 반환하는 SQL 연산자
-- UNION(합집합)
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 연산자
-- INTERSECT(교집합): mysql에서는 사용하지 않는 함수 inner join이나 in 연산자 활용해서 구해야 한다
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;
  • inner join 활용
	-- inner join 활용
	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;
  • in연산자 활용
	-- in연산자 활용
	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 연산자
-- MINUS(차집합)
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;
profile
나는 할 수 있다...!

0개의 댓글