여기에서는 SQL 문법 중 JOIN
에 대해 알아볼 것이다.
SQL에서 하나의 테이블에 원하는 데이터가 모두 있다면 좋겠지만, 두 개의 테이블을 엮어야 원하는 결과가 나오는 경우도 많다. JOIN
을 사용하면 두 개의 테이블을 엮어서 원하는 데이터를 추출할 수 있다.
두 테이블의 조인을 위해서 기본키(PRIMARY KEY, PK)와 외래키(FOREIGN KEY, FK) 관계로 맺어져야 하고, 이를 일대다 관계라고 한다. 아래에서 INNER JOIN
, OUTER JOIN
, CROSS JOIN
, SELF JOIN
에 대해 간단하게 알아볼 것이다.
INNER JOIN
(내부 조인): 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.OUTER JOIN
(외부 조인): 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나온다.CROSS JOIN
(상호 조인): 한쪽 테이블의 모든 행과 다른쪽 테이블의 모든 행을 조인하는 기능이다.SELF JOIN
(자체 조인): 자신이 자신과 조인한다는 의미로, 1개의 테이블을 사용한다.두 테이블을 연결할 때 가장 많이 사용하는 것이 내부 조인이다. 그냥 조인이라고 부르면 내부 조인을 의미한다.
SELECT <column_name1>, ...
FROM <table_name1>
INNER JOIN <table_name2>
ON <condition_for_join>
[WHERE <conditions>]
* INNER JOIN을 JOIN이라고만 써도 INNER JOIN으로 인식한다.
내부 조인은 두 테이블에 모두 데이터가 있어야만 결과가 나오지만, 외부 조인은 한쪽에만 데이터가 있어도 결과가 나온다.
SELECT <column_name1>, ...
FROM <table_name1(LEFT 테이블)>
<LEFT|RIGHT|FULL> OUTER JOIN <table_name2(RIGHT 테이블)>
ON <condition_for_join>
[WHERE <conditions>]
OUTER JOIN
는 아래와 같은 종류가 있다.
LEFT OUTER JOIN
: 왼쪽 테이블의 모든 값이 출력되는 조인RIGHT OUTER JOIN
: 오른쪽 테이블의 모든 값이 출력되는 조인FULL OUTER JOIN
: 왼쪽 또는 오른쪽 테이블의 모든 값이 출력되는 조인한쪽 테이블의 모든 행과 다른쪽 테이블의 모든 행을 조인시키는 기능이다. 상호 조인의 결과의 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 수만큼 된다.
카티션 곱(CARTESIAN PRODUCT)라고도 한다.
SELECT *
FROM <table_name1>
CROSS JOIN <table_name2>
자체 조인은 자기자신과 자기 자신을 조인한다는 의미이며, 자기 자신과 조인하므로 1개의 테이블을 사용한다.
하나의 테이블을 여러번 복사해서 조인한다고 생각하시면 된다.
자신이 가지고 있는 칼럼을 다양하게 변형시켜 활용할 경우에 자주 사용한다.
SELECT <column_name1>, ...
FROM <table_name> <table_nickname1>
INNER JOIN <table_name> <table_nickname2>
ON <condition_for_join>
[WHERE <conditions>]
참고
https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/
https://coding-factory.tistory.com/87