본문 바로가기
개발자 :-)/SQL

[MySQL] Join

by 뚜생첨 2022. 9. 26.

1. Join

두 개의 테이블을 서로 묶어서 하나의 결과를 만들어내는 것

 

2. 1 대 다 관계

ex) 회원 테이블과 구매 테이블은 회원 1명이 여러 번 구매할 수 있으므로 1대 다 관계이다.

회원 테이블의 PK(기본키)는 구매 테이블의 FK(외래 키)로 설정할 수 있다.

구매 테이블에는 FK로 지정한 사용자 아이디가 여러 번 중복하여 존재할 수 있지만

아이디를 따라가 회원 테이블에서 유일한 정보를 찾을 수 있음!

 

3. 내부 조인의 기본 (INNER JOIN)

SELECT <열 목록>
FROM   <첫 번째 테이블>
	INNER JOIN <두 번째 테이블>
    	ON <조인될 조건>
WHERE 검색 조건

* INNER JOIN을 JOIN으로 써도 INNER JOIN으로 인식한다.

-- 예시
SELECT * 
FROM 	BUY
	INNER JOIN MEMBER
    	ON BUY.MEM_ID = MEMBER.MEM_ID
WHERE	BUY_MEM_ID = 'GRL';

 

4. 외부 조인 (OUTER JOIN)

내부 조인은 두 테이블에 모두 데이터가 존재해야 결과가 나온다면, 외부 조인은 한쪽에만 데이터가 있어도 결과가 나온다.

SELECT 	<열 목록>
FROM 	<첫 번째(LEFT) 테이블>
	<LEFT : RIGHT : FULL> OUTER JOIN <두 번째(RIGHT) 테이블>
    	ON <조인될 조건>
WHERE	검색 조건;

* LEFT OUTER JOIN : 왼쪽 테이블을 기준으로 조인하겠당

* RIGHT OUTER JOIN : 왼쪽 테이블을 기준으로 조인하겠당

 

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;

* member 테이블 기준으로 데이터가 조회되고, buy테이블에 정보가 없다면 빈 값으로 조회됨.

 

5. Cross Join

내용의 의미는 없지만 대용량 테스트 데이터 생성을 위해 사용하는 경우 있음.

SELECT	*
FROM 	buy
CROSS JOIN	member;

* 만약 buy에 500건, member에 3000건이 있었다면 총 150,000 건의 데이터를 생성할 수 있다.

 

6. Self Join

SELECT	<열 목록>
FROM	<테이블> 별칭A
	INNER JOIN <테이블> 별칭B
    	ON <조인 조건>
WHERE	<검색 조건>

 

if) 경리부장의 직속상관의 연락처를 알고 싶다면?

SELECT A.emp "직원", B.emp "직속상관", B.phone "직속상관 연락처"
FROM	employee A
	INNER JOIN employee B
		ON A.manager = B.emp_no;

 

728x90
반응형

댓글