반응형
Notice
Recent Posts
Recent Comments
Link
지구정복
[SQLD] 19. 조인 (JOIN) 본문
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