Skip to Content
Suffering builds character

1.JOIN

JOIN 절은 서로 다른 두 개의 테이블에 공통적으로 존재하는 열(Column) 데이터를 활용하여 하나로 연결하여 데이터를 조회하고자 할 때 사용

1-1. JOIN의 역할

  1. 하나의 쿼리로 다수의 테이블을 한 번에 조회 가능
  2. 열 값으로 테이블 행을 연결
  3. 하나의 행은 하나 이상의 행과 연결될 수 있음
💡
Tip

일반적으로 부모 테이블과 자식 테이블을 기본키와 외래키로 조인하는 것이 일반적이지만,
관계를 가지지 않는 테이블을 조인하는 경우도 있음

customer 테이블 정보 조회

sql
desc customer;

address 테이블 정보 조회

sql
desc address;

address 테이블에서 주소를 가져오고, 동시에 customer 테이블에서 last_name과 first_name을 가져오기 위해서는 두 테이블의 연결(JOIN)이 필요함

외래 키(Foreign key) 개념을 활용하여 두 테이블에 공통적으로 존재하는 address_id 컬럼으로 두 테이블의 열(Column) 데이터를 하나로 연결(JOIN)

단순한 방법

sql
-- 상위 100개 행 조회 SELECT c.first_name, c.last_name, a.address FROM customer c JOIN address a LIMIT 100;

과거에 사용하던 JOIN Query

sql
SELECT c.first_name, c.last_name, a.address FROM customer c, address a WHERE c.address_id = a.address_id;

→ 각 테이블 customer와 address의 공통 컬럼인 address_id를 WHERE 절 내에 JOIN 조건을 기술함

해당 Query의 첫 번째 단점

DBMS 벤더(Oracle, MySQL, SQL Server, PostgreSQL 등)마다 조금씩 다른 문법(Dialect, 방언)에 의해 호환이 어려움

sql
SELECT c.first_name, c.last_name, a.address FROM customer c, address a WHERE c.address_id = a.address_id AND a.postal_code = 52137;

해당 Query의 두 번째 단점

WHERE 조건이 논리 연산자(AND, OR 등)에 의해 두 개 이상이 될 경우 어떤 조건이 JOIN 조건이고, 어떤 조건이 일반적인 필터링 조건인지 구분이 어려움

ANSI 표준 문법(SQL92 버전)을 활용한 JOIN Query

sql
SELECT c.first_name, c.last_name, a.address FROM customer c INNER JOIN address a -- JOIN 유형 및 조인 테이블 지정 ON c.address_id = a.address_id -- 조인 조건 기술 WHERE a.postal_code = 52137;

→ INNER는 default 이기 때문에 생략해도 동일한 결과가 출력됨

Last updated on