데이터베이스

[DB]6. JOIN

CodeJaram 2023. 6. 5. 08:01

[JOIN]

1. JOIN: 필요한 데이터가 두 개 이상의 테이블에 나누어져있을 때 데이터를 합쳐서

가져오고자 하는 경우 사용

예)직원 ID가 100인 직원의 부서이름을 출력

 

2. FROM 절

 

 

● 테이블 여러 개 지정하여 출력가능

● 테이블에 별칭 지정 가능

● FROM절에 별칭 사용하면 그 이후에 오는 실행절(SELECT, WHERE절 등)에 모두 별칭만

사용해야 한다.

 

● 테이블 여러 개 사용 시, 어느 테이블에서 가져온 컬럼인지 명확하게 지정해야 한다.

-방법: 테이블명(별칭).컬럼

● 컬럼이 각각의 테이블에 모두 있는 경우 구분짓기 위해 컬럼 앞에 테이블을 명시해야

하지만, 한 테이블에만 있는 컬럼인 경우 반드시 테이블명을 명시할 필요없다.

 

  EMPLOYEES와 DEPARTMENTS에 모두 있는 컬럼일 경우         DEPARTMENTS에만 있는 컬럼일 경우

 

3. CROSS JOIN

-조건절을 쓰지 않고, 테이블의 모든 데이터를 가져오는 방법

-테이블 1의 행의 개수*테이블 2의 행의 개수=CROSS JOIN한 행의 개수

 

4. INNER JOIN(등가조인)

-출력행을 각 테이블의 특정 열에 일치한 데이터를 기준으로 출력하는 방법

-A 테이블과 B테이블이 일치되는 열을 찾아 조건을 작성한다.

-NULL값을 출력하지 않는다.

예)직원 테이블의 부서ID=부서 테이블의 부서ID

 

1)WHERE 조건절

SELECT

FROM A 테이블, B테이블

WHERE 조인조건

 

2)ANSI 문법: 모든 DBMS에서 사용가능

 

 

[실습1]

--WHERE절
SELECT E.EMPLOYEE_ID, J.JOB_ID, J.JOB_TITLE
FROM EMPLOYEES E, JOBS J
WHERE E.JOB_ID =J.JOB_ID
ORDER BY 1;


--ANSI 문법
SELECT E.EMPLOYEE_ID, J.JOB_ID, J.JOB_TITLE
FROM EMPLOYEES E INNER JOIN JOBS J
ON (E.JOB_ID =J.JOB_ID)
ORDER BY 1;

5. OUTER JOIN

INNER JOIN은 NULL값을 출력하지 않는다.

NULL값을 포함해서 출력해야 할 때 OUTER JOIN 사용

 

 

● LEFT OUTER: A 테이블의 NULL포함

● FULL OUTER: A, B 테이블의 NULL포함

● RIGHT OUTER: B 테이블의 NULL 포함

 

1)ANSI 문법

A테이블과 B 테이블 사이에 OUTER조인 종류만 바꿔서 입력

 

2)ORACLE 문법(+)

-INNER JOIN의 WHERE 조건절과 문법 동일

-WHERE 조건절에서 JOIN하고자 하는 테이블 반대쪽 테이블에 (+)기호 사용

 

 

● LEFT OUTER JOIN: B 컬럼(+)

 

● RIGHT OUTER JOIN: A 컬럼(+)

 

● FULL OUTER JOIN: UNION 사용(119p.)

 

-LEFT OUTER JOIN, RIGHT OUTER JOIN 구문 사이에 UNION 사용

 

 

 

[실습2]

SELECT D.DEPARTMENT_NAME, D.MANAGER_ID, E.EMPLOYEES_ID
FROM DEPARTMENTS D INNER JOIN EMPLOYEES E
ON(WHERE D.DEPARTMENT_ID=E.DEPARTMENT_ID);

 

 

 

[실습3]

SELECT D. DEPARTMENT_NAME, L.CITY, C.CONTRY_NAME
FROM DEPARTMENTS D, LOCATIONS L, COUNTRIES C
WHERE D.LOCATION_ID =L.LOCATION_ID
AND C.COUNTRY_ID, L.COUNTRY_ID;

 

 

'데이터베이스' 카테고리의 다른 글

[DB]8.DML&서브쿼리  (1) 2023.06.07
[DB]7. DDL  (1) 2023.06.06
[DB]5. GROP BY&HAVING절  (0) 2023.06.01
[DB]4. Oracle 함수  (0) 2023.05.31
[DB]3. WHERE절  (0) 2023.05.30