지구정복

[SQLD] 19. 조인 (JOIN) 본문

자격증 정복/SQLD

[SQLD] 19. 조인 (JOIN)

eeaarrtthh 2020. 11. 10. 09:22
728x90
반응형

1. 조인(JOIN)

가. 개요

  관계형 데이터베이스의 핵심!!

-> 하나이상의 테이블에서 데이터를 추출할 때 사용되는 기능으로 앞서 나온 PK/FK를 이용하여 여러 테이블간의 데이터를 조회 할 수 있도록 함

나. EQUI JOIN

-> 두 테이블간의 컬럼 값이 정확히 일치하는 경우에 사용
PK < -> PK or PK < -> FK 관계를 이용하여 기술되며 '=' 기호를 사용한다.

  • 조인의 예
SELECT A.PLAYER_NAME, B.TEAM_NAME
FROM PLAYER A, TEAM B
WHERE A.TEAM_ID = B.TEAM_ID

or

SELECT A.PLAYER_NAME, B.TEAM NAME
FROM PLAYER A INNER JOIN TEAM B
ON A.TEAM_ID = B.TEAM_ID

 

 

  • 조인 검색의 예
SELECT P.PLAYER_NAME 선수명, P.BACK_NO 백넘버, T.REGION_NAME 연고지,T.TEAMßAME 팀명
FROM PLAYER P, TEAM T
WHERE P.TEAM_ID = T.TEAM_ID AND P.POSITION = 'GK'
ORDER BY P.BACK NO

or

SELECT P.PLAYER_NAME 선수명, P.BACK_NO 백넘버, T.REGION_NAME 연고지, T.TEAM_NAME 팀 명
FROM PLAYER P INNER JOIN TEAM T ON P.TEAM_ID = T.TEAM_ID
WHERE PPOSITION = 'GK'
ORDER BY P.BACK NO

조인 조건 기술시 테이블에 대한 ALIAS를 적용해서 SQL 문장을 작성한 경우, WHERE 절과 SELECT 절 에는 테이블명이 아닌 테이블에 대한 ALIAS를 사용해야 한다는 점이다. 
And 권장 사항은 아니지만 하나의 SQL 문장 내에서 유일하게 사용하는 칼럼명이라면 칼럼명 앞에 ALIAS를 붙이지 않아도 된다.

Non EQUI JOIN

-> 두 테이블간의 컬럼 값이 정확히 일치하는 않는 경우에 사용
BETWEEN a AND b or > , < 연산자 사용

SELECT E.ENAME, E.JOB, E.SAL, S.GRADE
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;

 

 

3개 이상 TABLE JOIN

SELECT P.PLAYER_NAME 선수명, P.POSITION 포지션,T.REGION_NAME 연고지, T.TEAM_NAME 팀명, S.STADIUM_NAME 구장명
FROM PLAYER P.TEAM, T.STADIUM S
WHERE P.TEAM_ID = T.TEAM_ID AND T.STADIUM_ID = S.STADIUM_ID
ORDER BY 선수명 

or

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.STADIUM_ID = S.STADIUM_ID
ORDER BY 선수명 

JOIN 이 필요한 기본적인 이유는 앞서 배운 정규화에서 부터 출발한다
정규화란 불필요한 데이터의 정합성을 확보하고 이상현상(Anomaly) 발생을피하기 위해,테이블을 분할하여 생성하는 것

 

 

 

정리

----1. EQUI JOIN
--두 테이블 간의 컬럼 값이 정확히 일치하는 경우에 사용
--PK = PK | PK = FK 관계를 이용하여 사용
SELECT A.PLAYER_NAME, B.TEAM_NAME
FROM PLAYER A, TEAM B
WHERE A.TEAM_ID = B.TEAM_ID;

--또는
SELECT A.PLAYER_NAME, B.TEAM_NAME
FROM PLAYER A INNER JOIN TEAM B
ON A.TEAM_ID = B.TEAM_ID;

--또 다른 예
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 BACK_NO;

--또는
SELECT P.PLAYER_NAME, P.BACK_NO, T.REGION_NAME, T.TEAM_NAME
FROM PLAYER P INNER JOIN TEAM T ON P.TEAM_ID = T.TEAM_ID
WHERE POSITION = 'GK'
ORDER BY BACK_NO;

----2. NON EQUI JOIN
--두 테이블간의 컬럼 값이 정확히 일치하지 않는 경우 사용
SELECT E.ENAME, E.JOB, E.SAL, S.GRADE
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;

----3. 3개 이상 TABLE JOIN
SELECT P.PLAYER_NAME, P.POSITION, T.REGION_NAME, T.TEAM_NAME, S.STADIUM_NAME
FROM PLAYER P, TEAM T, STADIUM S
WHERE P.TEAM_ID = T.TEAM_ID AND T.STADIUM_ID = S.STADIUM_ID
ORDER BY P.PLAYER_NAME;

--또는
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.STADIUM_ID = S.STADIUM_ID
ORDER BY P.PLAYER_NAME;

 

[출처]wiki.gurubee.net/pages/viewpage.action?pageId=27427499

 

728x90
반응형

'자격증 정복 > SQLD' 카테고리의 다른 글

[SQLD] 21. 집합연산자 (SET OPERATOR)  (0) 2020.11.10
[SQLD] 20. 표준조인 (STANDARD JOIN)  (0) 2020.11.10
[SQLD] 18. GROUP BY, HAVING 절  (0) 2020.11.10
[SQLD] 17. 함수 (Function)  (0) 2020.11.10
[SQLD] 16. WHERE절  (0) 2020.11.09
Comments