2009-10-30 3 views
2

언제나 join은 결과를 얻은 다음 그 결과를 사용하여 조인합니다.MySQL 쿼리. Join과 SubQuery의 차이점은 무엇입니까?

SELECT * FROM tbl AS t1 
JOIN tbl2 AS t2 ON t1.id = t2.foreignId 
JOIN tbl3 AS t3 ON t2.id = t3.foreignId 
WHERE t1.date > SOMEDATE 

필자가 이해 한 바로는 where 문을 실행하고 날짜 범위 내에있는 결과 만 얻습니다. 그런 다음 t2를 모두 통과하고 t1에 연결된 ID 만 일치 시키십시오 (결과가 더 작아 질 수 있음). 그런 다음이 작은 잠재 결과로 T3에 대해 동일한 작업을 수행하고 최종 결과를 출력합니다.

하지만 어떻게 작동하지 않는 것처럼 보입니까? 그리고 테이블은 점점 작아지는 대신에 증식합니다. 그리고 분명히 내가 위에서 설명한 것은 서브 쿼리와 더 비슷합니까? (내가 말했듯이, 나는 어떻게 말해서 하위 쿼리가 작동하는지 알지 못한다.)

JOIN은 어떻게 작동하며 JOIN과 하위 쿼리의 차이점은 무엇입니까?

나는 MySql과 SQLite를 모두 사용합니다. 그게 관련이 있는지 나는 모른다.

+0

이것은 MySQL의 문제가 아닙니다. 일반적으로 모든 SQL 데이터베이스에 적용 할 수 있습니다. (마찬가지로이 사용자가 게시 한 비슷한 질문의 대부분은 ...) –

답변

0

서브 쿼리 예제 DB 엔진 정말 그 최적화에 달려 수행 방법

SELECT * 
FROM (
    SELECT * FROM tbl1 WHERE date > SOMEDATE 
) 
AS t1 
JOIN tbl2 AS t2 ON t1.id = t2.foreignId 
JOIN tbl3 AS t3 ON t2.id = t3.foreignId 

. 쿼리 앞에 EXPLAIN을 넣어 DB 엔진이 수행중인 작업을 확인하십시오.

1

하위 쿼리에 사용 된 테이블에서 값이 두 번 반환되는 경우 JOIN은 일치하는 행도 두 번 반환하지만 IN 또는 EXISTS 조건은 한 번만 반환합니다. .

JOIN은 성능이 좋은 경향이 있지만 각 데이터베이스 (버전 포함)의 경우에는 그렇지 않을 수도 있습니다.

참조 :