2010-01-20 4 views

답변

12

예 : 개념적으로 이해가되지 않기 때문에 수행하지 마십시오.

하위 쿼리가 일부 외부 쿼리에서 사용됩니다 (그렇지 않으면 무의미 함). 그리고 외부 쿼리는 어쨌든 순서 지정을 수행해야하므로 하위 쿼리를 정렬 할 필요가 없습니다.

명시 적 ORDER를 사용하지 않는 한 SQL의 쿼리 결과는 특별한 순서가 없기 때문입니다. 따라서 하위 쿼리에서 ORDER를 사용하더라도 외부 쿼리의 결과 순서에 영향을 미칠 수는 없습니다. 그래서 그것은 무의미합니다.

특정 RDBMS의 구현 때문에 차이가있을 수 있지만 구현에 따라 달라지며 의존하지 않아도됩니다.

편집 : 물론, 당신은 하위 쿼리에 TOP 또는 LIMIT를 사용하는 경우, 당신은 필요가 ORDER를 사용하는 것입니다. 그러나 그것은 표준 SQL이 아닙니다 ...

11

하위 쿼리에서 일종의 LIMIT/TOP을 사용하는 경우 사용해야합니다.

-- Fails 
WITH q(id) AS 
     (
     SELECT 1 
     UNION ALL 
     SELECT 2 
     ) 
SELECT * 
FROM (
     SELECT * 
     FROM q 
     ORDER BY 
       id DESC 
     ) q2 

-- Succeeds 
WITH q(id) AS 
     (
     SELECT 1 
     UNION ALL 
     SELECT 2 
     ) 
SELECT * 
FROM (
     SELECT TOP 1 * 
     FROM q 
     ORDER BY 
       id DESC 
     ) q2 

-- Succeeds, but ORDER BY is ignored 
WITH q(id) AS 
     (
     SELECT 1 
     UNION ALL 
     SELECT 2 
     ) 
SELECT * 
FROM (
     SELECT TOP 100 PERCENT * 
     FROM q 
     ORDER BY 
       id DESC 
     ) q2 
1

당신은 그것을 할 수 있습니다,하지만 당신은 필요가없는 것입니다 일반적으로하지 않는 : 서브 쿼리뿐만 아니라 TOP 또는 FOR XML 절을 포함하지 않는

SQL Server은 그것을 허용하지 않습니다.

옵티마이는 (오류 또는 던져?)를 무시합니다

페이지의 "Intermediate materialisation을"어떤 용도로.

1

하위 쿼리의 크기에 따라 성능이 변동될 수 있습니다.

순서는 하위 쿼리에서 중요하지 않습니다. Order By 부분을 외부 쿼리 (최종 결과를 반환하는 쿼리 여야 함)로 이동할 수 있어야합니다.

-3

그것은 완전히 합법적입니다. 나는. SELECT id FROM entries WHERE author_id IN (SELECT id FROM authors ORDER BY name DESC)하지만 일반적으로 같은 결과가 나타납니다.

+0

보통? 결과가 다른 경우를 줄 수 있습니까? – sleske

+0

subselect에 LIMIT 문을 추가 할 때와 다를 수 있습니다. 이 경우 이름별로 상위 5 명의 작성자의 모든 항목을 보려면 하위 선택을 (SELECT id FROM authors ORDER BY DESC LIMIT 5)로 변경하십시오. – loginx

+0

참. TOP/LIMIT을 사용하면 차이가 생깁니다 (필요한 경우 가끔 필요함). 그렇지 않으면 차이가 없습니다. – sleske

3

당신이 외부 쿼리에 주문되기 때문에 유용하지 않다 당신이 최고 사용하지 않으면 어쨌든

1

없음 ORDER BY는 따라서 당신은 항상 필요, 당신은 전체 데이터의 하위 집합에 관심이있는 하위 쿼리에서 유효합니다 a TOP (SQL Server). 결과의 전체 순서는 외부 쿼리에 의해 처리되기 때문에 하위 쿼리에는 TOP이없는 ORDER BY가 필요하지 않습니다.

1

사용해서는 안됩니다. 'Art of SQL'에 따르면 실제로 최적화 프로그램이 다양한 최적화를 수행하지 못하도록 방지하므로 데이터를 미리 성숙하게 변형 할 수 있습니다.

2

더 똑똑한 사람들은 적절하고 유효한 방법이 아니라고 말합니다. 내 경우에는 서브 쿼리에서 SELECT TOP 100 PERCENT가 문제를 해결했습니다.

건배