4. FROM과 JOIN

jedo5000·2023년 11월 26일
0

DataBase

목록 보기
4/13

4.1 FROM의 개념

  • ~로부터, ~에서, 우리가 찾고자하는 데이터가 존재하는 객체(테이블) 앞에 사용

    ex) (직원테이블에서)

  • FROM 뒤에 여러 개의 테이블을 사용 가능, BUT! 여러개의 테이블이 올 경우 보통 테이블에 '별칭'을 사용한다!

    ex) 직원 테이블에서는 직원ID, 직원이 속한 부서명을 부서 테이블에서 꺼내서 출력해주세요

SELECT A.직원ID, B.부서명
FROM 직원 A, 부서 B

4.2 JOIN

2개 이상의 테이블을 하나의 SQL 문으로 연결한 것

카티션조인 : 조인 조건절을 적지 않은 경우 해당 테이블에 대한 모든 데이터를 가져오는 현상, 각 테이블의 모든 튜플에 대해 모든 경우의 수를 붙인 것

카티션 조인 사용하는 2가지 이유
1. 데이터를 복제하여 원본 테이블을 반복해서 읽는 것을 피하기 위해
2. 실수로 조인 조건 컬럼 중 일부를 빠뜨리는 경우

<참조>
https://itprogramming119.tistory.com/entry/Oracle-Cartesian-Product%EC%B9%B4%ED%8B%B0%EC%85%98%EA%B3%B1-%EC%A0%95%EB%A6%AC

조인조건 : 테이블 간에 특정 컬럼으로 연결하면 서로 연관된 데이터만 출력한다. 하나의 SQL문으로 두 개 이상의 테이블 결과 값을 연결하여 보고싶을 때 JOIN 사용함.

<직원ID로 연결하여 테이블을 출력>
여러 테이블에서 필요한 컬럼들을 한번에 검색 가능!


4.3 INNER JOIN / OUTER JOIN

아래 조인 문법에 나타나지 않은 튜플은?

  • 직원테이블의 부서ID가 NULL값인 행은 부서테이블과 조인 실패
  • 부서테이블의 부서ID가 D006인 값은 직원테이블에 없으므로 조인 실패

INNER 조인은 조건에 해당하는 튜플만 출력(교집합)

  • <반대쪽에 없는 부서ID는 JOIN불가능>

OUTER 조인은 조인에 실패한 튜플도 출력

(+)의 반대편이 기준이 된다!

  • ( A의 부서ID가 B 테이블에 없더라도 JOIN된 후 테이블에 부서ID가 NULL인채로 포함되게함. )
  • 기준에 해당하는 정보는 모두 출력! 해당하지 않은 값은 NULL로 출력
  1. (+) 기호는 오라클에서만 사용
  2. (+) 기호가 없으면 INNER JOIN
  3. (+) 기호 오라클에서 WHERE절에서 사용됨

실습문제

직원 테이블과 직원주소 테이블 , 직원연락처 테이블을 [직원ID] 컬럼으로 “=“ 조인하려고 합니다. INNER JOIN으로 위 세 개의 테이블을 조인해보세요.
{ 직원 테이블 : 직원ID , 이름 , 나이 }
{ 직원주소 테이블 : 주소 }
{ 직원연락처 테이블 : 연락처 }

SELECT A.직원ID, A.이름, A. 나이, B.연락처, C.주소
FROM 직원 A , 직원연락처 B, 직원주소 C
WHERE A.직원ID = B.직원ID
AND B.직원ID = C.직원ID ;
-- '='(동등)은 1:1 연산자이다! AND로 이어줘야함.

4.3 ANSL 문법

(+) 기호는 오라클에서만 사용할 수 있다고 했었다. 다른 DB에서 사용하려면 어떤 방법을 써야할까?

ANSI(미국국립표준협회) 문법은 모든 DBMS에서 사용가능한 조인 문법이다!

<오라클 조인과 ANSI의 차이점>

  • 오라클 조인은 WHERE절에서 조인조건 사용, ANSI문법은 FROM절에 기준이 되는 방향(LEFT,RIGHT) OUTER JOIN을 적어주고 ON부분에 조인조건을 사용!
  • 따로 (+) 조건이 없다면 INNER JOIN으로 연결한다.

오라클 조인을 ANSI 문법으로 바꾸는법

(+) 이 붙은 반대쪽 테이블의 방향으로
LEFT 혹은 RIGHT 를 결정하고 OUTER JOIN 으로 작성
ON 에 조인조건 , WHERE 에 일반조건을 입력하는 방식으로 변환

양쪽 테이블 모두 OUTER JOIN을 하고 싶다면 FULL OUER JOIN을 이용(오라클 문법에는 존재 X)

실습문제

직원 테이블과 직원주소 테이블 , 직원연락처 테이블을 [직원ID] 컬럼으로 “=“ 조인하려고 합니다. INNER JOIN으로 위 세 개의 테이블을 조인해보세요.(ANSI 문법 적용)

SELECT A.직원ID, A.이름, A. 나이, B.연락처, C.주소
FROM 직원 A INNER JOIN 직원연락처 B
ON(A.직원ID = B.직원ID) INNER JOIN 직원주소 C
ON(B.직원ID = C.직원ID) ;  
-- INNER JOIN으로 테이블을 이어주고 ON(조건)을 사용함.
-- INNER JOIN으로 테이블을 여러개 잇는게 핵심

0개의 댓글