본문 바로가기
DB(sql)

데이터베이스별 결과 제한 쿼리(SQL 최적화 전략)

by doran365 2024. 7. 31.

데이터베이스를 관리하고 운영할 때, 특정 결과를 제한하는 쿼리는 매우 중요합니다. 이는 성능 향상, 리소스 절약, 사용자 경험 개선 등을 위해 필수적인 기술입니다. 이번 글에서는 MSSQL, Oracle, MySQL, 큐브리드 등의 다양한 데이터베이스 시스템에서 결과 제한 쿼리를 사용하는 방법에 대해 상세히 설명하겠습니다.

MSSQL에서의 결과 제한(TOP 키워드 사용법)

 

MSSQL에서는 결과를 제한하기 위해 TOP 키워드를 사용합니다. 이는 쿼리 결과의 상위 n개 행만을 반환할 때 유용합니다.

TOP 키워드 사용 예제

SELECT TOP 100 * FROM testTable

위 쿼리는 testTable에서 상위 100개의 행만을 반환합니다. 매우 직관적이고 사용하기 쉬운 방식입니다.

Oracle에서의 결과 제한: ROWNUM 키워드 활용

Oracle에서는 결과를 제한하기 위해 ROWNUM 키워드를 사용합니다. 이는 각 행에 일련 번호를 부여하여 조건에 따라 결과를 제한합니다.

기본 ROWNUM 사용 예제

SELECT id, password, ROWNUM FROM test WHERE ROWNUM <= 5 ORDER BY idx DESC

위 쿼리는 test 테이블에서 상위 5개의 행을 내림차순으로 정렬하여 반환합니다. 그러나 ROWNUM은 정렬 후 적용되기 때문에 원하는 결과가 나오지 않을 수 있습니다.

정렬 후 ROWNUM 적용 예제

정렬 후 ROWNUM을 적용하기 위해 서브 쿼리를 사용합니다.

SELECT anyalias.anydata, anyalias.anydate, ROWNUM
FROM (SELECT anydata, anydate FROM anytable ORDER BY anydate DESC) anyalias
WHERE ROWNUM <= 10
 

위 예제는 anytable을 날짜 기준으로 내림차순 정렬한 후 상위 10개의 행을 반환합니다.

ROWNUM을 활용한 범위 지정 예제

SELECT *
FROM (SELECT anyalias.anydata, ROWNUM AS rownum_alias 
      FROM (SELECT anydata FROM anytable ORDER BY anydata) anyalias
      WHERE ROWNUM <= 10)
WHERE rownum_alias >= 5

위 쿼리는 정렬 후 ROWNUM을 할당하고, 할당된 ROWNUM 중 5번째에서 10번째까지의 행을 반환합니다.

MySQL에서의 결과 제한: LIMIT 키워드 사용법

MySQL에서는 결과를 제한하기 위해 LIMIT 키워드를 사용합니다. 이는 매우 간단하고 직관적인 방식입니다.

기본 LIMIT 사용 예제

SELECT * FROM testTable WHERE style='angle' LIMIT 10

위 쿼리는 testTable에서 style이 'angle'인 행 중 상위 10개를 반환합니다.

OFFSET과 LIMIT 사용 예제

SELECT * FROM userTable WHERE sex='male' LIMIT 0, 20

위 쿼리는 userTable에서 sex가 'male'인 행 중 처음 20개를 반환합니다.

SELECT no FROM userTable WHERE gender='male' LIMIT 10, 20

위 쿼리는 11번째 행부터 20개의 행을 반환합니다.

큐브리드에서의 결과 제한: inst_num, groupby_num, orderby_num 함수 활용

큐브리드에서는 결과를 제한하기 위해 inst_num, groupby_num, orderby_num 등의 함수를 제공합니다. 이는 매우 유연하고 다양한 옵션을 제공합니다.

inst_num() 사용 예제

inst_num()은 ROWNUM과 유사하게, WHERE 절의 검색 조건을 만족하는 결과 튜플에 적용됩니다.

SELECT inst_num(), a, b FROM tbl WHERE a > 0 AND inst_num() BETWEEN 2 AND 3;

위 쿼리는 a가 0보다 큰 행 중에서 inst_num()이 2와 3 사이인 행을 반환합니다.

groupby_num() 사용 예제

groupby_num()은 GROUP BY 절이 있는 경우에 그룹핑된 결과에 적용됩니다.

SELECT groupby_num(), a, count(*) FROM tbl GROUP BY a HAVING groupby_num() BETWEEN 2 AND 3;

위 쿼리는 그룹핑된 결과 중 groupby_num()이 2와 3 사이인 행을 반환합니다.

orderby_num() 사용 예제

orderby_num()은 ORDER BY 절의 결과에 적용됩니다.

SELECT orderby_num(), a, b FROM tbl ORDER BY a FOR orderby_num() BETWEEN 2 AND 3;

위 쿼리는 정렬된 결과 중 orderby_num()이 2와 3 사이인 행을 반환합니다.

결론

각 데이터베이스 시스템마다 결과를 제한하는 방법이 다릅니다. MSSQL에서는 TOP, Oracle에서는 ROWNUM, MySQL에서는 LIMIT, 큐브리드에서는 inst_num, groupby_num, orderby_num을 사용합니다. 이들 방법을 잘 이해하고 활용하면, 데이터베이스 성능을 최적화하고, 효율적인 데이터 관리를 할 수 있습니다.