ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SQLD] SQL 개발자 공부하기 Day 7 : SUBQUERY / JOIN / UNION / MINUS
    Study/SQL 2024. 2. 22. 20:27
    728x90
    반응형
    목차
    1. SUBQUERY
    2. JOIN / UNION / MINUS

    1. SUBQUERY 

     

     

    Subquery

    SELECT문 내에 다시 SELECT 문을 사용하는 SQL 문이다.

    ‣ WHERE구에 SELECT 문을 사용하면 서브쿼리라고 한다.

     

     

    (1) 서브쿼리의 형태

    인라인 뷰 Inline View 

    FROM구에 SELECT문을 사용한다.

     

    스칼라 서브쿼리 Scala Subquery

    SELECT문에 Subquery를 사용한다.

     

     

    (2) 서브쿼리의 분류

    서브쿼리는 반환하는 행 수가 한 개인 것과 여러 개인 것에 따라서 분류된다.

     

     

    단일 행 서브쿼리 Single row subquery

    단 하나의 행만 반환하는 서브쿼리

    서브쿼리를 실행하면 그 결과는 반드시 한 행만 조회된다.

    비교 연산자인 =, <, <=, >, >=, <>를 사용한다.

     

    다중 행 서브쿼리 Multi row subquery

    여러 개의 행을 반환하는 서브쿼리

    서브쿼리를 실행하면 그 결과는 여러 개의 행이 조회된다.

    다중 행 비교 연산자인 IN, ANY, ALL, EXISTS를 사용한다.

     

     

    다중 행 비교 연산자

    다중 행 연산 설명
    IN(Subquery) Main query의 비교조건이 Subquery의 결과 중 하나만 동일하면 참이 된다.
    ALL(Subquery) Main query와 Subquery의 결과가 모두 동일하면 참이 된다.
    ANY(Subquery) Main query의 비교조건이 Subquery의 결과 중 하나 이상 동일하면 참이 된다.
    EXISTS(Subquery) Main querydhk Subquery의 결과가 하나라도 존재하면 참이 된다.
    반응형

     

    (3) 스칼라 서브쿼리 Scala Subquery

     반드시 한 행과 한 칼럼만 반환하는 서브쿼리

    만약 여러 행이 반환되면 오류가 발생한다.

     

     

    (4) 연관 서브쿼리 Correlated Subquery

    ‣ Subquery 내에서 Main Query 내의 칼럼을 사용하는 것을 의미한다.

     

     

     


    2. JOIN / UNION / MINUS

     

    조인 Join

    ‣ 조인은 여러 개의 릴레이션을 사용해서 새로운 릴레이션을 만드는 과정

    조인의 가장 기본은 교집합을 만드는 것.

     

    (1) EQUI JOIN

     두 개의 테이블 간에 일치하는 것을 조인한다.

    EQUI JOIN은 "="을 사용해서 두 개의 테이블을 연결한다.

    SELECT *
    FROM EMP, DEPT
    WHERE EMP. DEPTNO = DEPT. DEPTNO;

     

    ‣ EMP 표와  DEPT 표에서 EMP 표의 DEPTNO 칼럼 값과 DEPT 표의 DEPTNO 칼럼 값이 일치하는 모든 값을 조회하라.

     

     

    (2) INNER JOIN

    EQUI JOIN과 마찬가지로 ISO 표준 SQL로 INNER JOIN이 있다.

    INNER JOIN은 ON문을 사용해서 테이블을 연결한다.

    SELECT *
    FROM EMP 
    INNER JOIN DEPT
    ON EMP. DEPTNO = DEPT. DEPTNO;

     

    ‣ EMP 표의 DEPTNO 칼럼 값과 DEPT 표의 DEPTNO 칼럼 값이 일치하는 모든 값을 조회하라. 

     

     

    (3) 해시 함수

    테이블을 해시 메모리에 적재한 후에 해시 함수로써 연결하는 방법.

     

     

    (4) 해시 조인 HASH JOIN

    해시 조인은 EQUI JOIN만 사용 가능한 방법이다.

    728x90
    1) 먼저 선행 테이블을 결정하고 선행 테이블에서 조어진 조건(where 구)에 해당하는 행을 선택한다.

    2) 해당 행이 선택되면 조인 키(Join key)를 기준으로 해시 함수를 사용해서 해시 테이블을 메인 메모리(Main memory)에 생성하고 후행 테이블에서 주어진 조건에 만족하는 행을 찾는다.

    3) 후행 테이블의 조인 키를 사용해서 해시 함수를 적용하여 해당 버킷을 검색한다.

     

     

    (5) INTERSECT 연산

    두 개의 테이블에서 교집합을 조회한다.

    즉, 두 개 테이블에서 공통된 값을 조회한다.

     

     

    (6) Non-EQUI JOIN

     두 개의 테이블 간에 조인하는 경우 "="을 사용하지 않고 "<", ">", "<=", ">=" 등을 사용한다.

     즉, 정확하게 일치하지 않는 값을 조인하는 것이다.

     

     

    (7) OUTER JOIN

     두 개의 테이블 간에 교집합을 조회하고 한쪽 테이블에만 있는 데이터도 포함시켜서 조회한다.

    왼쪽 테이블에만 있는 행도 포함하면 LEFT OUTER JOIN.

    오른쪽 테이블에만 있는 행도 포함하면 RIGHT OUTER JOIN.

    LEFT OUTER JOIN과 RIGHT OUTER JOIN 모두를 하는 것은 FULL OUTER JOIN.

    Oracle 데이터베이스에서는 OUTER JOIN을 할 때, "(+)" 기호를 사용해서 할 수 있다.

     

     

    (8) CROSS JOIN

    조인 조건구 없이 2개의 테이블을 하나로 조인한다.

    조인구가 없기 때문에 카테시안 곱이 발생한다.

    SELECT *
    FROM Table A CROSS JOIN Table B;

     

    SELECT * FROM Table A, Table B;

     

    Table A와 Table B를 하나의 표로 조인한다.

     

     

    UNION

    두 개의 테이블을 하나로 만드는 연산이다.

    즉, 2개의 테이블을 하나로 합치는 것이다.

     

    두 개의 테이블을 하나로 합치면서 중복된 데이터를 제거한다.

    UNION은 정렬 과정을 발생시킨다.

    ‣ 주의사항은 두 개의 테이블의 칼럼 수, 칼럼의 데이터 형식 모두가 일치해야 한다.
    만약 두 개의 테이블에 UNION 연산이 사용될 때, 칼럼 수 혹은 데이터 형식이 다르면 오류가 발생한다.

     

     

    (10) UNION ALL

     두 개의 테이블을 하나로 만드는 연산이다.

    UNION처럼 중복을 제거하거나 정렬을 유발하지 않는다.

     

     

    MINUS

     두 개의 테이블에서 차집합을 조회한다.

    즉, 먼저 쓴 SELECT문에는 있고 뒤에 쓰는 SELECT문에는 없는 집합을 조회한다.

     

     

    SELECT DEPTNO FROM DEPT
    MINUS 
    SELECT DEPTNO FROM EMP;

     

    DEPT에 [10, 20, 30, 40] EMP에 [10, 20, 30]의 데이터가 있다면, 결과는 [40]만 조회된다.

     

     

     

    728x90
    반응형

    댓글

Designed by Tistory.