Skip to main content

집합 연산자


집합 연산자

  • 집합 연산자 (Set Operators): 두 개 이상의 SELECT 문의 결과를 결합하거나 비교하여 하나의 결과 집합으로 반환.
  • 규칙:
    • SELECT 문의 열 개수와 데이터 타입이 순서대로 일치해야 함.
    • 열 이름은 첫 번째 SELECT 문의 것을 따름.
    • ORDER BY는 마지막 SELECT 문 뒤에 한 번만 사용 가능 (전체 결과에 대해 정렬).

UNION

  • UNION: 두 SELECT 문의 결과를 합치되, 중복된 행은 제거하고 보여줌.
SELECT BIZ_REG_NO, COMPANY_NM FROM TB_COMPANY_MASTER WHERE COMPANY_TYPE_CAT = '대기업'
UNION
SELECT BIZ_REG_NO, COMPANY_NM FROM TB_COMPANY_MASTER WHERE ESTABLISH_DT > TO_DATE('2010-01-01', 'YYYY-MM-DD');
  • UNION ALL: 두 SELECT 문의 결과를 합치되, 중복된 행도 모두 포함하여 보여줌. (UNION보다 빠름)
SELECT LOAN_TYPE_CD FROM TB_LOAN_ACCOUNT WHERE INTEREST_RATE > 4.0
UNION ALL
SELECT LOAN_TYPE_CD FROM TB_LOAN_ACCOUNT WHERE LOAN_AMT > 50000000000;

INTERSECT

  • INTERSECT: 두 SELECT 문의 결과에 모두 존재하는 행만 보여줌 (교집합, 중복 제거).
-- 2023년 재무정보가 있는 회사 중 여신도 있는 회사
SELECT BIZ_REG_NO FROM TB_FINANCIAL_STATEMENT WHERE FS_YM = '202312'
INTERSECT
SELECT DISTINCT BIZ_REG_NO FROM TB_LOAN_ACCOUNT;

MINUS

  • MINUS (Oracle) / EXCEPT (표준 SQL, 다른 DBMS): 첫 번째 SELECT 문의 결과에서 두 번째 SELECT 문의 결과에 존재하는 행을 제외하고 보여줌 (차집합, 중복 제거).
-- 2023년 재무정보가 있는 회사 중에 여신 금리가 3.0% 미만인 회사 제외
SELECT BIZ_REG_NO FROM TB_FINANCIAL_STATEMENT WHERE FS_YM = '202312'
MINUS
SELECT BIZ_REG_NO FROM TB_LOAN_ACCOUNT WHERE INTEREST_RATE < 3.0;

퀴즈