[SQL] INNER JOIN

FinDer178·2025년 5월 27일
0

SQL

목록 보기
1/5

INNER JOIN 개념

다른 테이블과 매칭되는 열들이 있는 테이블로부터 열을 추출하고 싶을 때 INNER JOIN 을 사용할 수 있다. 즉, JOIN은 여러 테이블의 관련 있는 데이터를 하나로 결합해 조회하는 SQL 구문이다.

SELECT 
	column_list
FROM
	X
	INNER JOIN Y ON X.id = Y.id;
  • ON 키워드 뒤에 join 조건을 정의한다. 여기서 join 조건이란 두 테이블을 결합하는데 필요한 조건들을 말한다.
  • Oracle은 그러면 먼저 FROM 절을 평가하고, 그리고 INNER JOIN, 마지막으로 SELECT 절을 평가한다.

INNER JOIN 동작과정

  1. INNER JOIN 이 X와 Y 테이블 모두에 존재하는 id 컬럼의 값을 비교한다.
  2. 그리고 id 컬럼의 값들이 같다면 두 테이블로부터 매칭되는 열들의 값을 합친다.
  3. 최종적으로 SELECT 절이 명시된 값(column_list)을 반환한다.

자 그러면 어떻게 Oracle에서 INNER JOIN이 성립되는지 알아보자.

여기 두 개의 테이블 XY 가 있다. INNER JOIN 을 사용해서 두 테이블에 있는 row들을 합칠려고 한다.

  • X 테이블은 2개의 컬럼 : id (키), x 를 가진다.
  • Y 테이블도 2개의 컬럼 : id (키), y 를 가진다.

INNER JOIN을 통해 id 컬럼에서 매칭되는 값들을 가지는 두 개의 테이블로부터 rows(행들)을 포함할 수 있다. 다만, 매칭되지 않는 열들은 결과에 포함시키지 않는다.

이렇게 INNER JOIN을 벤 다이어그램으로 표현하면 마치 두 집합의 교집합을 찾는 것과 같다.

SELECT *
FROM orders INNER JOIN order_items 
ON order_items.order_id = orders.order_id
ORDER BY order_date DESC;

USING 절을 이용한 INNER JOIN 표현

SELECT 
	*
FROM
	X
INNER JOIN Y USING (c1, c2, ...);

위에서 본 ON 절과 마찬가지로, 테이블을 합칠 때 어떤 칼럼이 같은 지를 표시하기 위해 USING 절을 활용할 수 있다.

SELECT 
	*
FROM 
	orders
INNER JOIN order_items USING( order_id )
ORDER BY 
	order_date DESC;

참고

Oracle INNER JOIN Clause

profile
낙관적 개발자

0개의 댓글