[SQL] JOIN

2024. 8. 15. 15:54·[SQL]

암시적 JOIN- 모든 조건을 WHERE 절에 기술

명시적 JOIN- JOIN 기준 조건은 ON절에 기술 / 일반 조건은 WHERE절에 기술

EQUI JOIN

조인 조건으로 Equal(=) 연산 사용

-중복 칼럼의 경우, 칼럼명 앞에 테이블명을 붙여야함

-테이블명이 긴 경우 ALIAS 사용

SELECT EMP.ENAME, EMP.DEPTNO, DEPT.DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;

 

NON-EQUI JOIN

조인 조건으로 Equal(=) 이외의 연산 사용

BETWEEN, >, >=, <, <= 등

SELECT E.ENAME 사원명, E.SAL 급여, S.GRADE 급여등급
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;

 

INNER JOIN

서로 대응되는 내용만 검색하는 조인

조인의 Defalut 이므로 "INNER" 생략 가능

--암시적, NON-EQUI, INNER JOIN
SELECT E.ENAME, E.DEPTNO, E.SAL, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO AND E.SAL > 2000;
--명시적, NON-EQUI, INNER JOIN
SELECT E.ENAME, E.DEPTNO, E.SAL, D.DNAME
FROM EMP E INNER JOIN DEPT D
ON E.DEPTNO = D.DEPTNO
WHERE E.SAL > 2000;

 

NATURAL JOIN

INNER JOIN의 특수한 경우

두 테이블 간 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN 수행

칼럼 간 데이터 타입 또한 동일해야함

별도의 조인 칼럼 및 조건을 지정할 수 없음

조인의 대상이 되는 칼럼에는 접두사(테이블명 또는 ALIAS)를 사용할 수 없음

SELECT EMPNO, ENAME, DEPTNO, DNAME
FROM EMP NATURAL JOIN DEPT;

 

*NATURAL JOIN과 INNER JOIN의 차이는 NATURAL JOIN은 중복되는 칼럼을 제거하고 하나로 출력한다!

 

+WHERE, ON, USING절 조건 기술 비교

--암시적 조인
SELECT ENAME, EMP.DEPTNO, DNAME
FROM EMP DEPT
ON (E.DEPTNO=D.DEPTNO);

--명시적 조인
SELECT ENAME, EMP.DEPNO, DNAME
FROM EMP JOIN DEPT
ON EMP.DEPTNO=DEPT.NO;

--USING
SELECT ENAME, DEPTNO, DNAME
FROM EMP JOIN DEPT
USING (DEPTNO);

--두 테이블 간 동일한 칼럼명이 DEPTNO밖에 없는 경우
SELECT ENAME, DEPTNO, DNAME
FROM EMP NATURAL JOIN DEPT

 

OUTER JOIN

-서로 대응되지 않는 행도 출력하는 조인

-조건절을 필수로 사용

-성능 저하의 원인이 될 수 있으므로 필요한 경우에만 사용

 

LEFT OUTER JOIN / RIGHT OUTER JOIN

왼쪽/ 오른쪽의 테이블의 데이터를 모두 읽은 후, 왼쪽/오른쪽 테이블에서 JOIN 데이터를 가져옴
JOIN 조건에 해당되지 않는 경우, 해당 칼럼은 NULL로 채움

 

FULL OUTER JOIN

양쪽 테이블의 데이터를 모두 읽은 후, 상대 테이블에서 JOIN 데이터를 가져옴

JOIN 조건에 해당되지 않는 경우, 해당 칼럼은 NULL로 채움

LEFT OUTER JOIN 과 RIGHT OUTER JOIN 의 합집합에 해당

(즉, UNION ALL이 아닌 UNION과 동일)

 

CROSS JOIN

-두 테이블의 곱집합을 출력하는 조인

-별도의 조인 조건이 없음

 

SELF JOIN

-동일 테이블 사이의 조인

FROM 절에 동일 테이블이 두 번 이상 나타남

-테이블 식별을 위해 반드시 ALIAS를 사용해야함

동일한 테이블을 개념적으로 서로 다른 두 개의 테이블로 사용함

'[SQL]' 카테고리의 다른 글

[SQL] TCL (Transaction Control Language)  (0) 2024.08.15
[SQL] 계층형 질의 / 집합 연산자  (0) 2024.08.15
[SQL] TO_DATE 함수  (0) 2024.08.13
[SQL] 제어 함수 & NULL 함수  (0) 2024.08.12
[SQL] 문자형 함수와 REGEXP 함수 / 정규표현식  (0) 2024.08.12
'[SQL]' 카테고리의 다른 글
  • [SQL] TCL (Transaction Control Language)
  • [SQL] 계층형 질의 / 집합 연산자
  • [SQL] TO_DATE 함수
  • [SQL] 제어 함수 & NULL 함수
chungheon
chungheon
24365
  • chungheon
    MyLogging
    chungheon
  • 전체
    오늘
    어제
    • 분류 전체보기 (131)
      • [JAVA] (15)
      • [Spring] (13)
      • [SQL] (13)
      • [자료구조] (33)
        • [스택&큐] (8)
        • [해시] (5)
        • [힙] (0)
        • [정렬] (2)
        • [DP] (4)
        • [DFS,BFS] (9)
        • [그리디] (4)
      • [DevOps] (31)
        • [Docker] (6)
        • [AWS] (11)
        • [Redis] (8)
        • [Kafka] (4)
        • [Git] (2)
      • [ComputerScience] (5)
      • [정보처리기사] (5)
      • [기타] (13)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    제어함수
    ASC
    From
    안드로이드
    where
    자식클래스
    Between
    자바
    접두어
    해시맵
    전역변수
    부모클래스
    안드로이드 스튜디오
    기본형
    논리연산자
    액티비티
    SOLID원칙
    manifest
    뷰
    백트래킹
    desc
    Combination
    클래스
    null
    HashMap
    activity
    매니페스트
    SQL연산자
    Android
    참조형
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
chungheon
[SQL] JOIN
상단으로

티스토리툴바