[Database] 조인(INNER JOIN,OUTER JOIN)

ref -우재남, 『이것이 SQL Server다』, 한빛미디어(2020)

📌JOIN문이란

  • join 이란 두 테이블을 묶어주는 역활을 한다.

✅내부 조인

내부조인은 두 개의 테이블을 조인할떄, 두 테이블에 모두 지정한 열의 데이터가 있어야만 함.

일대다 관계의 이해

  1. 두 테이블의 조인을 위해서서는 테이블이 일대다(ONE TO MANY) 관계로 연결대야한다.
  2. 데이터베이스의 테이블은 하나로 구성되는 것보다는 여러 정보를 주제에 따라 분리해서 저장되는것이 효율적임.
  3. 일대다 관계란 한쪽 테이블에는 하나의 값만 존재해야 하지만, 연결된 다른 테이블에는 여러개의 값이 존재할 수 있는 관계를 말한다.

아래 예제를 보고 조인 이해하기

image description

  1. 회원 테이블에서 블랭핑크의 아아디는 ‘BLK’ 1명(one)밖에없다. 그래서 회원 테이블의 아이디를 기본키(PRIMARY KEY)로 지정함.
  2. 구매 테이블의 아디이 에서는 3개의 BLK를 찾을수있다, 즉 회원은 1명이지만 이회원을 구매를 여러번 한다(다,many)할수 있는것
  3. 그래서 구매 테이블의 아이디는 기본 키가 아닌 외래foregin key 설정.
  4. 일대다 곤계는 주로 기본키와 외래키 관계로 맺어있다. 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;
    

image description

image description

  • 구매 테이블에는 물건을 구매한 회원의 아이디와 물건등의 정보만 있다. 이물건을 배송하기 위해서는 구매한 회원의 주소 및 연락처를 알아야함. 그래서 회원테이블과 + 구매 테이블을 결합한 내부조인.
    1. 구매 테이블의 mem_id(buy.mem.id)인 ‘GRL’을 추출한다
    2. ‘GRL’과 동일한 값의 회원 테이블의 mem_id(member.mem_id) 열에서 검색한다.
    3. ‘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 의 내용은 모두 출력되어야 한다는 의미. 즉 내부 조인으로 전체 회원의 구매기록(구매 기록이 없는 회원의 정보도 함꼐)출력을 외부 조인으로 만들어 보자.

image description

  • 구매를 하지않은 고객은 null값이 들어가있는 것을 확인할수있다.

Categories:

Updated:

Leave a comment