728x90
JOIN
하나 이상의 테이블에서 데이터를 조회하기 위해 사용하며, 수행결과는 하나 이상의 Result Set으로 나옴
✔ 관계형 데이터 베이스에서 SQL를 이용해서 테이블 간 관계는 '칼럼'이 연결고리가 된다.
JOIN 작성 방법은 2가지가 있다.
작성 방법 크게 ANSI구문과 오라클 구문으로 나뉘고
ANSI에서 USING과 ON을 쓰는 방법으로 나뉜다.
1. 내부조인(INNER JOIN) == 등가조인(EQUAL JOIN)
연결되는 컬럼의 값이 일치하는 행들만 조인됨
1) 연결에 사용할 두 컬럼명이 다른 경우
-- EMPLOYEE 테이블, DEPARTMENT 테이블을 참조하여
-- 사번, 이름, 부서코드, 부서명 조회
ANSI
SELECT EMP_ID,EMP_NAME,DEPT_CODE,DEPT_TITLE
FROM EMPLOYEE
JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
오라클
SELECT EMP_ID,EMP_NAEM,DEPT_CODE,DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE = DEPT_ID;
2) 연결에 사용할 두 컬럼명이 같을 경우
ANSI
SELECT EMP_ID,EMP_NAME,JOB_CODE,JOB_NAME
FROM EMPLOYEE
JOIN JOB USING(JOB_CODE);
오라클
SELECT EMP_ID,EMP_NAME,E.JOB_CODE,JOB_NAME
FROM EMPLOYEE E, JOB J
WHERE E.JOB_CODE = J.JOB_CODE;
내부조인 문제점! 연결에 사용되는 컬럼 값이 NULL이면 조회 결과에 포함되지 않는다.
2. 외부조인(OUTER JOIN)
연결되는 컬럼의 값이 일치하지 않는 행들만 조인됨
반드시! OUTER JOIN임을 명시해야한다.
1) LEFT (OUTER) JOIN
합치기에 사용한 두 테이블 중 왼편에 기술된 테이블의 컬럼 수를 기준으로 JOIN
ANSI
SELECT EMP_NAME,DEPT_TITLE
FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
오라클
SELECT EMP_NAME,DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE = DEPT_ID(+);
2) RIGHT (OUTER) JOIN
합치기에 사용한 두 테이블 중 오른편에 기술된 테이블의 컬럼 수를 기준으로 JOIN
ANSI
SELECT EMP_NAME,DEPT_TITLE
FROM EMPLOYEE
RIGHT JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID);
오라클
SELECT EMP_NAME,DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE(+) = DEPT_ID;
3. 자체조인(SELF JOIN)
같은 테이블을 조인 = 자기 자신과 조인한다. .
ANSI
SELECT E.EMP_ID,E.EMP_NAME,NVL(E.MANAGER_ID,'없음'),NVL(M.EMP_NAME,'없음')
FROM EMPLOYEE E
LEFT JOIN EMPLOYEE M ON(E.MANAGER_ID =M.EMP_ID);
오라클
SELECT E.EMP_ID,E.EMP_NAME,NVL(E.MANAGER_ID,'없음'),NVL(M.EMP_NAME,'없음')
FROM EMPLOYEE E , EMPLOYEE M
WHERE E.MANAGER_ID = M.EMP_ID;
4. 다중조인(SELF JOIN)
N개의 테이블을 조회 할 때 사용한다 ' 순서대로 하나씩 진행하기에 순서가 중요하다!'
EMPLOYEE,DEPARTMENT,LOCATION 조인
ANSI
SELECT EMP_NAME,DEPT_TITLE,LOCAL_NAME
FROM EMPLOYEE
JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID)
JOIN LOCATION ON (LOCATION_ID = LOCAL_CODE);
오라클
SELECT EMP_NAME,DEPT_TITLE,LOCAL_NAME
FROM EMPLOYEE,DEPARTMENT,LOCATION
WHERE DEPT_CODE = DEPT_ID
AND LOCATION_ID = LOCAL_CODE;
728x90
'ON > Oracle' 카테고리의 다른 글
[Oracle] DAY23 _ TCL 트랜잭션 제어 언어 (0) | 2023.05.20 |
---|---|
[Oracle] DAY23_DML (0) | 2023.05.19 |
[Oracle] DAY22_GROUP BY / HAVING (0) | 2023.05.18 |
[Oracle] : DAY21 _ 단일행함수와 그룹함수 (2) | 2023.05.17 |
[Oracle] : DAY20 _ SELECT 기본 문법 및 연산자 (0) | 2023.05.16 |