스마트팩토리부트갬프 2기 sql join + union

Chaedonghyun·2023년 4월 27일

Join

두 테이블을 묶어서 하나의 테이블을 만듬, 그 이유는 두 테이블을 묶어야 원하는 형태가 나오기도 하기 때문이다.

Join의 종류

1.Inner Join
-Natural Join
2.Outer Join
-Left Outer Join
-Right Outer Join
-Full Outer Join

authors와 books 테이블

Inner Join

둘이 겹치는 조건이 있을때 겹치는 부분의 값만 반환
select from 테이블1 inner join 테이블2 on 조건;
ex)select
from authors inner join books on authors.author_id = book.author_id;

-Natural Join
Inner Join의 하나의 종류이다.
1.두 테이블간 동일한 타입을 가진 동일한 컬럼을 기준으로 자동으로 조인된다.
2.그래서 조인 조건을 따로 명시하지 않아도 된다.
3.동일한 타입을 가진 컬럼이 없거나, 여러 개 있을 경우 원하는 결과를 얻지 못한다.
select from 테이블1 natural join 테이블2
ex)select
from authors natural join books;

Outter Join

결합 조건을 만족하지 않아도 종류에 따라 특정 테이블의 데이터를 모두 선택해 두 테이블을 결합한다.

left join:첫 번째 테이블의 데이터를 모두 선택한 후, 두 번째 테이블의 데이터를 결합 조건에 따라 매칭한다. 매칭되는 데이터가 없는 경우 그 값을 null로 표시한다.
select from 테이블1 left join 테이블2 on 조건
ex)select
from authors left join books on authors.author_id=books.aythor_id;

right join:두 번째 테이블의 데이터를 모두 선택한 후, 첫 번째 테이블의 데이터를 결합 조건에 따라 매칭한다. 매칭되는 데이터가 없는 경우 그 값을 null로 표시한다.
select from 테이블1 right join 테이블2 on 조건
ex)select
from authors right join books on authors.author_id=books.aythor_id;

full outer join:두 테이블의 데이터를 모두 선택하고, 결합 조건에 따라 데이터를 매칭한다. 매칭되는 데이터가 없는 경우 그 값을 null로 표시한다. mysql에서는 full outer join을 구현하기 위한 명령어를 기본적으로 제공하지 않는다. 그래서 left join과 right join의 합집합을 구해 full outer join의 값을 업을 수 있다. 여기서 나오는 것이 union이다.

Unoin

여러 개의 select문의 결과를 하나의 테이블이나 결과 집합으로 표현할 때 사용된다. 이때 각각의 select문으로 선택된 필드의 개수와 타입은 모두 같아야 하며, 필드의 순서 또한 같아야 한다. (unoin은 기본적으로 distinct이어서 중복값을 없에 준다. unoin all은 중복값 까지 출력 해준다)
select 필드 이름 from 테이블명
union
select 필드 이름 from 테이블명
ex)
select authors.author_id, books.title from authors right join books on authors.author_id=books.author_id
union
select authors.author_id, books.title from authors left join books on authors.author_id=books.author_id;

profile
SMF 일기

0개의 댓글