ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SQLD 요약] II. SQL 기본 및 활용 - 02. SQL 활용 (1) - JOIN, UNION, MINUS
    자격증/SQLD (SQL 개발자) 2021. 5. 6. 15:17
    728x90
    반응형

     

     

    SQLD 요약 / SQL Developer 요약

    🔑 JOIN/ EQUI JOIN/ HASH JOIN/ INNER JOIN/ INTERSECT/ Non-EQUI JOIN/

           OUTER JOIN/ FULL OUTER JOIN/ LEFT OUTER JOIN/ RIGHT OUTER JOIN/ CROSS JOIN/

           UNION/ UNION ALL/ MINUS

     

    II. SQL 기본 및 활용

       02. SQL 활용

              [1] 조인 (JOIN)

     

     



     

    02. SQL 활용

     

    [1] 조인 (JOIN) | 여러 개의 릴레이션을 사용하여, 새로운 릴레이션을 만드는 과정

    JOIN 기능 JOIN 기능
    EQUI JOIN 교집합, 등가 조인 Non-EQUI JOIN 비등가 조인
    INNER JOIN 교집합, ON구 OUTER JOIN 교집합 + 한쪽 테이블
    INTERSECT 교집합 조회 CROSS JOIN 조건 없이 조인 

     

     

    (1) EQUI 조인 | 등가, 교집합 생성

    • 2개의 테이블 간에 일치하는 것을 조인
    • WHERE 절에서 "=" 로 2개 테이블을 연결함
    # JOIN Key (EQUI Join) : 2개 릴레이션을 결합
    # STUDENT 테이블의 DEPTNO와 DEPT 테이블의 DEPTNO가 같은 것을 조인
    SELECT * FROM STUDENT, DEPT
    WHERE STUDENT.DEPTNO = DEPT.DEPTNO;
    
    
    # 조인문에 추가조건, 정렬 가능
    # AND로 조건 추가, ORDER BY로 정렬
    SELECT * FROM STUDENT, DEPT
    WHERE STUDENT.DEPTNO = DEPT.DEPTNO
    AND STUDENT.STDNAME LIKE "박%"
    ORDER BY STDNAME;

     

    • TABLE ACCESS FULL - 2개 테이블의 전체를 읽은 다음 → 해시 함수로 2개 테이블을 연결함

    • 해시 조인(Hash Join)은 EQUI 조인만 사용 가능한 방법
      ① 선행 테이블 결정
      ② 선행 테이블에서 WHERE구의 조건에 해당하는 행 선택
      ③ 조인 키를 기준으로 해시 함수 사용
      ④ 해시 테이블을 메인 메모리에 생성
      ⑤ 후행 테이블에서 조건에 만족하는 행 검색

     

     

    (2) INNER JOIN | 내부 조인

    • "ON"문을 사용하여 테이블을 연결함
    • INNER JOIN구에서 2개의 테이블 이름 서술
    • ON구에서 조인 조건 서술
    # STUDENT, DEPT 테이블에서 DEPTNO 칼럼 기준으로 INNER JOIN 실행
    SELECT * FROM STUDENT INNER JOIN DEPT
    ON STUDENT.DEPTNO = DEPT.DEPTNO

     

     

    (3) INTERSECT 연산 | 교집합 조회

    • 2개 테이블에서 공통된 값을 조회
    # STUDENT, DEPT 테이블 간 교집합을 조회함
    SELECT DEPTNO FROM STUDENT
    INTERSECT
    SELECT DEPTNO FROM DEPT;

     

     

    (4) Non-EQUI | 비등가 조인

    • 2개 테이블 간에 정확하게 일치하지 않는 것을 조인
    • WHERE절에서 "="로 조인하는 EQUI 조인과 반대로, ">", "<", ">=", "<=" 등을 사용함

     

     

    (5) OUTER JOIN | 외부 조인

    • 2개 테이블 간에 교집합(EQUI JOIN) 조회 + 한쪽 테이블에만 있는 데이터도 포함
    • Oracle 데이터베이스에서 "(+)=" 로 OUTER JOIN 가능
    SELECT * FROM DEPT, STUDENT
    WHERE STUDENT.DEPTNO (+)= DEPT.DEPTNO;

     

     

    • LEFT OUTER JOIN: 교집합 + 왼쪽 테이블에만 있는 행도 포함 → 오른쪽 테이블에서 없으면 NULL값
    • RIGHT OUTER JOIN: 교집합 + 오른쪽 테이블에만 있는 행도 포함 → 왼쪽 테이블의 NULL인 행도 조회

    • FULL OUTER JOIN = LEFT OUTER JOIN + RIGHT OUTER JOIN
    # LEFT
    SELECT * FROM DEPT LEFT OUTER JOIN STUDENT
    ON STUDENT.DEPTNO = DEPT.DEPTNO;
    
    # RIGHT
    SELECT * FROM DEPT RIGHT OUTER JOIN DEPT
    ON STUDENT.DEPTNO = DEPT.DEPTNO;

     

     

    (6) CROSS JOIN | 조건구 없이 조인

    • 조인 조건구 없이, 2개 테이블을 1개로 조인
    • "ON"문에서 조건을 지정하지 않기 때문에, 카테시안 곱이 발생함

    • STUDENT 테이블이 총 12건, DEPT 테이블이 총 5건이면 → 조인은 총 12*5 = 60건 발생
    • SELECT * FROM STUDENT CROSS JOIN DEPT;

     


     

    [2] UNION을 사용한 합집합 구현

    (1) UNION | 2개 테이블을 하나로 합치는 연산

    • 2개 테이블의 칼럼 개수, 데이터 형식이 모두 일치해야 함

     

    (2) UNION ALL | 단순하게 합치기만 함

    UNION : 합집합 UNION ALL
    테이블을 1개로 합치면서
    - 중복 데이터 제거 O
    - 정렬(SORT) 발생 O
    UNION과 다르게
    - 중복 데이터 제거 X
    - 정렬(SORT) 발생 X
    SELECT DEPTNO FROM STUDENT
    UNION
    SELECT DEPTNO FROM STUDENT;
    SELECT DEPTNO FROM STUDENT
    UNION ALL
    SELECT DEPTNO FROM STUDENT;

     


     

    [3] 차집합을 만드는 MINUS

    (1) MINUS | 2개 테이블에서 차집합을 조회

    • 먼저 쓴 SELECT문에는 있고, 뒤에 쓴 SELECT문에는 없는 집합을 조회함
    • MS-SQL의 EXCEPT와 동일함
    # STUDENT에는 없고, DEPT에만 있는 행을 조회함
    SELECT DEPTNO FROM DEPT
    MINUS
    SELECT DEPTNO FROM STUDENT;

     


     

    참고도서: SQL 개발자 이론서+기출문제_이기적, 2020

     

     

    728x90
    반응형