Database 개념5- Join
Join의 종류와 활용
조인 (Join)
- Query문에서 특수한 구문을 사용해 2개 이상의 테이블을 하나로 연결해 조회하는 방법
- 각 테이블에서 필요한 칼럼을 추철하여 단일 결과 집합으로 만드는 것
조인의 종류
크로스 조인 (Cross Join)
- 테이블의 모든 행을 조인
- EMP : 14 rows, DEPT : 4 rows 인 경우 총 14 * 4 = 56 rows 출력
- 데이터를 많이 생성할 때 주로 사용
-- cross join & traditional join
SELECT *
FROM emp, dept;
-- ansi
SELECT *
FROM emp CROSS JOIN dept;
내부 조인 (Inner Join)
- 2개 이상의 테이블에서 일치하는 데이터만을 추출하여 조회하는 방법
- 조건이 일치되지 않는 행은 결과에 출력되지 않음
-- inner join
SELECT empno, sal, ename, emp.deptno
FROM emp, dept
WHERE emp.deptno = dept.deptno;
-- 별칭
SELECT empno, sal, ename, a.deptno, dname
FROM emp a, dept b
WHERE a.deptno = b.deptno;
-- ansi
SELECT *
FROM emp INNER JOIN dept ON emp.deptno = dept.deptno;
SELECT *
FROM emp INNER JOIN dept USING (deptno);
-- 사번 이름 급여 급여등급을 구하세요.
SELECT empno, ename, sal, grade
FROM emp, salgrade
WHERE 1 = 1
AND sal BETWEEN losal AND hisal;
-- 위 쿼리와 같은 쿼리.
SELECT empno, ename, sal, grade
FROM emp, salgrade
WHERE 1 = 1
AND sal >= losal
AND sal <= hisal;
외부 조인 (Outer Join)
- 조건이 일치되지 않는 행도 결과에 출력
- full outer join은 MySQL에서는 지원하지 않는다.
-- outer join
UPDATE emp SET deptno = NULL WHERE empno=7839;
SELECT * FROM emp;
SELECT *
FROM emp INNER JOIN dept ON emp.deptno = dept.deptno;
-- 사원의 이름, 사번, 급여, 부서명을 구하세요.
-- left outer join : 기준이 emp 테이블.
SELECT *
FROM emp LEFT OUTER JOIN dept ON emp.deptno = dept.deptno;
-- right outer join : 기준이 dept 테이블.
SELECT *
FROM emp RIGHT OUTER JOIN dept ON emp.deptno = dept.deptno;
-- full outer join : oracle은 지원하지만 MySql은 지원하지 않음.
SELECT *
FROM emp FULL OUTER JOIN dept ON emp.deptno = dept.deptno;
자연 조인 (Natural Join)
- inner join과 같지만 on이나 using 조건을 주지 않아도 된다.
-- natural join
SELECT *
FROM emp NATURAL JOIN dept;
자체 조인 (Self Join)
-- self join
-- 이름, 사번, 관리자 이름, 사원의 급여, 관리자 급여 출력.
SELECT a.ename, a.empno, b.ename, a.sal, b.sal
FROM emp a, emp b -- 사원과 관리자하고 연결하는 것.
WHERE a.mgr = b.empno;
-- ansi
SELECT a.ename, a.empno, b.ename, a.sal, b.sal
FROM emp a JOIN emp b ON a.mgr = b.empno;
-- outer join + self join
SELECT a.ename, a.empno, b.ename, a.sal, b.sal
FROM emp a LEFT OUTER JOIN emp b ON a.mgr = b.empno;
Leave a comment