하위 쿼리에서 'order by'을 수행해야하는 이유는 무엇입니까?하위 쿼리에 order by 절을 사용할 수 있습니까?
답변
예 : 개념적으로 이해가되지 않기 때문에 수행하지 마십시오.
하위 쿼리가 일부 외부 쿼리에서 사용됩니다 (그렇지 않으면 무의미 함). 그리고 외부 쿼리는 어쨌든 순서 지정을 수행해야하므로 하위 쿼리를 정렬 할 필요가 없습니다.
명시 적 ORDER를 사용하지 않는 한 SQL의 쿼리 결과는 특별한 순서가 없기 때문입니다. 따라서 하위 쿼리에서 ORDER를 사용하더라도 외부 쿼리의 결과 순서에 영향을 미칠 수는 없습니다. 그래서 그것은 무의미합니다.
특정 RDBMS의 구현 때문에 차이가있을 수 있지만 구현에 따라 달라지며 의존하지 않아도됩니다.
편집 : 물론, 당신은 하위 쿼리에 TOP 또는 LIMIT를 사용하는 경우, 당신은 필요가 ORDER를 사용하는 것입니다. 그러나 그것은 표준 SQL이 아닙니다 ...
하위 쿼리에서 일종의 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
당신은 그것을 할 수 있습니다,하지만 당신은 필요가없는 것입니다 일반적으로하지 않는 : 서브 쿼리뿐만 아니라 TOP
또는 FOR XML
절을 포함하지 않는
SQL Server
은 그것을 허용하지 않습니다.
옵티마이는 (오류 또는 던져?)를 무시합니다
페이지의 "Intermediate materialisation을"어떤 용도로.
하위 쿼리의 크기에 따라 성능이 변동될 수 있습니다.
순서는 하위 쿼리에서 중요하지 않습니다. Order By 부분을 외부 쿼리 (최종 결과를 반환하는 쿼리 여야 함)로 이동할 수 있어야합니다.
그것은 완전히 합법적입니다. 나는. SELECT id FROM entries WHERE author_id IN (SELECT id FROM authors ORDER BY name DESC)
하지만 일반적으로 같은 결과가 나타납니다.
당신이 외부 쿼리에 주문되기 때문에 유용하지 않다 당신이 최고 사용하지 않으면 어쨌든
없음 ORDER BY는 따라서 당신은 항상 필요, 당신은 전체 데이터의 하위 집합에 관심이있는 하위 쿼리에서 유효합니다 a TOP
(SQL Server). 결과의 전체 순서는 외부 쿼리에 의해 처리되기 때문에 하위 쿼리에는 TOP이없는 ORDER BY가 필요하지 않습니다.
사용해서는 안됩니다. 'Art of SQL'에 따르면 실제로 최적화 프로그램이 다양한 최적화를 수행하지 못하도록 방지하므로 데이터를 미리 성숙하게 변형 할 수 있습니다.
더 똑똑한 사람들은 적절하고 유효한 방법이 아니라고 말합니다. 내 경우에는 서브 쿼리에서 SELECT TOP 100 PERCENT가 문제를 해결했습니다.
건배
보통? 결과가 다른 경우를 줄 수 있습니까? – sleske
subselect에 LIMIT 문을 추가 할 때와 다를 수 있습니다. 이 경우 이름별로 상위 5 명의 작성자의 모든 항목을 보려면 하위 선택을 (SELECT id FROM authors ORDER BY DESC LIMIT 5)로 변경하십시오. – loginx
참. TOP/LIMIT을 사용하면 차이가 생깁니다 (필요한 경우 가끔 필요함). 그렇지 않으면 차이가 없습니다. – sleske