DataBase - STANDARD JOIN
- INNER JOIN
- NATURAL JOIN
- USING 조건절
- ON 조건절
INNER JOIN
- OUTER(외부) JOIN에 대비하여 내부조인이라고 하며, JOIN조건에서 동일한 값이 있는 행만 반환한다.
- INNER JOIN 표시는 WHERE절에서 사용하고 있던 JOIN조건을 FROM절에서 사용하겠다는 의미이므로 USING이나 ON조건절을 필수적으로 사용해야한다.
- inner은 생략가능 (default값이기 떄문)
-
사원 번호와 사원 이름, 소속부서 코드와 소속부서 이름을 찾아본다.
WHERE 절 JOIN 조건
SELECT EMP.deptno , EMPNO, ENAME, DNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO;FROM 절 JOIN조건
SELECT EMP.deptno , EMPNO, ENAME, DNAME FROM EMP INNER JOIN DEPT ON EMP.deptno = DEPT.deptno;INNER 키워드 생략 SELECT EMP.deptno , EMPNO, ENAME, DNAME FROM EMP JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;
NATURAL JOIN
- 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI(=) JOIN을 수행
-
별도의 join칼럼을 지정하지 않아도 공통된 칼럼을 자동으로 인식하여 join을 처리한다.
SELECT DEPTNO, EMPNO, DNAME FROM EMP NATURAL JOIN dept;
USING 조건절
-
NATURAL JOIN에서는 모든 일치되는 칼럼들에 대해 JOIN이 일어나지만, FROM절의 USING조건절을 이용하면 같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서만 선택적으로 JOIN할수 있다.
SELECT DEPNO, DNAME, DEPT.LOC FROM DEFT JOIN DEPT_TEMP USING (DEPTNO, DNAME);
ON 조건절
-
JOIN 서술부 (ON부분)과 JOIN 서술부 (WHERE 조건절)를 분리하여 이해가 쉬우며, 칼럼명이 다르더라고 JOIN 조건을 사용할 수 있응 장점이 있다.
SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DNAME FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO); -
ON 조건절과 WHERE 검색 조건은 충돌 없이 사용할 수 있다.
WHERE절의 JOIN조건과 같은 일을 하면서도, 명시적으로 JOIN조건을 구분할수 있다.부서코드 30인 부서의 소속 사원 이름 및 부서코드, 부서이름을 찾아본다. SQL문
SELECT E.ENAME, E.DEPTNO, D.DEPTNO, D.DNAME FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO) WHERE E.DEPTNO = 30;
과제 풀이 : 6주차 join과제
6-3 : NATURAL JOIN을 하는 한글 질의문과 SQL문을 작성하라. [1점]
한글 질의문 : 선수 이름, 선수아이디, 팀이름, 팀아이디를 찾아본다.
SQL문
SELECT PLAYER_NAME, PLAYER_ID, TEAM_NAME, TEAM_ID
FROM PLAYER NATURAL JOIN TEAM;
6-4 : SCHEDULE과 STADIUM 테이블을 ON 조건절을 이용하여 조인하여 경기일과 구장명, 홈팀 점수 및 원정팀 점수를 출력하는 한글 질의문과 SQL문을 작성하라.
(단, WHERE 절로 조건을 지정하여 특정 조건에 맞는 행만을 출력하라.) [2점]
SQL문
SELECT SCHE_DATE 경기일, STADIUM_NAME 구장명, HOME_SCORE 홈팀점수 , AWAY_SCORE 원정팀점수
FROM SCHEDULE SC JOIN STADIUM ST
ON (SC.STADIUM_ID = ST.STADIUM_ID)
WHERE SC.STADIUM_ID IN ('B01', 'B02');
6-5 : CROSS JOIN(p. 243)을 참고하고, STADIUM을 좌측, TEAM을 우측 테이블로 하는 CROSS JOIN을 수행하는 SQL문을 작성하고, 인출된 행의 개수를 작성하라. [1점]
SQL문
SELECT STADIUM_NAME, STADIUM.STADIUM_ID, SEAT_COUNT, HOMETEAM_ID, TEAM_NAME
FROM STADIUM CROSS JOIN TEAM;
6-6 : RIGHT OUTER JOIN(p. 248)을 참고하고, STADIUM을 좌측, TEAM을 우측 테이블로 하는 RIGHT OUTER JOIN을 수행하는 SQL문을 작성하고, 인출된 행의 개수를 작성하라. [1점]
SQL문
SELECT STADIUM_NAME, S.STADIUM_ID, SEAT_COUNT, HOMETEAM_ID, TEAM_NAME
FROM STADIUM S RIGHT OUTER JOIN TEAM T
ON S.STADIUM_ID =T.STADIUM_ID
ORDER BY HOMETEAM_ID;