JOIN이란?
여러개의 테이블은 각각 PK(Primary Key)를 가지고 다른 테이블과 FK(Foriegn Key)로 연결되어있다. 앞서서 설명했던 조회문들은 한 테이블에서 정보를 가져오는 예시들이었지만 JOIN은 2개 이상 테이블을 연동해서 정보를 가져오는데 사용되며 가장 많이 사용하게 될 구문이다.
기본 JOIN
INNER JOIN (내 부조인)이 JOIN의 기본이고 가장 많이 사용된다. 기본 형식은 다음과 같다.
SELECT 열이름
FROM 테이블명 1
INNER JOIN 테이블명 2
ON 조인 조건
WHERE 검색 조건
여기서 WHERE은 생략이 가능하다.
아래 예시를 보면서 같이 확인해보도록 하자.
실습예제 및 데이터베이스는 혼자공부하는 SQL을 참고합니다.
가상 데이터로 SQL 기초 실습하기 (WHERE, AND, OR, BETWEEN)
SQL을 처음 이해할때는 데이터베이스를 가지고 실제로 조회해보는 것이 가장 빠르게 이해가 된다. 활용할 수 있는 많은 데이터들이 있지만 강의까지 같이 제공하고 있는 '혼자공부하는 SQL'시리
asa0677.tistory.com
→ 데이터 베이스 생성은 이글을 참고하자
이번에도 예전에 만들어두었던 market_db를 활용해서 데이터를 추출해본다.
[member] 테이블
[buy] 테이블
여기서 단순히 이 두개 테이블에 있는 정보를 전부 합친다고 하면 다음과 같은 쿼리문을 작성할 수 있다.
USE market_db;
SELECT *
FROM buy
INNER JOIN member
ON buy.mem_id = member.mem_id;
하지만 이런 경우가 아니라 특별한 조건이 더해지게 되는 경우가 대부분이다. 예를 들어서
지갑을 구매한 멤버의 이름과 주소를 확인하고 싶다면
SELECT mem_name, addr
FROM buy
INNER JOIN member
ON buy.mem_id = member.mem_id
WHERE prod_name = '지갑';
위와 같은 쿼리 작성을 통해 확인할 수 있다.
SQL문을 작성을 위해서는 주어진 문장을 구조화 시킬수 있어야 하는데 위에서 제시한 문장을
‘지갑을 구매한 멤버(WHERE prod_name) 의 이름(mem_name)과 주소(addr)을 확인(SELECT)하고 싶다’ 라는식으로 받아들일 수 있도록 훈련하는 것이 중요한 것 같다.
INNER JOIN과 OUTER JOIN의 차이점
JOIN에는 INNER JOIN과 OUTER JOIN이 있다. INNER JOIN은 두 테이블에서 공통된 값만을 반환하고,
OUTER JOIN은 한 쪽 테이블에 데이터가 있더라도 결과를 반환한다.
예를 들어, 회원 정보와 주문 정보가 있는 두 개의 테이블이 있다고 가정하자.
INNER JOIN을 사용하면 회원 정보와 주문 정보에서 공통된 값을 반환하고,
OUTER JOIN을 사용하면 회원 정보와 주문 정보 중 어느 한 쪽에만 데이터가 있는 경우에도 결과를 반환한다.
다음 INNER JOIN과 OUTER JOIN에 대한 예시를 살펴보자
USE market_db;
SELECT member.mem_name, buy.prod_name
FROM member
INNER JOIN buy
ON member.mem_id = buy.mem_id;
위의 쿼리문은 INNER JOIN을 사용하여 회원 정보와 구매 정보에서 공통된 값을 반환한다.
즉, 회원 정보와 구매 정보에서 공통된 mem_id 값을 가진 데이터만 반환한다.
USE market_db;
SELECT member.mem_name, buy.prod_name
FROM member
LEFT OUTER JOIN buy
ON member.mem_id = buy.mem_id;
위의 쿼리문은 LEFT OUTER JOIN을 사용하여 회원 정보를 기준으로 구매 정보를 가져온다.
즉, 구매 정보 중 회원 정보에 매칭되는 데이터가 없는 경우에도 결과를 반환할수 있다..
이러한 INNER JOIN과 OUTER JOIN은 데이터를 조합할 때 중요한 역할을 한다.
INNER JOIN은 두 개의 테이블에서 공통된 값을 가져오기 때문에, 두 테이블이 서로 연결되어 있을 때 사용하기 좋고. OUTER JOIN은 한 쪽에 데이터가 없더라도 결과를 반환하기 때문에, 왼쪽 또는 오른쪽 테이블에서 데이터가 누락될 가능성이 있는 경우 사용하기 좋다.
'SQL 공부일지' 카테고리의 다른 글
[SQL 실습] 조회 가능한 데이터베이스 (0) | 2023.03.27 |
---|---|
[SQL 실습] JOIN (2) (0) | 2023.03.22 |
[MySQL 실습] INSERT, DESC (0) | 2023.03.02 |
MySQL Workbench ERD살펴보기 (0) | 2023.03.01 |
[MySQL 실습] ORDER BY, GROUP BY (0) | 2023.02.17 |