KH

230310 (JOIN)

十月 2023. 3. 10. 15:36

《 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 등 사용 불가)

서로 JOIN할 컬럼 명이 같음

 

② ANSI 표준 구문

연결할 컬럼의 이름이 같음

위의 ANSI 구문과 FROM절 내 모양새가 좀 다르다. 그 이유는?

위의 ANSI 구문 / 연결할 컬럼의 이름이 다름

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

JOIN이 들어가니까 ANSI 표준 구문이 디폴트

∴ 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 외래키

 

내추럴 조인 , 자연 조인 검색해서 따로 공부하기