230310 (JOIN)
《 JOIN 》
:: 하나 이상의 테이블에서 데이터를 조회하기 위해 사용.
// 테이블과 테이블을 합치기 위해 사용하는 것. (필요한 것을 한 번에 보기 위해)
// 하나의 테이블 안에서도 JOIN이 가능하다 (= SELF JOIN)
★ 테이블 간의 JOIN은 컬럼명이 달라도 상관 없음. (관계, 연결 여부와 관계 없다)
→ 그 안에 들어있는 데이터 값이 같으면 서로 연결할 수 있다
INNER JOIN (내부 조인, 등가 조인(EQUAL JOIN)
:: 연결되는 컬럼의 값 중에 일치하는 행들만 조인 (교집합)
// JOIN의 디폴트이기 때문에 INNER를 명시해주지 않아도 됨
+ 오라클 구문 / ANSI 구문(표준)
① 오라클 구문
// 조건로 WHERE절이 추가
≫ EMPLOYEE 테이블에 있는 DEPT_CODE를 가져와도 되고,
DEPARTMENT 테이블에 있는 DEPT_ID를 가져와도 상관 없다
왜냐면 어차피 안에 공통된 값들만 가져올 것이니까.
▽
근데 총 23명인데 21명만 결과로 나왔다.
그 이유는 null은 연결되지 않았기 때문!
② ANSI 표준 구문
다른 테이블끼리 JOIN 진행해보기
1.
① 오라클 구문
JOB_CODE는 EMPLOYEE 테이블과 JOB 테이블에 공통적으로 들어있다.
∴ 만약 JOIN할 테이블에 각각 같은 이름의 컬럼이 있다면
어떤 컬럼이 어느 테이블에 들어있는지 잘 구분해주어야 함.
≫ EMPLOYEE 테이블의 JOB_CODE와 JOB 테이블의 JOB_CODE를
명확히 구분해 적어주었더니 오류 없이 잘 실행이 되었다.
+) 각각의 테이블에 별칭 지정하기
(띄어쓰기만 가능함 AS 등 사용 불가)
② ANSI 표준 구문
위의 ANSI 구문과 FROM절 내 모양새가 좀 다르다. 그 이유는?
★ ANSI 표준 구문에서
내가 연결할 컬럼의 이름이 같으면 USING을 이용해서 컬럼 하나만 넣어주면 되고,
내가 연결한 컬럼의 이름이 다르면 ON을 적어 누구와 누구를 연결할 지 적어야 한다.
(USING이 두 테이블 간의 같은 컬럼을 사용한다고 이미 알려주고 있음)
OUTER JOIN(외부 조인)
:: INNER JOIN과 달리 일치하지 않는 데이터도 셀렉하고 싶을 때
// 디폴트가 아니기 때문에 OUTER JOIN을 명시해주어야 함. (방향 또한)
// ANSI 표준 구문이 디폴트
LEFT [OUTER] JOIN | 'JOIN' 단어에서 왼쪽 테이블 행 수로 기준을 맞추겠다 |
RIGHT [OUTER] JOIN | 'JOIN' 단어에서 오른쪽 테이블 행 수로 기준을 맞추겠다 |
FULL [OUTER] JOIN | 양쪽 테이블 모두에 기준을 맞추겠다 |
*대괄호 속 OUTER는 생략 가능
LEFT [OUTER] JOIN
∴ EMPLOYEE 테이블인 왼쪽에 기준이 맞춰졌다는 것을 확인할 수 있다!
≫ DEPT_CODE가 NULL이어서 제외였던 EMP_NAME의 데이터도 나옴
이것과 같음.
RIGHT [OUTER] JOIN
∴ DEPARTMENT 테이블인 오른쪽에 기준이 맞춰졌다는 것을 확인할 수 있다!
≫ 부서는 있지만 비어있던 DEPT_TITLE의 NULL 데이터도 나왔다.
FULL [OUTER] JOIN
:: 양쪽 테이블의 정보가 모두 나온다고 생각하면 됨
오라클 구문으로도 바꿔보기
:: LEFT와 RIGHT OUTER JOIN의 ANSI 표준 구문은
오라클 구문으로 변경 가능하지만 FULL은 변경 불가
// 기준을 맞춰줘야 하는 쪽에다가 (+)를 붙여주면 됨 (기준이 아닌 컬럼에다 +)
1)
2)
다중 조인
1. 오라클 구문
// FROM 절에서 순서를 정해놓고 진행하기 때문에
WHERE 안의 순서를 바꿔도 상관 없다!
≫ AND로 이어주었고, 순서를 바꿔도 결과가 같은 것을 알 수 있다.
2. ANSI 표준 구문
// ★ ANSI 표준 구문에서는 JOIN의 순서가 굉장히 중요하다.
≫ 위의 쿼리문은 정상적으로 결과가 나오나 아래는 에러가 난다!
📝 문제 풀어보기
★★ 서로 테이블간의 공통된 거 있으면 순서만 따져서 연결해버리면 되는 거!!!!!!!!!!!!!!!!!!!!!!!
메모
테이블 관계는 데이터만 같으면 JOIN 할 수 있음.
테이블 데이터만 같게 가지고 있으면 JOIN이 가능하다.
PK 기본키
FK 외래키
내추럴 조인 , 자연 조인 검색해서 따로 공부하기