>데이터 베이스 >MySQL 튜토리얼 >Microsoft SQL Server 2000에서 MySQL의 LIMIT 절을 모방하는 방법은 무엇입니까?

Microsoft SQL Server 2000에서 MySQL의 LIMIT 절을 모방하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-08 07:24:11712검색

How to Mimic MySQL's LIMIT Clause in Microsoft SQL Server 2000?

Microsoft SQL Server 2000에서 MySQL의 LIMIT 기능 복제

MySQL의 LIMIT 절은 특정 수의 행 검색을 단순화합니다. SQL Server 2000에는 직접적인 대응 기능이 없으므로 해결 방법이 필요합니다. 비슷한 결과를 얻을 수 있는 몇 가지 방법은 다음과 같습니다.

방법 1: 중첩 쿼리(SQL Server 2000)

이 접근 방식은 중첩된 SELECT 문을 사용하여 정의된 범위 내의 행을 필터링합니다.

<code class="language-sql">SELECT TOP 25 *
FROM (
    SELECT TOP 75 *
    FROM table
    ORDER BY field ASC
) a
ORDER BY field DESC;</code>

field에서 주문한 후 26-75행을 검색합니다. 참고: 이 방법은 대규모 데이터 세트의 경우 효율성이 떨어지며 마지막 페이지에 대해 여러 페이지 크기가 아닌 시나리오를 적절하게 처리하지 않습니다.

방법 2: 고유 열 활용(SQL Server 2000)

테이블에 고유 열(예: 기본 키)이 있는 경우 이 기술은 이미 선택된 행을 제외합니다.

<code class="language-sql">SELECT TOP n *
FROM tablename
WHERE key NOT IN (
    SELECT TOP x key
    FROM tablename
    ORDER BY key
);</code>

이것은 n 열을 기준으로 정렬된 상위 x 행을 제외하고 key 행을 선택합니다. 이는 대형 테이블에도 효율성이 떨어집니다.

방법 3: ROW_NUMBER() 사용(SQL Server 2005 이상)

SQL Server 2005 이상에서는 ROW_NUMBER() 함수가 더욱 우아한 솔루션을 제공합니다.

<code class="language-sql">SELECT z2.*
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY id) AS rownum, z1.*
    FROM ( ...original SQL query... ) z1
) z2
WHERE z2.rownum BETWEEN @offset + 1 AND @offset + @count;</code>

각 결과에 행 번호를 할당한 다음 지정된 오프셋(@offset) 및 개수(@count)를 기준으로 필터링합니다. 이는 일반적으로 최신 SQL Server 버전에 가장 효율적이고 유연한 방법입니다.

방법 4: EXCEPT 문(SQL Server 2005 이상)

SQL Server 2005 이상의 또 다른 옵션은 EXCEPT 집합 연산자를 사용합니다.

<code class="language-sql">SELECT * FROM (
    SELECT TOP 75 COL1, COL2
    FROM MYTABLE ORDER BY COL3
) AS foo
EXCEPT
SELECT * FROM (
    SELECT TOP 50 COL1, COL2
    FROM MYTABLE ORDER BY COL3
) AS bar;</code>

COL3에서 주문한 후 51~75행을 선택합니다. ROW_NUMBER() 접근 방식과 유사하게 이는 최신 SQL Server 버전에 대한 보다 효율적인 솔루션입니다. 그러나 복잡한 시나리오의 경우 ROW_NUMBER()보다 직관적이지 않습니다. SQL Server 버전과 데이터 세트 크기에 가장 적합한 방법을 선택하세요.

위 내용은 Microsoft SQL Server 2000에서 MySQL의 LIMIT 절을 모방하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.