IT수업/데이터베이스

it 수업 6주차 (21) JOIN

워제하 2024. 2. 2. 13:16

 

----------------------
JOIN
----------------------
-- 두개 이상의 테이블을 서로 묶어서 하나의 조회 결과를 만드는데 사용


----------------------
JOIN 종류
----------------------
-- INNER JOIN : ON 이하의 조건절을 만족하는 행만 JOIN 

-- OUTER JOIN : ON 이하의 조건절을 만족하지 않는 행도 JOIN
   -- LEFT OUTER JOIN : 조건을 만족하지 않는 왼쪽 테이블의 행도 JOIN
   -- RIGHT OUTER JOIN : 조건을 만족하지 않는 오른쪽 테이블의 행도 JOIN
   -- FULL OUTER JOIN : 조건을 만족하지 않는 왼/오른쪽 테이블의 행도 JOIN
   
-- CROSS JOIN : 한쪽 테이블의 모든 행과 반대쪽 테이블의 모든 행을 조인, 조건절이 없음
-- SELF JOIN : 한 테이블 내에서 JOIN

 

 

< INNER JOIN > 

- 기본

 

 

select * from usertbl 으로 왼쪽 테이블을 지정해주고

inner join buytbl 로 오른쪽 테이블을 지정해준다. 그리고

on usertbl.userid = buytbl.userid; 을 사용해 각각의 기본키와 연결되어 있는 외래키를 입력해준다.

 

 

 

 

 

- 원하는 열만 출력

  열이름 중복시 특정 테이블의 열 이름으로 선택해서 지정한다. 

  이유는 userid를 그냥 넣으면 userid라는 열이 두개가 존재해 모호하다는 에러가 뜨기 때문에

  어느 테이블의 열이라는 것을 지정해주는 것이 좋다. ex) usertbl.userid

 

 

 

 

- 별칭 지정

 

테이블 옆에 별칭으로 지정할 문자를 적어주면 간단하게 조인할 수 있다.

 

 

 

- where 조건절 사용

 

where 조건절을 사용해 원하는 값을 추출해 낼 수 있다.

 

 

 

 

< 연습 문제 >

 

 

1.

select U.userid, birthyear, prodname, groupname
from usertbl U 
inner join buytbl B 
on U.userid = B.userid
where name ='바비킴';

 

 

2.

select name, addr, prodname, concat(mobile1,'-', mobile2) as PHONE
from usertbl U 
inner join buytbl B 
on U.userid = B.userid
where amount*price >= 100;

 

 

3.

select U.userid, name, birthyear, prodname
from usertbl U 
inner join buytbl B 
on U.userid = B.userid
where groupname = '전자';

 

 

 

< OUTER JOIN >

- LEFT OUTER JOIN ( on 조건을 만족하지 않는 left 테이블의 행도 출력)

 

 

left outer join으로 구매하지 않은 고객의 정보도 출력이 되게 할 수 있다.

(왼쪽 테이블이 usertbl임)

 

 

 

- RIGHT OUTER JOIN(on 조건을 만족하지 않는 right 테이블의 행도 출력)

 

이번에는 왼쪽, 오른쪽 테이블을 바꿔 right outer join을 해줬다.

 

 

- FULL OUTER JOIN(on 조건을 만족하지 않는 left, right 테이블의 행도 출력)

   mysql에서는 full outer join 을 지원하지 않고 대신 union 을 사용해서 left, right outer join을 연결한다.

 

select * from usertbl left outer join buytbl on usertbl.userid=buytbl.userid
union
select * from usertbl right outer join buytbl on usertbl.userid=buytbl.userid;

 

 

 

 

 

< 여러 테이블들 JOIN >

- INNER JOIN

 

inner join을 두번 사용함.

 

 

 

 

- RIGHT OUTER JOIN