MySQL/혼공SQL

[SQL 기초 강의] 10강. 두 테이블을 묶는 JOIN(INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN)

묘걍 2023. 11. 13. 20:12

04-2. 두 테이블을 묶는 조인

👉🏻 조인

- 두 개의 테이블을 묶는 것

- 회원 테이블과 구매 테이블을 묶어 하나의 정보를 만들고 싶다

     - 배송 정보의 경우 구매한 물건에 대한 정보와 배송을 받을 회원의 정보가 필요함

 

👉🏻 내부 조인

- 제일 중요하고 많이 쓰임

- **조인이라고 안 하고 그냥 '조인'이라고 하면 내부 조인이라고 생각하면 됨

🧩 일대 다 관계 (one to many)

  • 내부 조인의 기본 조건
    • 예외도 있긴 하지만
  • PK - FK 관계

출처: 혼공 SQL 유튜브

- 회원 테이블의 ID

     - PK(중복 불가), 하나 밖에 없음

- 구매 테이블의 ID

     - PK로 지정하면 큰일남 (한 사람당 한 번 밖에 못 삼)

     - FK(외래키)로 잡음

     - 한 회원이 여러번 나타날 수 있음 (=여러번 구매할 수 있음)

✅ 기본키 - 외래키 관계

- Ex. 사원 테이블과 급여 테이블의 경우

     - 사원은 한 명이지만 급여는 여러번 받음

- Ex. 학생 테이블과 수강 과목 테이블의 경우

     - 학생은 한 명이지만 수강 과목은 여러개일 수 있음

🧩 기본 문법

출처: 혼공 SQL 유튜브

- 꼭 나와야하는 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 ... 이런식으로 하나하나 테이블을 명시해주는 것이 좋음

- 하지만 이렇게 되면 코드가 너무 길어지고 지저분해짐

- 이 때 테이블 별명을 사용

- 테이블명 별명  형태로 작성

🎮 테이블 별명 사용해보기

 

🧩 내부 조인의 한계점

- 구매한 사람들만 나왔다

- 구매를 안했으면 구매를 하지 않았다고 명시해주는 게 나은 경우도 있다

      - 이 때 외부 조인을 사용

 

👉🏻 외부 조인

🧩 기본 문법

출처: 혼공SQL유튜브

✅ LEFT

- 'OUTER JOIN'을 기준으로 왼쪽 테이블인 첫 번째 테이블을 기준으로 외부 조인하겠다

- 왼쪽 테이블에 있는 애들은 다 나오게 하겠다

- 어차피 테이블명 위치를 바꿔주면 되는거라 LEFT만 외워도 상관 없음

✅ RIGHT

- 'OUTER JOIN'을 기준으로 오른쪽 테이블인 두 번째 테이블을 기준으로 외부 조인하겠다

- 오른쪽 테이블에 있는 애들은 다 나오게 하겠다

✅ FULL

- 양쪽 테이블에 있는 모든 데이터가 나온다

🎮 LEFT

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

🎮 RIGHT

👉🏻 상호 조인

- 딱히 의미는 없다

- 대용량 데이터를 만들기 위함이다

  • ON 구문을 사용할 수 없다
  • 결과의 내용은 의미가 없다. 랜덤으로 조인하기 때문
  • 테스트용으로 대용량 데이터를 생성할 때

출처: 혼공 SQL 유튜브

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

🎮 CROSS

- 각 테이블의 행 수를 곱한 것 만큼 결과가 나온다

🎮 대용량 데이터 생성

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

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

✅ CREATE TABLE + SELECT문

- 조회한 내용을 새 테이블로 만들어준다

🎮 5개만 확인해보기

 

👉🏻 자체 조인

- 자기 자신과 자기 자신이 조인되는 것

출처: 혼공SQL 유튜브

- 특이한 케이스이긴 함

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

🧩 조직도

출처: 혼공 SQL 유튜브

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

출처: 혼공SQL 유튜브

🧩 기본 문법

출처: 혼공SQL 유튜브

- 같은 테이블이긴 하지만 별칭을 따로 주어 구분함

- 테이블이 다르다고 가정하고 만든다

🎮 새 테이블 만들기

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

 

 

 

 

 

 

 

 

 

 

 

 

 

출처: https://youtu.be/tuQFkzjqEGw?si=JaOHo4yzsbPy3AXx