- 두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법
- 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것이다.
- 조인은 테이블로서 저장되거나, 그 자체로 이용할 수 있는 결과 셋을 만들어 낸다.
테이블을 연결하려면, 적어도 하나의 칼럼을 서로 공유하고 있어야 하므로 이를 이용하여 데이터 검색에 활용한다.
- 관계형 데이터베이스의 구조적 특징으로 정규화를 수행하면 의미있는 데이터의 집합으로 테이블이 구성되고 각 테이블끼리는 관계(Relationship)을 갖게 된다.
- 이와 같은 특징으로 관계형 데이터베이스는 저장 공간의 효율성과 확장성이 향상되게 된다.
- 다른 한편으로는 서로 관계있는 데이터가 여러 테이블로 나뉘어 저장되므로 각 테이블에 저장된 데이터를 효과적으로 검색하기 위해 조인이 필요하다.
- INNER JOIN
- EQUAL JOIN
- NATUREAL JOIN
- OUTER JOIN
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
- FULL OUTER JOIN
- CROSS JOIN
- SELF JOIN
명시적 조인 표현
테이블에 JOIN 키워드를 사용하고 다음 예제와 같이 ON 키워드를 조인에 대한 구문을 지정하는데 사용한다.
SELECT * FROM A INNER JOIN B ON A.name = B.name;
암시적 조인 표현
select 구문의 from 절에서 ,를 사용하여 단순히 조인을 위한 여러 테이블을 나열한다.
SELECT * FROM A, B WHERE A.name = B.name;
SELECT * FROM A LEFT OUTER JOIN B ON A.name = B.name;
SELECT * FROM A RIGHT OUTER JOIN B ON A.name = B.name;
SELECT * FROM A FULL OUTER JOIN B ON A.name = B.name;
명시적 조인 표현
SELECT * FROM A CROSS JOIN B;
암시적 조인 표현
SELECT * FROM A, B;
SELECT A.name, B.age FROM A ,B;
SQL을 어떻게 작성하느냐에 따라 성능이 크게 좌우된다. 어떤 질의를 수행할 것인지를 명확하게 정의한 후, 비효율을 제거하여 최적의 SQL을 작성해야 한다.
조인 조건을 명확하게 제공하지 않을 경우, 의도치 않게 CROSS JOIN이 수행될 수 있다.
조인할 대상의 집합을 최소화
집합을 최소화할 방법이 있으면, 조건을 먼저 적용하여 관계를 맺을 집합을 최소화한 후, 조인을 맺는 것이 효율적이다.
효과적인 인덱스의 활용
인덱스를 활용하면 조인 연산의 비용을 극적으로 낮출 수 있다.
참조: https://velog.io/@ragnarok_code/DataBase-%EC%A1%B0%EC%9D%B8Join%EC%9D%B4%EB%9E%80, https://gyoogle.dev/blog/computer-science/data-base/Join.html