JOIN

최찬호·2023년 3월 30일
0

JOIN

  • 두 개 이상의 table들에 있는 데이터를 한 번에 조회하는 방식
  • 여러 종류의 JOIN이 존재함

implicit join

  • from 절에 table을 나열하고 where 절에 join condition을 작성
    - join condition, where condition이 같이 있기 때문에 가독성이 떨어진다
  • old-style join syntax
  • 복잡합 join 쿼리 작성시 실수를 할 가능성이 높다
SELECT *
FROM table1, table2
WHERE table1.id = 1003 AND table1.id = table2.id

#table1.id = 1003 where condition
#table1.id = table2.id = join condition

explicit join

  • from 절에 join 키워드와 함께 joined table을 명시하는 방식
  • from 절에서 on 뒤에 join condition 명시
  • 명시적인 작성으로 구분이 가능해 가독성이 좋다
  • 복잡한 join 쿼리 작성시 비교적 실수 가능성이 적어진다
SELECT *
FROM table1 [INNER] JOIN table2 ON table1.id = table2.id
WHERE table1.id = 1003

#join condition 과 where condition이 분리되어 있다.
#ON의 경우 joined table의 attribute명이 동일하다면 USING으로 사용 가능
#FROM table1 [INNER] JOIN table2 USING(id)

inner join

  • 두 table에서 join condition을 만족하는(TRUE) tuple들로 이루어진 result table을 만드는 join
  • =, <, >, != 등등 여러 비교 연산자 사용가능
  • join condition에서 null값(Unknown)을 가지는 tuple은 result table에 포함되지 않는다.
SELECT *
FROM table1 [INNER] JOIN table2 ON [join_condition]

outer join

  • 두 table에서 join condition을 만족하지 않는 tuple들도 result table에 포함하는 join
  • =, <, >, != 등등 여러 비교 연산자 사용가능
SELECT *
FROM table1 LEFT [OUTER] JOIN table2 ON [join_condition]
FROM table1 RIGHT [OUTER] JOIN table2 ON [join_condition]
FROM table1 FULL [OUTER] JOIN table2 ON [join_condition]

#MySQL에서는 FULL OUTER JOIN은 지원하지 않는다.

natural join

  • 두 table에서 같은 이름을 가지는 모든 attribute pair에 대해서 equi join을 수행
  • join condition을 따로 명시하지 않는다
SELECT *
FROM table1 NATURAL [INNER] JOIN table2

#table1의 attributes id, name, team_id 
#table2의 attributes tema_id, name 
FROM table1 [INNER] JOIN table2 ON table1.team_id = table2.team_id AND table1.name = table2.name
#AND
FROM table1 [INNER] JOIN table2 USING(team_id, name)
# NATURAL OUTER JOIN도 가능

cross join

  • 두 table의 tuple pair로 만들 수 있는 모든 조합(Cartesian product)을 result table로 반환한다
  • join condition이 없다
  • implicit cross join = FROM table1, table2
  • explicit cross join = FROM table1 CROSS [INEER] JOIN table2

MySQL에서의 cross join

  • MySQL에서는 cross join == inner join == join
  • CROSS JOIN에서 ON(or USING)과 같은 join condition 작성시 inner join으로 동작한다
profile
체득하고 이해하자

0개의 댓글