데이터베이스
JOIN
2019. 4. 12. 13:29반응형
1. JOIN
-
하나 이상의 테이블로부터 연관된 데이터를 검색해오는 방법입니다.
-
Inner-Join : 가장 많이 쓰이는 JOIN, 줄여서 JOIN으로 부릅니다.
-
두 테이블을 합친다. 합치는 조건은 on절에서 기술합니다.
1
2
3
4
5
6
|
SELECT 컬럼명
FROM 테이블명
INNER JOIN 두번째테이블명
ON 연결할 조건
-- ON 어떤 컬럼을 연결할 것이냐를 설정
|
dept테이블에서 deptno에 대한 정보를 가져와서 emp테이블에 출력하기
1
2
3
4
5
|
SELECT *
FROM emp
INNER JOIN dept
ON emp.deptno = dept.deptno;
|
RDBMS의 내부적인 작업순서
- emp 테이블에서 정보를 가져옵니다.
- ON 절의 조건을 만족하는 dept테이블의 정보를 가져옵니다.
- 두 정보를 연결 JOIN 을 합니다.
JOIN할 때에는 필요한 컬럼만 표시합니다.
별칭을 주어서 해당 컬럼이 어디 소속인지 표시하는 것이 가독성에 좋습니다.
1
2
3
4
5
|
SELECT E.empno, E.ename, E.job, E.mgr, E.hiredate, E.sal, E.comm, D.dname, D.loc
FROM emp AS E
INNER JOIN dept AS D
ON E.deptno = D.deptno;
|
INNER JOIN을 아래 코드 방법처럼 조건절로 표현해도 결과는 동일합니다.
1
2
3
|
SELECT E.empno, E.ename, E.job, E.mgr, E.hiredate, E.sal, E.comm, D.dname, D.loc
FROM emp AS E, dept AS D
WHERE E.deptno = D.deptno;
|
CROSS JOIN
- 두 개 이상의 테이블을 모든 관계를 맺어줍니다. (어거지로 엮어주어버립니다)
- 다른 말로 CARTESIAN JOIN이라고 부릅니다. 하지만 INNER JOIN을 많이 쓰이긴 합니다.
- 각 테이블의 튜플의 갯수의 곱이 CROSS JOIN의 결과물의 튜플의 수와 일치합니다. 왜냐하면 모든 관계를 출력하기 때문입니다.
1
2
3
|
SELECT *
FROM emp
CROSS JOIN dept;
|
INNER JOIN의 특징
JOIN할 테이블의 순서를 바꾸어도 결과는 똑같습니다.
JOIN할 속성이 없는 데이터는 조회가 되지 않습니다.
1
2
3
4
|
SELECT *
FROM dept
INNER JOIN emp
ON emp.DEPTNO = dept.DEPTNO;
|
유용하게 활용 되는 예
주소록, 회원명부
조인으로 연결해서 사번, 사원명, 부서이름, 지역을 조회하기
1
2
3
4
|
SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DNAME
FROM emp AS E
INNER JOIN dept AS D
ON E.DEPTNO = D.DEPTNO;
|
다중 조인하기
학생이름, 주소, 동아리명 다중 조인해봅시다.
1
2
3
4
5
6
7
|
SELECT S.stdName, S.addr, SC.clubname, C.roomNo
FROM stdtbl AS S
INNER JOIN stdclubtbl AS SC
ON S.stdName = SC.stdName
INNER JOIN clubtbl AS C
ON SC.clubname = C.clubname
ORDER BY S.stdname;
|
반응형