본문 바로가기

DB/SQLD

SQL 기본 - join

반응형

JOIN

***** 중요 *****

두 개 이상의 테이블 들을 연결하여 데이터를 출력하는 것.

데이터 중복을 최소화하기 위해 정규화를 거치게 되는데 이로 인해 정보가 여러 테이블로 나뉘어 있다.

그런 상황에서 적절하게 테이블을 결합하여 원하는 정보를 출력하는 것이 개발자에게 중요하다.

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
* 일단 알고 시작할 것.
두 개 이상의 테이블에서 JOIN 할 경우 앞에서 두개의 테이블씩 조인한다.
   A JOIN B JOIN C JOIN D 은
(((A JOIN B) JOIN C) JOIN D) 이런 식으로 순차적 조인을 하게 된다.
 
1. EQUI JOIN
// 등가 JOIN, 두 개의 테이블 간에 칼럼 값들이 정확하게 일치하는 경우에 사용
// 주로 PK <-> FK 관계 기반, 그러나 반드시는 아님.** 문제로 나옴 **
SELECT PLAYER.PLAYER_NAME 선수명 TEAM.TEAM_NAME 소속팀명
FROM PLAYER, TEAM
WHERE PLAYER.TEAM_ID = TEAM.TEAM_ID;
또는
SELECT PLAYER.PLAYER_NAME 선수명 TEAM.TEAM_NAME 소속팀명
FROM PLAYER INNER JOIN TEAM
ON PLAYER.TEAM_ID = TEAM.TEAM_ID;
// 특징 : 칼럼 앞에 어느 테이블의 칼럼인지 표기.
// 칼럼이름이 겹치면 DB 옵티마이저가 어디서 가져와야 하는지 모르고 개발자에게도 가독성으로 좋음.
// 반드시 써야하는건 아니지만 반드시 쓰도록 권고.
// 테이블명이 길어지면 더 보기 힘들어져서 ALIAS 사용하는게 보편적
 
SELECT P.PLAYER_NAME 선수명, P.BACK_NO 백넘버, T.REGION_NAME 연고지, T.TEAM_NAME 팀명
FROM PLAYER P, TEAM T
WHERE P.TEAM_ID = T.TEAM_ID
AND P.POSITION = 'GK'
ORDER BY P.BACK_NO;
// 조인조건 후에 원하는 조건문 사용 가능.
 
2. Non EQUI JOIN
// 비등가 JOIN, 두 테이블간 칼럼이 서로 정확하게 일치하지 않을 경우 사용.
SELECT E.ENAME 사원명, E.SAL 급여, S.GRADE 급여등급
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;
// EMP 테이블에 사원의 급여가 있는데 그 사원의 급여가 급여등급표에서 어느 등급인지 알아보기 위한 출력임
// 그래서 두 테이블을 조인해서 해당 급여가 범위에 있는지 찾아서 조인하는 것.
 
SELECT P.PLAYER_NAME 선수명, P.POSITION 포지션, T.REGION_NAME 연고지, T.TEAM_NAME 팀명, S.STADIUM_NAME 구장명
FROM PLAYER P INNER JOIN TEAM T
ON P.TEAM_ID = T.TEAM_ID
    INNER JOIN STADIUM S
ON T.STARDIUM = S.STADIUM_ID
ORDER BY 선수명;
// 세 개 테이블 조인
cs

Point

1. 조인을 하는 이유

2. 순차적인 조인 순서

3. alias 써서 테이블 명 축약

4. 컬럼이 같고, 같지 않고를 따지로 join하는 것은 inner join 으로하고 on절로 쓸 수 있다.

   (where 절에 표현하는 것과 같은 표현)

이정도?

반응형

'DB > SQLD' 카테고리의 다른 글

SQL 활용 - 집합 연산자  (0) 2017.09.06
SQL 활용 - 표준 조인  (0) 2017.09.05
SQL 기본 - order by 절  (0) 2017.09.04
SQL 기본 - group by, having 절  (0) 2017.09.03
SQL 기본 - 함수  (0) 2017.09.02