반응형
표준 조인(Standard join)
다양한 DBMS 벤더에서 자기들만의 문법을 쓰다가 표준을 정의해서 같이 쓰는중이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | 1. INNER JOIN : join 조건에서 동일한 값이 있는 행만 반환한다. // inner join 은 그동안 where 절에서 사용하던 join조건을 from 절에서 사용하겠다는 뜻이다. SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME FROM EMP INNER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO; // INNER 생략 가능 => FROM EMP JOIN DEPT 2. NATURAL JOIN : 두 테이블 간의 '동일한 이름'을 갖는 '모든' 칼럼들에 대해 EQUI JOIN 수행 // ** NATURAL JOIN을 쓰면 USING 조건절, ON 조건절, WHERE 절에서 JOIN 조건을 정의할 수 없다. SELECT DEPTNO, EMPNO, ENAME, DNAME FROM EMP NATURAL JOIN DEPT; // 자동으로 두 테이블의 DEPTNO 라는 부서번호를 공통 칼럼을 인식하여 JOIN을 처리한 것이다. // JOIN에 사용된 칼럼들은 같은 데이터유형이면서 ALIAS나 테이블명과 같은 접두사를 붙일 수 없다. // SELECT EMP.DEPTNO, .... 이런식으로 사용 불가. SELECT * FROM EMP INNER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO; // 이렇게 쓰면 NATURAL JOIN한 것과 출력되는 형식이 조금 다르다. // NATURAL은 자동으로 조인한 컬럼이 제일 앞에나오고 다른 컬럼이 나오고 // INNER는 컬럼이 중복되서 2번나오고, 두 테이블칼럼이 순서대로 나온다. 3. USING 조건절 NATURAL JOIN 에서 모든 일치되는 컬럼들에 대해 JOIN이 이루어지지만 FROM 절의 USING 조건을 이용하면 원하는 칼럼에 대해서만 선택적으로 EQUI조인 가능. SELECT * FROM DEPT JOIN DEPT_TEMP USING (DEPTNO); // INNER JOIN의 USING 조건절로 수행 // USING 조건절을 이용한 EQUI JOIN에서도 NATURAL JOIN과 마찬가지로 ALIAS 사용불가 SELECT * FROM DEPT JOIN DEPT_TEMP USING (LOC, DEPTNO); // 두개의 컬럼으로 INNER JOIN 수행 4. ON 조건절 JOIN 서술부(ON 조건절)와 비 JOIN 서술부(WHERE 조건절)를 분리하여 이해가 쉬우며, 칼럼명이 다르더라도 JOIN조건 사용할 수 있는 장점. SELECT E.EMPNO, E.NAME, E.DEPTNO, D.DNAME FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO); WHERE E.DEPTNO = 30; //USING과 다르게 ON 조건절은 ALIAS나 테이블명 명과 같은 접두사 사용해야함. //WHERE 절과 혼용하기. SELECT TEAM_NAME, TEAM_ID, STADIUM_NAME FROM TEAM JOIN STADIUM ON TEAM.TEAM_ID = STADIUM.HOMETEAM_ID ORDER BY TEAM_ID; SELECT P.PLAYER_NAME 선수명, P.POSITION 포지션, T.REGION_NAME 연고지명, T.TEAM_NAME 팀명, S.STADIUM_NAME 구장명 FROM PLAYER P JOIN TEAM T ON P.TEAM_ID = T.TEAM_ID JOIN STADIUM S ON T.STADIUM_ID = S.STADIUM_ID WHERE P.POSITION = 'GK' ORDER BY 선수명; 5. CROSS JOIN (=카티션프로덕트) : 그냥 모든 경우의 수 조인, M개 컬럼과 N개 컬럼을 기준으로 조인하면 M*N개의 레코드 생성 // 별로 필요한 경우가 많지 않다. 튜닝이나 리포트 작성용으로 고의적으로 사용하는 경우가 있을 순 있다. SELECT ENAME, DNAME FROM EMP CROSS JOIN DEPT 6. OUTER JOIN INNER 조인과 대비하여 OUTER 조인이라 불림. 동일한 값이 없는 행도 반환할 때 사용.** SELECT STADIUM_NAME, STADIUM.STADIUM_ID, SEAT_COUNT, HOMETEAM_ID, TEAM_NAME FROM STADIUM LEFT OUTER JOIN TEAM ON STADIUM.HOMETEAM_ID = TEAM.TEAM_ID ORDER BY HOMETEAM_ID; // 이렇게하면 홈팀이 없는 경기장정보도 나옴 즉, STADIUM테이블에만 있는 경기장 정보도 나옴 // RIGHT OUTER JOIN 은 오른쪽에 있는 테이블이 기준이 되어 결과 출력 // LEFT랑 반대. FULL OUTER JOIN 합집합과 같은 결과를 나타냄 왼쪽,오른쪽 둘다 동일한 값이 없는 행도 나옴 SELECT * FROM DEPT FULL OUTER JOIN DEPT_TEMP ON DEPT.DEPTNO = DEPT_TEMP.DEPTNO; |
Point
1. join은 반드시 사용하고 중요하다.
2. outer join 결과 예측
3. natural join 과 inner join 차이
4. on, using 조건절 사용 조건
반응형
'DB > SQLD' 카테고리의 다른 글
SQL 활용 - 계층형 질의 (0) | 2017.09.08 |
---|---|
SQL 활용 - 집합 연산자 (0) | 2017.09.06 |
SQL 기본 - join (0) | 2017.09.05 |
SQL 기본 - order by 절 (0) | 2017.09.04 |
SQL 기본 - group by, having 절 (0) | 2017.09.03 |