[Database] 조인(INNER JOIN,OUTER JOIN)
ref -우재남, 『이것이 SQL Server다』, 한빛미디어(2020)
📌JOIN문이란
- join 이란 두 테이블을 묶어주는 역활을 한다.
✅내부 조인
내부조인은 두 개의 테이블을 조인할떄, 두 테이블에 모두 지정한 열의 데이터가 있어야만 함.
일대다 관계의 이해
- 두 테이블의 조인을 위해서서는 테이블이 일대다(ONE TO MANY) 관계로 연결대야한다.
- 데이터베이스의 테이블은 하나로 구성되는 것보다는 여러 정보를 주제에 따라 분리해서 저장되는것이 효율적임.
- 일대다 관계란 한쪽 테이블에는 하나의 값만 존재해야 하지만, 연결된 다른 테이블에는 여러개의 값이 존재할 수 있는 관계를 말한다.
아래 예제를 보고 조인 이해하기
- 회원 테이블에서 블랭핑크의 아아디는 ‘BLK’ 1명(one)밖에없다. 그래서 회원 테이블의 아이디를 기본키(PRIMARY KEY)로 지정함.
- 구매 테이블의 아디이 에서는 3개의 BLK를 찾을수있다, 즉 회원은 1명이지만 이회원을 구매를 여러번 한다(다,many)할수 있는것
- 그래서 구매 테이블의 아이디는 기본 키가 아닌 외래foregin key 설정.
- 일대다 곤계는 주로 기본키와 외래키 관계로 맺어있다. ex ) 회사 테이블 , 급여 테이블 => 한명의 사원이 여러번의 급여를 받으므로 일대 다 관계. ex ) 학생 테이블 , 학점 테이블 => 한명의 학생이 여러 과목의 학점을 받아야 하므로 일대 다 관계.
SELECT<열목록>
FROM<첫 번쨰 테이블>
INNER JOIN <두 번쨰 테이블>
ON<조인될 조건>
[WHERE 검색 조건]
* 예제코드
-- 조인(내부조인)
select *
from buy
inner join member
on buy.mem_id = member.mem_id
where buy.mem_id = 'GRL';
select *
from buy
inner join member
on buy.mem_id = member.mem_id;
select buy.mem_id, member.mem_name, buy.prod_name , addr, concat(phone1,phone2) as '연락처'
from buy
inner join member
on buy.mem_id = member.mem_id;
-- 위에 코드를 더 간단하게 리팩토링 해보자 (별명주기)
select B.mem_id, M.mem_name, B.prod_name, M.addr, concat(M.phone1, M.phone2) AS '연락처'
from buy B
inner join member M
on B.mem_id = M.mem_id;
- 구매 테이블에는 물건을 구매한 회원의 아이디와 물건등의 정보만 있다. 이물건을 배송하기 위해서는 구매한 회원의 주소 및 연락처를 알아야함.
그래서 회원테이블과 + 구매 테이블을 결합한 내부조인.
- 구매 테이블의 mem_id(buy.mem.id)인 ‘GRL’을 추출한다
- ‘GRL’과 동일한 값의 회원 테이블의 mem_id(member.mem_id) 열에서 검색한다.
- ‘GRL’이라는 아이디를 찾으면 구매 테이블과 회원 테이블의 두행을 결합(join) 한다.
✅외부 조인
- 외부 조인은 두 테이블을 조인할떄, 1개의 테이블에만 데이터가 있어도 결과가 나옵니다.
--외부 조인
SELECT<열목록>
FROM<첫 번쨰 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두 번쨰 테이블(RIGHT 테이블)>
ON<조인될 조건>
[WHERE 검색 조건]
* 예제 코드
-- 외부조인
select m.mem_id , m.mem_name, b.prod_name , m.addr
from member m --왼쪽에 있는 회원 테이블 기준으로 외부조인 한다.
left outer join buy b
on m.mem_id = b.mem_id
order by m.mem_id;
- LEFT OUTER JOIN 문의 의미를 왼쪽 테이블 MEMBER 의 내용은 모두 출력되어야 한다는 의미. 즉 내부 조인으로 전체 회원의 구매기록(구매 기록이 없는 회원의 정보도 함꼐)출력을 외부 조인으로 만들어 보자.
- 구매를 하지않은 고객은 null값이 들어가있는 것을 확인할수있다.
Leave a comment