[DB] MySQL - JOIN / UNION

aseol·2023년 8월 2일
0

MySQL

목록 보기
9/18
post-thumbnail

JOIN이란?

두 개 이상의 테이블에서 데이터를 검색하는 방법으로, 각 테이블에서 적절한 행을 서로 연결하여 하나의 결과를 가져올 수 있다.

쿼리문 작성 순서

  1. ERD 확인
  2. JOIN 조건 확인
  3. SQL 한번에 작성하지 말고 조금씩 조회> 추가 > 조회

종류

INNER JOIN

: 두 테이블이 공통적으로 가지고 있는 행만을 조회 ➡️ NULL행이 존재하지 않음

데이터가 규칙 없이 섞이는 것 방지하기 위하여 반드시 ON을 작성하기
 

예시 문제

❔ county table에서 Continent가 EUROPE인 도시의 이름과 Continent 조회 🔽

❔ Continent가 ASIA인 city의 인구수의 합을 조회 🔽


❔ 회원 중에서, 2월에 로그인한 회원의 아이디와 이메일, 로그인 일자를 조회 (중복X) 🔽


LEFT JOIN [RIGHT JOIN]

: 양쪽이 공통으로 가지고 있는 행뿐만 아니라 왼쪽[오른쪽]에만 있는 행도 포함하여 조회 ➡️ 왼쪽[오른쪽]에만 존재하는 행인 경우 오른쪽[왼쪽] 행의 값은 NULL로 조회된다.

FROM 다음에 왼쪽[오른쪽]에 놓을 테이블을 적고 
LEFT JOIN 다음에 오른쪽[왼쪽]에 놓을 테이블을 적는다 

예시 문제

❔ 회원 테이블에서 아무도 가지고 있지 않은 회원등급의 이름을 조회


❗A와 B가 공통으로 가지고 있는 컬럼을 작성하여 조회할 때 주의사항 🔽

a_name이라는 컬럼이 novel 테이블에도 있고 tb_author 테이블에도 있기 때문에 
조회할 때 그냥 a_name만 작성하면 모호하다는 에러문이 뜬다.

⬇️

어떤 테이블에 속하는 a_name을 말하는 것인지 명시하여 작성해야 한다.

FULL OUTER JOIN

왼쪽 테이블과 오른쪽 테이블의 합집합

💡 MySQL은 FULL OUTER JOIN이 없다.
(LEFT JOIN 과 RIGHT JOIN을 이용해 FULL OUTER JOIN을 사용)

CROSS JOIN

두 테이블의 곱집합

SELF JOIN

자신에게 조인하는 것

UNION

여러 쿼리의 조회 결과들의 합집합.
JOIN은 테이블을 옆으로 붙이는 작업인 반면 UNION은 위아래로 붙인다.
UNION : 중복되는 데이터를 제외하고 출력
UNION ALL : 중복되는 데이터까지 포함하여 출력

A테이블>
 u_id phone addr
 ---- ----- -----
 id001
 id002
 id003
 
B테이블>
 u_id phone addr
 ---- ----- -----
 id003
 id004
 id005
 
 UNION 이용시 
  u_id phone addr
 ---- ----- -----
 id001
 id002
 id003
 id004
 id005
 
 UNION ALL 이용시
  u_id phone addr
 ---- ----- -----
 id001
 id002
 id003
 id003
 id004
 id005

UNION 사용 조건

  • 위아래로 딱 맞게 붙여야 하므로 조회하는 컬럼의 개수가 같아야 한다.
  • 컬럼의 이름이 같아야 한다 (다를 경우, AS 작성하여 이름을 같게 만들 수 있다).
  • 본래 데이터 타입이 같아야 한다.
    ➡ 그러나 MySQL에서는 이것들을 무시하고 실행
컬럼의 이름이 다르지만 조회가 된다.

참조사이트

https://sql-joins.leopard.in.ua/
https://www.javatpoint.com/mysql-cross-join

0개의 댓글