[SQL] 집합 연산자(UNION, UNION ALL, INTERSECT, MINUS),INLINE VIEW

2024. 9. 3. 04:06·SQL
집합연산자
두 개 이상의 SELECT 쿼리의 결과를 결합하여 하나의 결과 집합을 생성하는 데 사용된다. 주로 다음과 같은 연산자가 있다. 줄단위의 결합을 하며 두 테이블의 칼럼수와 타입이 동일해야 한다.

UNION

두 개 이상의 SELECT 쿼리 결과를 결합하여 중복된 행을 제거한 결과를 반환한다. =>합집합
 EX)두 부서 모두 출력하는데 A대학 나온사람들을 중복시 한 번만 출력함.

UNION ALL

두 개 이상의 SELECT 쿼리 결과를 결합하되, 중복된 행도 포함하여 반환한다. =>합집합+교집합

EX)두 부서 모두출력하는데 A대학 나온사람들을 두 번 출력하게 됨

+

INTERSECT

두 개의 SELECT 쿼리에서 공통으로 나타나는 행만 반환한다. =>교집합

EX)두 부서에서 A 대학을 나온사람들을 출력함.

MINUS

첫 번째 SELECT 쿼리 결과에서 두 번째 SELECT 쿼리 결과에 포함되지 않은 행을 반환한다. =>차집합

EX)두부서에서 한부서(A 대학나온사람 포함)를 제외하고 한부서만 출력함.

 

💡규칙만 맞으면  의미없는 데이터도 UNION 가능하다->비추천
SELECT EMPLOYEE_ID, FIRST_NAME FROM EMPLOYEES 
UNION
SELECT DEPARTMENT_ID, DEPARTMENT_NAME FROM EMPLOYEES;
=>두 SELECT문이 공통된 부분이 없어서 의미없는 데이터

 

현재근무하는 직원의 업무목록의 일부분

 

위와 같이 연속되는 칼럼이 있는 테이블을 이용하여 데이터를 출력하려면 두개의 SELECT문을 결합하여 쿼리를 작성해야한다.

SELECT 사번, 이름, 업무시작일, 업무종료일, 담당업무ID, 담당업무
FROM 
(
SELECT E.EMPLOYEE_ID 사번,
E.FIRST_NAME ||' '|| E.LAST_NAME 이름,
H.START_DATE 업무시작일,
H.END_DATE 업무종료일,
J.JOB_ID 담당업무ID,
J.JOB_TITLE 담당업무
FROM EMPLOYEES E, JOB_HISTORY H, JOBS J
WHERE E.EMPLOYEE_ID=H.EMPLOYEE_ID AND H.JOB_ID=J.JOB_ID
UNION ALL 
SELECT E.EMPLOYEE_ID 사번,
E.FIRST_NAME ||' '|| E.LAST_NAME 이름,
E.HIRE_DATE 업무시작일,
SYSDATE 업무종료일,
E.JOB_ID 담당업무ID,
J.JOB_TITLE 담당업무
FROM EMPLOYEES E, JOBS J
WHERE E.JOB_ID=J.JOB_ID
) T --alias
ORDER BY 사번 ASC, 업무시작일 ASC, 업무종료일 ASC
;

📍위와 같이 연속성을 가지고 있는 데이터가 한 테이블에 함께 있는 것이 아닐 때 유용하게 사용할 수 있다. 또한 SUBQUERY에서는 ORDER BY를 사용할 수 없는데 INLINE VIEW를 사용하면 ORDER BY를 사용해서 정렬할 수 있다.

💡INLINE VIEW를 사용하지 않고도 ORDER BY를 사용할 수는 있으나 가독성이 떨어지고 여러 조합을 다루게 될 경우 복잡해진다.

INLINE VIEW

📍 INLINE VIEW는 SQL 쿼리에서 임시 테이블처럼 작동하는 뷰(View)를 의미한다. 즉, 쿼리의 FROM 절 내에 서브쿼리를 넣어 그 결과를 테이블처럼 사용할 수 있는 구조이다. INLINE VIEW는 특정 데이터 집합을 생성하고, 이를 기반으로 추가적인 쿼리를 수행할 수 있게 해준다.

'SQL' 카테고리의 다른 글

[SQL]WINDOW FUNCTION(윈도우 함수),분석함수(Analytic Function)  (0) 2024.09.04
[sql] 계층형 쿼리(Hierarchical Query)  (0) 2024.09.04
[sql]JOIN, ANSI JOIN  (0) 2024.09.02
[sql] 그룹 쿼리 (group query)와 서브쿼리(sub query)  (2) 2024.09.01
[SQL] 함수  (1) 2024.08.30
'SQL' 카테고리의 다른 글
  • [SQL]WINDOW FUNCTION(윈도우 함수),분석함수(Analytic Function)
  • [sql] 계층형 쿼리(Hierarchical Query)
  • [sql]JOIN, ANSI JOIN
  • [sql] 그룹 쿼리 (group query)와 서브쿼리(sub query)
라텐느
라텐느
이제 막 개발을 시작한 초보가 개인공부를 하는 공간입니다.
  • 라텐느
    괴발개발
    라텐느
    • 개발자 (153)
      • HTML|CSS (14)
      • JAVA (29)
      • JAVACSCRIPT (15)
      • SQL (16)
      • 기타 (5)
      • JSP (2)
      • SPRING (13)
      • SPRING BOOT (6)
      • Git&GitHub (1)
      • 시행착오 (2)
      • 개발일지 (35)
        • GreenMiniProject1 (12)
        • GreenMiniProject2 (9)
        • GreenFinalProject (14)
      • Flutter (5)
      • 자격증 (0)
        • SQLD (1)
      • AWS (2)
      • Linux (1)
      • 자료구조&알고리즘 (4)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 태그
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    JQuery
    태그
    링크
    db
    개발자
    티스토리챌린지
    javascript
    input
    SQL
    HTML
    link
    java
    자기계발
    AJAX
    오블완
    JS
    tag
    일지
    CSS
    부트캠프
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
라텐느
[SQL] 집합 연산자(UNION, UNION ALL, INTERSECT, MINUS),INLINE VIEW
상단으로

티스토리툴바