SQL- 조인(Join)

박현·2022년 10월 13일
0

SQL

목록 보기
18/34

아래의 사용될 테이블은 아래와 같다.

  • TEAMS

  • PLAYERS

  • 조인
    • 두 개 이상의 테이블들을 연결해 데이터를 출력하는 것

EQUI JOIN

  • 두 개의 테이블 간에 컬럼 값들이 서로 정확하게 일치하는 경우에 사용되는 방법으로
    대부분 PK <-> FK의 관계를 기반으로 한다.
  • 이 기능은 계층형이나 망형 데이터베이스와 비교해서 관계형 데이터베이스의 큰 장점이다.
  • JOIN의 조건은 WHERE절에 기술하게 되는데 "=" 연산자를 사용해서 표현한다.

선수들의 팀명과, 연고지를 선수정보와 함께 출력

위의 요구사항을 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

Non EQUI JOIN은 두개의 테이블 간에 논리적인 연관관계를 갖고 있으나, 컬럼 값들이 서로 일치하지 않는 경우에 사용된다.
"=" 연산자가 아닌 다른 연산자(Between, >, >=, <, <=)들을 사용해 join을 수행한다.

다음은 Non EQUI JOIN의 대략적인 형태이다.

SELECT 테이블1.컬럼명, 테이블2.컬럼명, ...
 FROM 테이블1, 테이블2
WHERE 테이블1.컬럼명 BETWEEN 테이블2.컬럼명1 AND 테이블2.컬럼명2;

OUTER JOIN

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전문가가이드

0개의 댓글