LG 유레카 2기_프론트엔드

[ DB ] join 함수

ChatjihoiPT 2025. 2. 28. 17:13

join 함수


1. join 함수란?

  • 두개 이상의 테이블을 연결해서 질의하는 것

2. 종류

  1. 데이타 추출되는 것에 따라

(1) Inner Join

  • 조인을 위해 사용하는 비교 조건에 맞는 데이타만 조회
  • ex. RGBMS master data & detail data
  • empno있는 내부 데이터만 조회됨
  • 조인 조건에 맞지 않은 데이타는 조회 되지 않는다.
  • join할 때 outer join으로 표시 하지 않으면 기본적으로 Inner join으로 조회된다.

(2) Outer Join

  • 조인을 위해 사용하는 비교 조건에 맞지 않는 데이타도 조회된다.
  • 종류 left outer join : 비교 조건에 맞지 않은 왼쪽 테이블의 데이타도 조회됨 right outer join : 비교 조건에 맞지 않은 오른쪽 테이블의 데이타도 조회됨 full outer join : 비교 조건에 맞지 않은 양쪽 테이블의 모든 데이타가 조회됨

2. 비교 조건에 따라서

(1) Equi join

  • 비교하는 두 컬럼의 데이타가 정확하게 일치할 경우
  • join 조건으로 = 비교 연산자를 이용할 경우

(2) Non Equi join

  • 비교하는 두 컬럼의 데이타가 정확하게 일치하지 경우
  • join 조건으로 >, < , >= , <=, != 등


3. 비교 테이블에 따라서

    self join

  • join할 테이블이 다른 테이블이 아닌 self(한개의 테이블로 join)
  • 테이블을 구별하기 위해 반드시 alias를 사용해야 한다.

4. Natural join

  • 두 테이블에서 동일한 컬럼명을 갖는 컬럼을 조인 조건으로 사용한다.
  • inner join과 같은 결과를 갖는다.


5. 카티시안 곱

  • 조인 조건을 생략했을 때 두 테이블의 모든 row를 연결한 결과가 조회된다.
  • N * M의 수만큼 행이 조회된다.
select gno, brand, price, goods.cno as cno
     , category.cno as 분류번호 ,  name
from   goods, category;

3. inner join

  • DB 벤더 전용 select [distinct] *|컬럼명 [as alias]
    from 테이블명 [alias], 테이블명 [alias] ,
    [where 조건]
    [group by 컬럼명, .. [having 조건]]
    [order by 컬럼명 [asc|desc]], ...]

  • ANSI query select [distinct] *|컬럼명 [as alias]
    from 테이블명 [alias]
    join 테이블명 [alias]
    on 조인 조건 | using(조인 컬럼) ,...
    [where 조건] [group by 컬럼명, ..
    [having 조건]] [order by 컬럼명 [asc|desc]], ...]

  • using
    • 조인을 위한 비교 컬럼명이 동일 할 때 사용
    • alias 없이 사용해야 한다. => alias를 사용할 경우 error발생
    • 비교 조건은 기본적으로 = 이 적용된다.
  • on(where랑 똑같은 기능)
    • 조인을 위한 비교 컬럼명이 다르거나 비교 조건이 = 이 아닐때 사용한다.
    • 조인을 위한 비교 컬럼이 같을 경우 alias를 사용해서 구분한다.
-- 상품번호, 상품명, 상품금액, 카테고리번호, 카네고리이름을 조회한다.
-- inner join  벤더 전용
select gno, brand, price, goods.cno, name
from goods, category
where goods.cno = category.cno
order by gno;

-- 테이블에 alias를 적용  
select gno, brand, price, goods.cno, name
from goods g, category c -- alias는 내 마음속에서 알파벳 정의, goods = cno = g
where g.cno = c.cno
order by gno;
  • index는 바이너리 트리 구조를 가짐

4. outer join

  • left join select [distinct] *|컬럼명 [as alias]
    from 테이블명 [alias] left [outer]
    join 테이블명 [alias]
    on 조인 조건 |
    using(조인 컬럼)

  • right join select [distinct] *|컬럼명 [as alias]
    from 테이블명 [alias] right [outer]
    join 테이블명 [alias]
    on 조인 조건 |
    using(조인 컬럼)

  • self join
    • 한개의 테이블로 join
    • 테이블에 alias를 이용해서 구별한다.