Cracking Code

SQL - JOIN (ANSI) 본문

Database

SQL - JOIN (ANSI)

CrackCo 2020. 7. 19. 18:25
ANSI JOIN은 오라클뿐만 아니라 모든 DB에서 사용할 수 있는 JOIN입니다.

FROM 절에서 JOIN을 지정하고 조건은 WHERE이 아닌 ON으로 명시합니다.

NATURAL JOIN과 USING 절에서는 별칭(Alias)을 사용할 수 없습니다.

 

1. CROSS JOIN

SELECT table1.column, table2.column
FROM table1
CROSS JOIN table2;

오라클의 CARTESIAN JOIN과 동일합니다.

 

EMP 테이블의 사원 번호, 이름, 부서 이름을 CROSS JOIN해서 출력해봅시다.

SELECT EMPNO, ENAME, DNAME
FROM EMP
CROSS JOIN DEPT;

부서 이름마다 사원의 정보가 전부 출력되는 CARTESIAN JOIN과 같은 모습을 보여줍니다.

 

2. NATURAL JOIN

SELECT column1, column2, ...
FROM table1
NATURAL JOIN table2;

오라클의 Equi Join과 동일합니다.

단, 양 테이블에 단 1개의 공통 컬럼명만 존재해야합니다.

 

사원의 번호, 이름, 부서 이름, 부서 지역을 출력해봅시다.

SELECT EMPNO, ENAME, DNAME, LOC
FROM EMP
NATURAL JOIN DEPT;

 

3. JOIN-USING

SELECT column
FROM table1
JOIN table2
USING (join_column)

동일 컬럼이 여러 개인 경우 USING 절을 사용해 조인 컬럼을 지정합니다.

 

DEPTNO 컬럼을 기준으로 JOIN하여 사원의 번호, 이름, 부서 이름, 부서 지역을 출력해봅시다.

SELECT EMPNO, ENAME, DNAME, LOC
FROM EMP
JOIN DEPT
USING (DEPTNO);

 

4. JOIN - ON

SELECT column1, column2, ...
FROM table1
JOIN table2
ON 조인 조건
WHERE 데이터 조건

Non-Equi Join 또는 임의의 조건으로 Join 시 사용합니다.

복잡한 조건의 조인이 가능합니다.

ex) 서브쿼리, AND/OR 연산, EXIST, IN)

ON 조건절에 JOIN 조건 외에 데이터 검색 조건을 추가할 수 있지만

가독성을 위해 WHERE 절 사용을 권장합니다.

 

부서 번호가 10인 사원의 번호, 이름, 부서 번호, 부서 지역을 출력해봅시다.

 

5. OUTER JOIN

SELECT column1, column2, ...
FROM table1
{LEFT | RIGHT | FULL} OUTER JOIN table2
ON Join조건

오라클의 OUTER JOIN과 같은 기능을 합니다.

옵션은 아래와 같습니다.

LEFT OUTER JOIN: 좌측 테이블의 모든 행들이 우측 테이블 행들과 일치 여부 상관없이 모두 출력
RIGHT OUTER JOIN: LEFT OUTER JOIN의 좌우측 반대
FULL OUTER JOIN: LEFT JOIN과 RIGHT JOIN의 합집합

 

사원의 번호, 이름, 부서 이름을 출력하는데 사원이 없는 부서는 사원을 NULL로 채워 출력해봅시다.

SELECT EMPNO, ENAME, DNAME
FROM EMP e
RIGHT OUTER JOIN DEPT d
ON e.DEPTNO = d.DEPTNO;

'Database' 카테고리의 다른 글

SQL - INSERT INTO  (0) 2020.07.20
SQL - SUB QUERY  (0) 2020.07.19
SQL - JOIN (ORACLE)  (0) 2020.07.19
SQL - GROUP BY, HAVING  (0) 2020.07.19
SQL - SUM, AVG, MAX, MIN, COUNT  (0) 2020.07.19
Comments