04-2. 두 테이블을 묶는 조인
👉🏻 조인
- 두 개의 테이블을 묶는 것
- 회원 테이블과 구매 테이블을 묶어 하나의 정보를 만들고 싶다
- 배송 정보의 경우 구매한 물건에 대한 정보와 배송을 받을 회원의 정보가 필요함
👉🏻 내부 조인
- 제일 중요하고 많이 쓰임
- **조인이라고 안 하고 그냥 '조인'이라고 하면 내부 조인이라고 생각하면 됨
🧩 일대 다 관계 (one to many)
- 내부 조인의 기본 조건
- 예외도 있긴 하지만
- PK - FK 관계

- 회원 테이블의 ID
- PK(중복 불가), 하나 밖에 없음
- 구매 테이블의 ID
- PK로 지정하면 큰일남 (한 사람당 한 번 밖에 못 삼)
- FK(외래키)로 잡음
- 한 회원이 여러번 나타날 수 있음 (=여러번 구매할 수 있음)
✅ 기본키 - 외래키 관계
- Ex. 사원 테이블과 급여 테이블의 경우
- 사원은 한 명이지만 급여는 여러번 받음
- Ex. 학생 테이블과 수강 과목 테이블의 경우
- 학생은 한 명이지만 수강 과목은 여러개일 수 있음
🧩 기본 문법

- 꼭 나와야하는 ON
- ON이 없으면 마구잡이로 엮이게 된다
- 조건/기준이 된다
- WHERE은 생략 가능
🎮 ID를 기준으로 조인해보기 (소녀시대만)

- buy 테이블을 기준으로 member 테이블과 내부 조인을 한다
- 구매 테이블의 ID와 멤버 테이블의 ID가 같은 것을 기준으로
- ID가 GRL인 것만

- 분홍색 라인을 기준으로 왼쪽이 buy테이블에 있던 내용, 오른쪽이 member테이블에 있던 내용
🎮 WHERE 조건 생략해보기


- 전체 회원에 대한 조인 결과를 보여줌
🎮 필요한 열만 골라 보기


- 오류남
- mem_id라는 것이 buy테이블에도 있고 member테이블에도 있음
- 어느 테이블의 mem_id를 출력할 것인지 지정해줘야함
🎮 오류 수정

- 어느 테이블의 컬럼을 말하는건지 지정해줌

🧩 테이블 별명
- 원래는 buy.mem_id, member.mem_name, buy.prod_name ... 이런식으로 하나하나 테이블을 명시해주는 것이 좋음
- 하지만 이렇게 되면 코드가 너무 길어지고 지저분해짐
- 이 때 테이블 별명을 사용
- 테이블명 별명 형태로 작성
🎮 테이블 별명 사용해보기

🧩 내부 조인의 한계점
- 구매한 사람들만 나왔다
- 구매를 안했으면 구매를 하지 않았다고 명시해주는 게 나은 경우도 있다
- 이 때 외부 조인을 사용
👉🏻 외부 조인
🧩 기본 문법

✅ LEFT
- 'OUTER JOIN'을 기준으로 왼쪽 테이블인 첫 번째 테이블을 기준으로 외부 조인하겠다
- 왼쪽 테이블에 있는 애들은 다 나오게 하겠다
- 어차피 테이블명 위치를 바꿔주면 되는거라 LEFT만 외워도 상관 없음
✅ RIGHT
- 'OUTER JOIN'을 기준으로 오른쪽 테이블인 두 번째 테이블을 기준으로 외부 조인하겠다
- 오른쪽 테이블에 있는 애들은 다 나오게 하겠다
✅ FULL
- 양쪽 테이블에 있는 모든 데이터가 나온다
🎮 LEFT


- 잇지는 구매하지 않았지만 나왔음
🎮 RIGHT


👉🏻 상호 조인
- 딱히 의미는 없다
- 대용량 데이터를 만들기 위함이다
- ON 구문을 사용할 수 없다
- 결과의 내용은 의미가 없다. 랜덤으로 조인하기 때문
- 테스트용으로 대용량 데이터를 생성할 때

- 회원 테이블의 소녀시대와 구매 테이블의 모든 데이터를 묶음
🎮 CROSS



- 각 테이블의 행 수를 곱한 것 만큼 결과가 나온다
🎮 대용량 데이터 생성

- 다 볼 필요는 없고 개수가 얼마나 많이 나오는지만 확인해보기

🎮 두 개 테이블을 조인해서 새 테이블 만들기

✅ CREATE TABLE + SELECT문
- 조회한 내용을 새 테이블로 만들어준다

🎮 5개만 확인해보기


👉🏻 자체 조인
- 자기 자신과 자기 자신이 조인되는 것

- 특이한 케이스이긴 함
- 테이블 하나를 복사해서 같은 테이블 하나를 더 두고 조인한다고 생각해도 문제는 없음
🧩 조직도

- 직원 테이블을 만드는데 직속 상관 정보도 입력할 경우

🧩 기본 문법

- 같은 테이블이긴 하지만 별칭을 따로 주어 구분함
- 테이블이 다르다고 가정하고 만든다
🎮 새 테이블 만들기

🎮 경리부장의 직속상관의 연락처


출처: https://youtu.be/tuQFkzjqEGw?si=JaOHo4yzsbPy3AXx
'MySQL > 혼공SQL' 카테고리의 다른 글
[SQL 기초 강의] 12강. GUI 환경에서 테이블 생성하기, SQL로 테이블 만들기 (1) | 2023.11.20 |
---|---|
[SQL 기초 강의] 11강. SQL 프로그래밍(IF문, CASE문, WHILE문, 동적SQL) (0) | 2023.11.14 |
[SQL 기초 강의] 9강. MySQL의 데이터 형식(정수형, 문자형, 실수형, 날짜형)과 형 변환 (0) | 2023.11.11 |
[SQL 기초 강의] 8강. 데이터 변경을 위한 SQL 문(INSERT, UPDATE, DELETE) (1) | 2023.11.11 |
[SQL 기초 강의] 7강. SQL SELECT 절의 형식(ORDER BY 절과 GROUP BY 절) (0) | 2023.11.08 |