Day29~30. 230609,230612
JOIN
두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것.
일반적으로 행들은 PK나 FK 값의 연관에 의해 JOIN이 성립된다.
어떤 경우에도 PK, FK 경우에는 관계가 없어도 논리적인 값들의 연관만으로 JOIN이 성립 가능
*카르테시안곱
*EQUI JOIN
*NATURAL JOIN
*INNER JOIN ON
*JOIN USING
*OUTER JOIN
*NON-EQUI JOIN
*SELF JOIN
CROSS JOIN ( =카르테시안 곱 )
1
2
3
|
select empno,ename, deptno
from emp
order by deptno asc;
|
cs |
위의 두개 합치기, 아래 두 개의 결과 값 같음.
1
2
3
|
select empno,ename,dname
from emp,dept
order by empno asc;
|
cs |
1
2
3
|
select empno,ename,dname
from emp cross join dept
order by empno asc;
|
cs |
EQUI JOIN, NON EQUI JOIN
EQUI JOIN : 2개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하는 경우에 사용.
대부분 , PK, FK의 관계를 기반으로 함.
1
2
3
4
|
select e.empno,e.ename,d.dname
from emp e,dept d
where e.deptno = d.deptno
order by e.empno asc;
|
cs |
NON EQUI JOIN : 2개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하지 않는 경우에 사용.
‘=’ BETWEEN, >, <= 연산자가 아닌 등 연산자 사용.
1
2
3
4
|
select e.empno, e.ename, e.sal , s.GRADE, s.LOSAL, s.HISAL
from emp e, salgrade s
where e.sal between s.LOSAL and s.HISAL
order by s.GRADE asc;
|
cs |
NATURAL JOIN
두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN 수행,
NATURAL JOIN이 명시되면 추가로 USING, ON, WHERE 절에서 JOIN 조건을 정의할 수 없다.
1
2
3
4
|
select e.empno, e.ename, deptno, d.loc, d.dname
from emp e NATURAL JOIN dept d
where e.empno >= 7500
order by d.dname asc;
|
cs |
INNER JOIN
JOIN 조건에서 동일한 값이 있는 행만 반환,
USING이나 ON 절을 필수적으로 사용
INNER JOIN ON
1
2
3
4
5
|
select e.empno, e.ename, d.loc, d.dname
from emp e INNER JOIN dept d
ON e.deptno = d.deptno
where e.empno >= 7500
order by d.dname asc;
|
cs |
JOIN USING
using 조건절
같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서만 선택적으로 EQUL JOIN 할 수 있다.
1
2
3
4
|
select e.empno, e.ename, deptno, d.loc, d.dname
from emp e JOIN dept d USING(deptno)
where e.empno >= 7500
order by d.dname asc;
|
cs |
ON 조건절
ON 조건절과 WHERE 조건절을 분리하여 이해하기 쉬우며,
칼럼명이 다르더라도 JOIN 조건을 사용할 수 있다는 장점이 있다.
OUTER JOIN(LEFT, RIGHT, FULL)
1
2
3
4
5
6
7
8
9
|
select e.empno, e.ename, e.deptno, d.deptno, d.loc, d.dname
from emp e ,dept d
where e.deptno(+) = d.deptno
order by d.dname asc;
select e.empno, e.ename, e.deptno, d.deptno, d.loc, d.dname
from emp e RIGHT OUTER JOIN dept d
ON e.deptno = d.deptno
order by d.dname asc;
|
cs |

1
2
3
4
5
6
7
8
9
|
select e.empno, e.ename, e.deptno, d.deptno, d.loc, d.dname
from emp e ,dept d
where e.deptno = d.deptno(+)
order by d.dname asc;
select e.empno, e.ename, e.deptno, d.deptno, d.loc, d.dname
from emp e LEFT OUTER JOIN dept d
ON e.deptno = d.deptno
order by d.dname asc;
|
cs |
1
2
3
4
|
select e.empno, e.ename, e.deptno, d.deptno, d.loc, d.dname
from emp e FULL OUTER JOIN dept d
ON e.deptno = d.deptno
order by d.dname asc;
|
cs |
SELF JOIN
한 테이블 내 두 칼럼이 연관 관계가 있을 때 동일 테이블 사이의 조인.
FROM절에 동일 테이블이 2번 이상 나타남. 반드시 테이블 별칭을 사용해야 함.
1
2
3
4
5
|
select e1.empno, e1.ename, e1.mgr "관리자번호",
e2.empno, e2.ename
from emp e1, emp e2
where e1.mgr=e2.empno
order by e1.mgr asc;
|
cs |
'개발 수업 > DB' 카테고리의 다른 글
[Oracle/SQL] VIEW (0) | 2023.06.12 |
---|---|
[Oracle/SQL] 서브쿼리 (0) | 2023.06.12 |
[Oracle/SQL] SQL 함수(변환함수,null관련함수,기타함수),Table 생성 (0) | 2023.06.09 |
[Oracle/SQL] SQL함수(날짜함수) (0) | 2023.06.09 |
[Oracle/SQL] SQL함수(숫자 함수, 문자 함수) (0) | 2023.06.09 |