ANSI

- JOIN의 형식이 FROM 절에서 지정된다.

- JOIN 조건이 WHERE절이 아닌 ON에 입력된다.

- NATURAL JOIN 과 USING절에서는 공통 컬럼명에 ALIAS 사용을 못함.

 

CROSS JOIN

SELECT ENAME, DNAME, E.DEPTNO

FROM EMP CROSS JOIN DEPT D;

 

CROSS JOIN 은 오라클 조인 CARTESIAN과 같다.

 

NATURAL JOIN

NATURAL 조인은 EQUI-JOIN과 동일하게 1개의 공통 컬럼명만 추출한다.

 

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

 

USING 

동일 이름의 컬럼이 여러 개인 경우 조인 컬럼을 지정.

단, 공통 컬럼명에 TABLE ALIAS 명을 사용할 수 없다.

SELECT EMPNO, ENAME, DNAME, LOC FROM EMP INNER JOIN DEPT

USING(DEPTNO); *INNER은 생략가능

 

JOIN ~ ON

NON-EQUI 조인 또는 임의의 조건으로 조인 시 사용.

복잡한 조건의 조인 가능하다.

(서브쿼리, AND/OR 연산자, EXSIT, IN 연산자)

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

검색 조건이 목적인 경우에는 WHERE절을 사용하는 게 낫다.

 

EX)

SELECT EMPNO
FROM EMP
JOIN DEPT
ON EMP.DEPTNO = DEPT.DEPTNO
AND DEPT.DEPTNO = 10;

 

EX)

SELECT EMPNO 
FROM EMP 
JOIN DEPT 
ON EMP.DEPTNO = DEPT.DEPTNO 
WHERE DEPT.DEPTNO = 10; 

'DataBase > DQL' 카테고리의 다른 글

7/1 SQL SUBQUERY 2  (0) 2021.07.01
6/30 SQL 서브쿼리  (0) 2021.06.30
6/29 SQL 조인  (0) 2021.06.30
6/29 SQL 그룹함수 보충  (0) 2021.06.29
6/28 SQL 그룹함수  (0) 2021.06.28
JOIN

여러 테이블을 묶어서 필요한 데이터를 찾을 수 있는 방법을 말함.

 

예를 들어 회사 내에 구매팀에서 일하는 사람이 누군인 지 알아보고 싶다고 하자.

A테이블에 사원들의 이름과 부서번호가 있고 B테이블은 부서번호와 부서의 이름이 있다.

이 경우 A,B테이블에 모두 접근해야 구매팀에서 일하는 사람을 찾을 수 있다.

 

B테이블에서 구매팀의 부서번호를 알아 낸뒤 

그 번호를 이용하여 A테이블에서 찾아야한다.

이 경우 SELECT를 두 번 입력해서 검색해야하는 번거로운 문제가 발생한다.

 

하지만, A와 B테이블을 묶어 C테이블을 만든다면 내가 찾고자 하는 데이터가 모두 포함되어 있어

SELECT를 두 번 입력해야되는 불편함을 피할 수 있다.

 

 JOIN 의 종류
종류   설명
오라클 조인 CARTESIAN PRODUCT 조인 조건을 생략하거나 조인이 잘못된 경우 발생된다.
EQUI 조인 기본 키(Primary Key)와 참조키(Foreign Key)을 사용하여 반드시 조건이 일치하는 데이터만 조회하는 방법이다.
NON-EQUI 조인 조건이 반드시 일치하지 않더라도 범위에 포함되는 경우에 조회하는 방법이다.

** 조인 종류는 이것보다 더 많지만 금일 배운 내용만 기재하였습니다.

 

CARTESIAN PRODUCT

다음과 같은 경우 CARTESIAN PRODUCT 가 발생한다.

- 조인 조건이 생략된 경우

- 조인 조건이 잘못된 경우

- 첫 번째 테이블의 모든 행이 두 번째 테이블의 모든 행이 조인되는 경우

 

만일 CARTESIAN PRODUCT가 실행된다면 양쪽 ROW의 개수를 곱한 결과를 반환한다. 

EX) SELECT EMPNO, ENAME, DEPT.DNAME, LOC
     FROM DEPT, EMP; 

 

EQUI JOIN

EQUI JOIN 방법

- SELECT 절은 검색할 열 이름을 명시

- FROM절은 데이터베이스가 ACCESS해야 하는 두 개의 테이블을 입력

- WHERE절은 테이블의 조인 조건을 명시

- 양쪽 테이블에 공통으로 존재하는 열 이름을 열 이름앞에 테이블명을 기술함.

EX) DEPT.DEPTNO

 

1)

SELECT * 
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;

 

2) 

SELECT S.GRADE, COUNT(*)
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL 
AND S.GRADE = 2
GROUP BY S.GRADE;

'DataBase > DQL' 카테고리의 다른 글

6/30 SQL 서브쿼리  (0) 2021.06.30
6/30 SQL ANSI  (0) 2021.06.30
6/29 SQL 그룹함수 보충  (0) 2021.06.29
6/28 SQL 그룹함수  (0) 2021.06.28
6/28 SQL 조건문  (0) 2021.06.28

+ Recent posts