아래의 사용될 테이블은 아래와 같다.
TEAMS
PLAYERS
- 조인
- 두 개 이상의 테이블들을 연결해 데이터를 출력하는 것
선수들의 팀명과, 연고지를 선수정보와 함께 출력
위의 요구사항을 SQL로 작성하면 아래와 같다.
입력 ✏️
SELECT A.ID
,A.JERSEY
,A.FNAME
,A.LNAME
,A.HEIGHT
,A.WEIGHT
,A.DOB
,A.POSITION
,B.NAME
,B.CITY
FROM PLAYERS A
INNER JOIN TEAMS B
ON A.TEAM_ID = B.ID;
출력 🖥️
포지션이 Outfielder인 선수들의 팀명과 연고지를 선수정보와 함께 출력
위의 요구사항을 SQL로 작성하면 아래와 같다.
입력 ✏️
SELECT A.ID
,A.JERSEY
,A.FNAME
,A.LNAME
,A.HEIGHT
,A.WEIGHT
,A.DOB
,A.POSITION
,B.NAME
,B.CITY
FROM PLAYERS A
INNER JOIN TEAMS B
ON A.TEAM_ID = B.ID
WHERE A.PISITION ='Outfielder';
출력 🖥️
Non EQUI JOIN은 두개의 테이블 간에 논리적인 연관관계를 갖고 있으나, 컬럼 값들이 서로 일치하지 않는 경우에 사용된다.
"=" 연산자가 아닌 다른 연산자(Between, >, >=, <, <=)들을 사용해 join을 수행한다.
다음은 Non EQUI JOIN의 대략적인 형태이다.
SELECT 테이블1.컬럼명, 테이블2.컬럼명, ...
FROM 테이블1, 테이블2
WHERE 테이블1.컬럼명 BETWEEN 테이블2.컬럼명1 AND 테이블2.컬럼명2;
OUTER JOIN은 조인 조건을 만족하지 않는 행들도 함께 반환할 때 사용한다.
Oracle은 조인 컬럼 뒤에 '(+)' 기호를 표시해 OUTER JOIN을 나타낸다.
주의할 점은 '(+)'기호의 위치다. '(+)'표시의 반대편에 있는 테이블이 기준 테이블이 된다.
예시
SELECT 테이블1.컬럼명, 테이블2.컬럼명,...
FROM 테이블1, 테이블2
WHERE 테이블2.컬럼명(+) = 테이블1.컬럼명;
DEPT에 등록된 부서중에는 사원이 없는 부서도 있다. DEPT와 EMP를 조인하되 사원이 없는 부서정보도 함께 출력
입력 ✏️
SELECT A.ENAME
,A.DEPTNO
,B.DNAME
,B.LOC
FROM EMP A, DEPT B
WHERE B.DEPTNO = A.DEPTNO(+);
출력 🖥️
관계형 데이터베이스의 큰 장점이면서 SQL튜닝의 중요대상이 되는 조인을 잘못 기술하면, 시스템자원부족이나 과다한 응답시간 지연을 발생시키는 중요 원인이 되므로 조인조건은 신중하게 작성해야 한다.
참고자료 : SQL전문가가이드