문제

다음 사이에 중요한 차이점이 있습니까?

SELECT a.name, b.name FROM a, b WHERE a.id = b.id AND a.id = 1

그리고

SELECT a.name, b.name FROM a INNER JOIN b ON a.id = b.id WHERE a.id = 1

SO 사용자는 다른 것보다 선호하는 것이 있습니까?

도움이 되었습니까?

해결책

차이는 없지만, 두 번째의 가독성은 필터링을위한 클로스가있는 엑스트라가있는 큰 멀티 결합 쿼리를 가지고있을 때 훨씬 더 좋습니다.
조인 조항과 필터 조항을 분리하는 것은 좋은 일입니다. :)

다른 팁

전자는 ANSI 89 구문이고 후자는 ANSI 92입니다.

을 위한 그 특정 쿼리 다른 점이 없다. 그러나 전자의 경우 복잡한 쿼리의 조인 조건에서 필터를 분리하는 기능이 상실되고 왼쪽 대 오른쪽 대 내부를 지정하는 구문은 종종 혼란 스럽습니다. 특히 다른 DB 공급 업체간에 앞뒤로 이동 해야하는 경우. 나는 오래된 구문을 전혀 좋아하지 않습니다.

SQL 쿼리 엔진에는 차이가 없습니다.

가독성을 위해, 후자는 라인 브레이크와 들여 쓰기를 사용하면 읽기가 훨씬 쉽습니다.

내부 조인의 경우 "필터"및 "조인"을 ON 또는 WHERE 조항에 넣더라도 쿼리 옵티마이저는 먼저 무엇을 해야하는지 결정해야합니다 (먼저 필터, 나중에 조인 또는 바이스를 선택할 수 있습니다. VERSA

그러나 외부 조인의 경우 차이가 있으며 때로는 조건을 ON 절에, 때로는 위치에 넣고 싶을 수도 있습니다. 외부 조인에 대한 WHERE 절에 조건을두면 내부 조인으로 전환 될 수 있습니다 (널 작동 방식 때문에)

예를 들어 다음 두 샘플 사이의 가독성을 확인하십시오.

SELECT c.customer_no, o.order_no, a.article_no, r.price
FROM customer c, order o, orderrow r, article a
WHERE o.customer_id = c.customer_id
AND r.order_id = o.order_id
AND a.article_id = r.article_id
AND o.orderdate >= '2003-01-01'
AND o.orderdate < '2004-01-01'
AND c.customer_name LIKE 'A%'
ORDER BY r.price DESC 

vs

SELECT c.customer_no, o.order_no, a.article_no, r.price
FROM customer c 
INNER JOIN order o
   ON  o.customer_id = c.customer_id
   AND o.orderdate >= '2003-01-01'
   AND o.orderdate < '2004-01-01'
INNER JOIN orderrow r
   ON  r.order_id = o.order_id
INNER JOIN article a 
   ON  a.article_id = r.article_id
WHERE  c.customer_name LIKE 'A%'
ORDER BY r.price DESC 

둘 다를 사용하여 대부분의 작업을 수행 할 수 있지만 귀하의 경우에는 차이가 없지만 항상 두 번째를 항상 사용할 것입니다.

  1. 현재 지원되는 표준입니다
  2. From Clause에서 조인하고 WHERE 절에서 필터링합니다.
  3. 그것은 더 복잡한 왼쪽, 오른쪽, 전체 외부 결합을 훨씬 쉽게 만듭니다.
  4. MSSQL 도움말은 모두 해당 구문을 기반으로하므로 문제 쿼리에 대한 도움이 훨씬 쉽습니다.

기술적으로는 차이가 없지만 첫 번째 방법을 사용하여 조인을 수행할 때는 각별히 주의해야 합니다.실수로 잘못되면 a와 b 테이블 사이에 데카르트 조인을 수행하게 될 수 있습니다(매우 길고 메모리 및 CPU를 많이 사용하는 쿼리 - a의 각 단일 행을 b의 모든 행과 일치시킵니다.)a와 b가 처음부터 큰 테이블이면 좋지 않습니다.)명시적인 INNER JOIN을 사용하는 것이 더 안전하고 읽기 쉽습니다.

차이 없음. 첫 번째 형식을 더 읽기 쉽고 다른 유형의 조인 (외부, 왼쪽 내부 등)을 수행 할 때만 두 번째 형식을 사용합니다.

두 번째 형태는 SQL92 호환 구문입니다. 이것은 모든 현재 및 미래의 데이터베이스 공급 업체가 지원한다는 것을 의미해야합니다. 그러나 진실은 첫 번째 형태가 너무 광범위하여 우리가 돌보는 것보다 더 오래 보장된다는 것입니다.

그렇지 않으면 데이터베이스가 두 가지를 어떻게 처리하는지에있어서 모든면에서 동일합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top