ex) (직원테이블에서)
ex) 직원 테이블에서는 직원ID, 직원이 속한 부서명을 부서 테이블에서 꺼내서 출력해주세요
SELECT A.직원ID, B.부서명
FROM 직원 A, 부서 B
카티션조인 : 조인 조건절을 적지 않은 경우 해당 테이블에 대한 모든 데이터를 가져오는 현상, 각 테이블의 모든 튜플에 대해 모든 경우의 수를 붙인 것
카티션 조인 사용하는 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로 연결하여 테이블을 출력>
여러 테이블에서 필요한 컬럼들을 한번에 검색 가능!
아래 조인 문법에 나타나지 않은 튜플은?
- 직원테이블의 부서ID가 NULL값인 행은 부서테이블과 조인 실패
- 부서테이블의 부서ID가 D006인 값은 직원테이블에 없으므로 조인 실패
INNER 조인은 조건에 해당하는 튜플만 출력(교집합)
OUTER 조인은 조인에 실패한 튜플도 출력
(+)의 반대편이 기준이 된다!
- ( A의 부서ID가 B 테이블에 없더라도 JOIN된 후 테이블에 부서ID가 NULL인채로 포함되게함. )
- 기준에 해당하는 정보는 모두 출력! 해당하지 않은 값은 NULL로 출력
실습문제
직원 테이블과 직원주소 테이블 , 직원연락처 테이블을 [직원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로 이어줘야함.
(+) 기호는 오라클에서만 사용할 수 있다고 했었다. 다른 DB에서 사용하려면 어떤 방법을 써야할까?
오라클 조인을 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으로 테이블을 여러개 잇는게 핵심