1.JOIN
JOIN 절은 서로 다른 두 개의 테이블에 공통적으로 존재하는 열(Column) 데이터를 활용하여 하나로 연결하여 데이터를 조회하고자 할 때 사용
1-1. JOIN의 역할
- 하나의 쿼리로 다수의 테이블을 한 번에 조회 가능
- 열 값으로 테이블 행을 연결
- 하나의 행은 하나 이상의 행과 연결될 수 있음
일반적으로 부모 테이블과 자식 테이블을 기본키와 외래키로 조인하는 것이 일반적이지만,
관계를 가지지 않는 테이블을 조인하는 경우도 있음
customer 테이블 정보 조회
desc customer;address 테이블 정보 조회
desc address;address 테이블에서 주소를 가져오고, 동시에 customer 테이블에서 last_name과 first_name을 가져오기 위해서는 두 테이블의 연결(JOIN)이 필요함
외래 키(Foreign key) 개념을 활용하여 두 테이블에 공통적으로 존재하는 address_id 컬럼으로 두 테이블의 열(Column) 데이터를 하나로 연결(JOIN)
단순한 방법
-- 상위 100개 행 조회
SELECT c.first_name, c.last_name, a.address
FROM customer c JOIN address a LIMIT 100;과거에 사용하던 JOIN Query
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, 방언)에 의해 호환이 어려움
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
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 이기 때문에 생략해도 동일한 결과가 출력됨