🍏

데이터베이스 쿼리(Query)에 대하여: 조인(Join) - 1

데이터베이스에서 데이터를 조회할 때, 조인(JOIN) 구문을 사용한다. 주로 관계형 데이터베이스에서 테이블들은 서로 연관 관계를 가진다. 연관 관계를 갖는 테이블의 데이터를 조회하기 위해서, 조인 구문을 사용해 데이터를 조회한다. 연관 관계는 하나 또는 여러 컬럼으로 나타낼 수 있다. 조인 구문에서 여러 연관 관계를 나타낼 때, AND 구문으로 나타낸다.

JOIN, ON...AND vs. ON...WHERE

‘ON...AND’와 ‘ON..WHERE’ 이 두 구문에는 어떠한 차이가 있을까. ‘ON...AND’은 조인 구문에서 연관 관계를 나타내는 여러 컬럼들을 AND 구문으로 묶어서 나타낸 것이다. ‘ON...WHERE’은 연관 관계를 나타내는 컬럼과 조회할 데이터의 조건을 나타낸다.

  • ON: JOIN을 하기 전에 필터링을 먼저 수행한다. 필터링 이후의 레코드들 사이의 JOIN이 이뤄진다.

  • WHERE: JOIN을 한 이후에 필터링을 수행한다. 

INNER JOIN에서의 ON과 WHERE 구문은 큰 차이가 없다. 엔진에 따라 다르지만 Optimizer가 해당 쿼리를 최적화하여 필터링 이후에 JOIN을 한다. 그러나 OUTER JOIN에서는 다르다. 사실 생각해보면 OUTER JOIN은 JOIN을 통해 매핑되지 않는 데이터도 조회하기 때문이다. 그래서 ON 구문에서 진행하게 되면 필터링이 먼저 이뤄지기 때문에 데이터가 기대와 다르게 나온다. WHERE 구문을 통해 필터링을 해야 원하던 결과를 얻을 수 있다.

References