[mysql] join

김민창·2021년 10월 17일
0
post-thumbnail

join

  • join 은 inner joinouter join 두가지로 나뉨
  • inner join 은 테이블에서 조건에 일치하는 결과만 조회
  • outer join 은 테이블에서 조건하는 일치하는 결과와 일치하지 않는다면 null로 채워서 조회

inner join

  • A와 B에 대해 수행한다는 것은, A와 B의 교집합을 말함
  • 다음 그림을 가져온다고 생각하면 편하다

outer join

  • A와 B에 대해 수행하는 것은, A와 B의 합집합을 말함
  • 다음 상황은 left outer join 일 경우

저장된 예시 데이터

  • country
CodeNameContinentPopulationisTraveled
KORSouth KoreaAsia48000000YES
JAPJapanAsia100000000YES
CANCanadaNorth America38000000
BRABrazilSouth America210000000
FRAFranceEurope65000000YES
DEUGermanyEurope83000000
  • friend
CodeNameAge
KORPang28
JAPKazuma34
CANSam31
BRABrit27
FRAMonse28

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 테이블의 Codefriend 테이블의 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문자를 !로 사용하였고, _ 문자를 포함한 모든 namecountry 테이블에서 찾는다는 예제
profile
개발자 팡이

0개의 댓글