MYSQL LIMIT 키워드에 대한 ANSI SQL 대안이 있습니까?
MYSQL LIMIT 키워드에 대한 ANSI SQL 대안이 있습니까?
LIMIT 키워드는 다음과 같이 SELECT에서 반환되는 행 수를 제한합니다.
SELECT * FROM People WHERE Age > 18 LIMIT 2;
2 행을 반환합니다.
SELECT * FROM People WHERE Age > 18 LIMIT 10, 2;
처음 10개 뒤에 2개의 행을 반환합니다.
-- DB2
select * from table fetch first 10 rows only
-- Informix
select first 10 * from table
-- Microsoft SQL Server and Access
select top 10 * from table
-- MySQL and PostgreSQL
select * from table limit 10
-- Oracle
select * from (select * from table) where rownum <= 10
SQL:1999에는 없습니다.
이후 표준에서 사용할 수 있는 접근 방식은 두 가지가 있으며, 현재 DBMS에서는 일반적으로 낮은 수준의 지원이 가능합니다.
SQL:2008에서 DB/2 구문을 사용할 수 있습니다.
SELECT * FROM things
ORDER BY smell
FETCH FIRST n ROWS ONLY
확장된 "LIMIT, n" 오프셋 구문이 아닌 "LIMITn"에서만 작동합니다.SQL:2003에서는 확장 구문을 지원할 수 있지만 수퍼 PITA인 윈도우 함수를 사용할 수 있습니다.
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY smell) AS rn,
FROM things
)
WHERE rn<=n -- or rn BETWEEN m+1 AND m+n
오늘은 DBMS별 메소드를 사용하는 것이 일반적으로 사용하게 됩니다.
http://en.wikipedia.org/wiki/Select_(SQL)#FETCH_FIRST_clause 도 참조하십시오.
SELECT * FROM T LIMIT 10 OFFSET 20 -- Netezza, MySQL, PostgreSQL (also supports the standard, since version 8.4), SQLite, HSQLDB, H2
SELECT * from T WHERE ROWNUM <= 10 -- Oracle (also supports the standard, since Oracle8i)
SELECT FIRST 10 * from T -- Ingres
SELECT FIRST 10 * FROM T order by a -- Informix
SELECT SKIP 20 FIRST 10 * FROM T order by c, d -- Informix (row numbers are filtered after order by is evaluated. SKIP clause was introduced in a v10.00.xC4 fixpack)
SELECT TOP 10 * FROM T -- MS SQL Server, Sybase ASE, MS Access
SELECT TOP 10 START AT 20 * FROM T -- Sybase SQL Anywhere (also supports the standard, since version 9.0.1)
SELECT FIRST 10 SKIP 20 * FROM T -- Interbase, Firebird
SELECT * FROM T ROWS 20 TO 30 -- Firebird (since version 2.1)
SELECT * FROM T
WHERE ID_T > 10 FETCH FIRST 10 ROWS ONLY -- DB2
SELECT * FROM T
WHERE ID_T > 20 FETCH FIRST 10 ROWS ONLY -- DB2 (new rows are filtered after comparing with key column of table T)
저는 그렇게 생각하지 않습니다.제가 알고 있는 모든 데이터베이스는 해당 기능에 공급업체별 키워드를 사용합니다.
@jle의 답변에 추가:
- SQLite 지원
LIMIT
(MySQL/PostgreSQL) - InterBase/Firebird 지원
SELECT FIRST
그리고.SKIP
(Informix처럼)
Microsoft SQL Server 2000의 에뮬레이트 MySQL LIMIT 절도 참조하십시오.
HSQL/H2는 MySQL과 같이 LIMIT를 사용합니다.
여기에 관련 SO 질문과 루카스 에더의 훌륭한 답변 및 보빈스의 또 다른 좋은 답변을 연결하겠습니다.
edit: 몇 가지 더 좋은 참조 링크, 비슷한 경우 살펴볼 가치가 있습니다.
- 제한적인 결과와 성명에 관한 위키백과;
- 결과 집합 제한에 관한 "각종 SQL 구현 비교"
- 루카스 에더의 답변에 나온 조항의 jOOQ 사용설명서 페이지
언급URL : https://stackoverflow.com/questions/595123/is-there-an-ansi-sql-alternative-to-the-mysql-limit-keyword
'programing' 카테고리의 다른 글
팬더 데이터 프레임을 신청하기 위해 람다를 전달하는 데 문제가 있음 (0) | 2023.09.24 |
---|---|
네임스페이스가 있는 XML 구문 분석에 jQuery를 사용하는 방법 (0) | 2023.09.24 |
C 및 C++ 포인터 표기에서 별을 넣을 위치 (0) | 2023.09.24 |
중앙의 이미지 정렬을 위한 CSS (0) | 2023.09.19 |
sequelize에서 mysql 연결 확인 (0) | 2023.09.19 |