join
- join 은
inner join
과 outer join
두가지로 나뉨
inner join
은 테이블에서 조건에 일치하는 결과만 조회
outer join
은 테이블에서 조건하는 일치하는 결과와 일치하지 않는다면 null
로 채워서 조회
inner join
- A와 B에 대해 수행한다는 것은, A와 B의 교집합을 말함
- 다음 그림을 가져온다고 생각하면 편하다
outer join
- A와 B에 대해 수행하는 것은, A와 B의 합집합을 말함
- 다음 상황은
left outer join
일 경우
저장된 예시 데이터
Code | Name | Continent | Population | isTraveled |
---|
KOR | South Korea | Asia | 48000000 | YES |
JAP | Japan | Asia | 100000000 | YES |
CAN | Canada | North America | 38000000 | |
BRA | Brazil | South America | 210000000 | |
FRA | France | Europe | 65000000 | YES |
DEU | Germany | Europe | 83000000 | |
Code | Name | Age |
---|
KOR | Pang | 28 |
JAP | Kazuma | 34 |
CAN | Sam | 31 |
BRA | Brit | 27 |
FRA | Monse | 28 |
INNER JOIN
from
-> on
-> join
-> where
순서로 진행
inner join + on
select c.Code, c.Name, c.Population
from country c
inner join friend f
on c.Code = f.Code;
country
테이블의 Code
와 friend
테이블의 Code
가 같은 목록을 조회
- 컬럼명이 다르더라도
join
조건을 사용할 수 있음
on
조건절은 where
조건절 처럼 조건을 직접 걸 수 있음
inner join + using
select c.Code, c.Name, c.Population
from country c
inner join friend f using(Code);
- 컬럼명이 같을때 쉽게 사용할 수 있음
using
조건절을 이용하여 원하는 컬럼에 대해서만 선택적으로 join
을 할 수 있음
natural join
select empno, sal
from emp
natural join emp2
- 반드시 두 테이블 간 동일한 이름, 타입을 가진 컬럼이 필요
join
에 이용되는 컬럼은 명시하지 않아도 자동으로 join
에 사용
- 동일한 이름을 갖는 컬럼이 있지만 데이터 타입이 다르면 에러가 발생
Outer join
left outer join
select f.Code, f.Name, f.Age
from country c left outer join friend f
on c.Code = f.Code;
join
문의 왼쪽에 있는 테이블의 모든 결과
를 가져온 후, 오른쪽 테이블의 데이터를 매칭
- 매칭되는 데이터가 없는 경우
null
로 표시
right outer join
select f.Code, f.Name, f.Age
from country c right outer join friend f
on c.Code = f.Code;
join
문의 오른쪽에 있는 테이블의 모든 결과
를 가져온 후, 왼쪽 테이블의 데이터를 매칭
- 매칭되는 데이터가 없는 경우
null
로 표시
escape 연산
- 와일드 문자인
%
와 _
는 각각 0개 이상의 문자열
과 임의의 한개의 문자열
이라는 의미를 가짐
%
와 _
가 존재하는지 검색하고 싶을때 escape
를 사용
select *
from country
where name like '%!_%' escape '!';
- 위와 같은 SQL은
escape
문자를 !
로 사용하였고, _
문자를 포함한 모든 name
을 country
테이블에서 찾는다는 예제