2012-04-18 2 views
0

이 쿼리는 어떻게 다른가요? 어느 쪽이 내가 선호해야하고 왜 그럴까요?mysql SELECT "FROM t1, t2"- 또는 - "FROM t1 JOIN t2 ON"

SELECT 
t1.*, 
t2.x 
FROM 
t1, 
t2 
WHERE 
t2.`id` = t1.`id` 

또는

SELECT 
t1.*, 
t2.x 
FROM 
t1 
INNER JOIN             # LEFT JOIN ? 
t2 
ON t2.`id` = t1.`id` 

LEFT 조인을 사용하는 것보다 같은 효과 쉼표를했다 사용합니까?

그건 당황 스럽네. 제가 몇 년 동안이 점에 대해 처음으로 물었습니다. 나는 첫 번째 버전을 사용했지만, 이제는 첫 번째 SQL 유도에서 몇 줄을 놓친 것처럼 느껴진다. ;)

+0

가능한 중복 [INNER JOIN ON 대 WHERE 절] (http://stackoverflow.com/questions/1018822/inner-join-on-vs-where-clause) –

답변

0

"쉼표"구문은 INNER JOIN 구문과 동일합니다. 쿼리 최적화 프로그램은 사용자가 쿼리하는 방식과 상관없이 동일한 쿼리를 실행해야합니다. JOIN 언어를 사용하여 조인을 수행하고 WHERE 언어를 사용하여 필터링을 수행하여 의도를보다 명확하게 나타낼 수 있습니다.

0

쿼리는 동일하며 첫 번째 문법은 두 번째 문법입니다. LEFT JOIN은 완전히 다른 것입니다.

INNER JOIN은 두 테이블에 공통된 레코드 만 표시합니다. LEFT JOIN은 왼쪽 테이블의 모든 레코드를 가져와 오른쪽 테이블의 레코드와 일치시킵니다. 오른쪽 표의 레코드가 일치하지 않으면 NULL이 해당 위치에서 선택됩니다.

0

내부 조인은 두 번째 테이블의 빈 (null) 결과를 건너 뛰는 조인입니다.

쿼리 최적화 프로그램에는 where 절을 사용하여 모든 작업을 수행 할 때 더 많은 가능성이 있습니다. 일부 rdbms는 자연 조인 (natural join)과 다른 조인 (join) 같은 명령을 지원하지 않으므로 "where"는 실제로 의존 할 수있는 것을 사용합니다.

0

첫 번째 쿼리는 cartisian 쿼리라고하며 일반적으로 큰 데이터베이스에서 원하지 않는 결과를 제공합니다.

대신 조인을 사용하면 원하는 것을 정확하게 생성 할 수 있습니다.

관련 문제