본문 바로가기
IT/SQL 기초강좌 (PostgreSQL)

8강 SQL이 뭐지? PostgreSQL LIMIT와 FETCH

by DoitSQL 2022. 12. 14.
728x90

PostgreSQL

SQL이 뭐지? 8강 시작합니다.

 

이번 강의에서는

▶ LIMIT clause

▶ FETCH clause

에 대해서 알아보겠습니다.


1. PostgreSQL LIMIT clause

● 기본 구문 ●

PostgreSQL LIMIT는 쿼리에서 반환되는 행 수를 제한하는 SELECT 문의 선택적 절입니다.

 

SELECT select_list

  FROM table_name

ORDER BY sort_expression

LIMIT row_count;

 

SQL문은 쿼리에 의해 생성된 row_count 행을 반환합니다.

row_count가 0이면 쿼리는 빈 집합을 반환합니다.

row_count가 NULL인 경우 쿼리에 LIMIT 절이 없는 것과 동일한 결과 집합이 반환됩니다.

row_count는 0 이상의 숫자를 SET 할 수 있습니다.


● 기본 구문 ●

 

row_count 행을 반환하기 전에 여러 행을 건너뛰려는 경우

LIMIT 절 뒤에  OFFSET 절을 사용합니다.

 

SELECT select_list

  FROM table_name

LIMIT row_count OFFSET row_to_skip;

 

SQL문은 쿼리에 의해 생성된 row_count 행을 반환하기 전에 먼저 row_to_skip 행을 건너뜁니다.

row_to_skip이 0이면, SQL문은 OFFSET 절이 없는 것처럼 작동합니다.

 

테이블은 지정되지 않은 순서로 행을 저장할 수 있으므로 LIMIT 절을 사용할 때는

항상 ORDER BY 절을 사용하여 행 순서를 제어해야 합니다.

ORDER BY 절을 사용하지 않을 경우 지정되지 않은 행 순서로 결과 집합을 얻을 수 있습니다.

 


♥ 실습 1 ♥

LIMIT 절을 사용하여 film_id별로 정렬된 처음 5개의 필름을 가져옵니다.

 

SELECT 

       film_id
     , title
     , release_year
  FROM 

       film
ORDER BY

       film_id
LIMIT  5;

 

 


♥ 실습 2 ♥

film_id에 의해 주문된 네 번째 필름에서 시작하는 4개의 필름을 검색하려면

다음과 같이 LIMIT 절과 OFFSET 절을 모두 사용합니다.

 

SELECT

       film_id

     , title

     , release_year

  FROM

       film

ORDER BY

       film_id

LIMIT 4 OFFSET 3;


♥ 실습 3 ♥

일반적으로 LIMIT 절을 사용하여 표에서 값이 가장 높거나 낮은 행을 선택하는 경우가 많습니다.
예를 들어 대여료가 가장 비싼 상위 10개의 영화를 가져오려면 대여료를 내림차순으로 영화를 정렬하고 

LIMIT 절을 사용하여 처음 10개의 영화를 가져옵니다. 다음 쿼리는 아이디어를 보여줍니다.

 

SELECT

       film_id

     , title

     , rental_rate

  FROM

       film

ORDER BY

       rental_rate DESC

LIMIT 10;


2. PostgreSQL FETCH clause

쿼리에서 반환되는 행 수를 제한하기 위해 LIMIT 절을 사용하는 경우가 많습니다. 

LIMIT 절은 MySQL, H2 및 HSQLDB와 같은 많은 관계형 데이터베이스 관리 시스템에서 널리 사용되지만 

LIMIT 절은 SQL 표준이 아닙니다.

SQL 표준을 준수하려면,  FETCH 절을 사용하여야 합니다.

PostgreSQL은  FETCH 절을 지원하여 쿼리에서 반환된 여러 행을 검색합니다.

 

● 기본 구문 ●

다음은 Postgre의 구문을 보여줍니다.SQL FETCH 절입니다.

 

OFFSET start { ROW | ROWS }

FETCH { FIRST | NEXT } [ row_count ] { ROW | ROWS } ONLY

 

 이 구문에서는 다음을 수행합니다.

 

ROWROWS의 동의어이고 FIRSTNEXT의 동의어입니다.

따라서 이들을 서로 교환하여 사용할 수 있습니다.

시작은 0 또는 양수여야 하는 정수입니다.

OFFSET 절을 지정하지 않으면 기본적으로 0이 됩니다.

시작이 결과 집합의 행 수보다 클 경우에는 행이 반환되지 않습니다.

row_count1 이상입니다. 명시적으로 지정하지 않으면 기본적으로 row_count 값은 1입니다.

테이블에 저장된 행의 순서가 지정되지 않았기 때문에 반환된 결과 집합의 행 순서를 일관되게 하려면 항상 ORDER BY 절과 함께 FETCH 절을 사용해야 합니다.

 

ANSI 표준은 OFFSET 절이 FETCH 절 앞에 와야 합니다.

그러나 OFFSET FETCH 절은 PostgreSQL에서는 임의의 순서로 나타날 수 있습니다.


● FETCH vs. LIMIT ●

FETCH 절은 LIMIT 절과 기능적으로 동일합니다.

응용 프로그램을 다른 데이터베이스 시스템과 호환되도록 하려면 FETCH 절을 사용해야 합니다.

FETCH 절은 표준 SQL을 따르기 때문입니다.

 

※ SQL 표준에 대해서는 별도로 포스팅할 예정입니다.


♥ 실습 1 ♥

다음 쿼리는 FETCH 절을 사용하여 제목별로 정렬된 첫 번째 필름을 오름차순으로 선택합니다.

FETCH FIRST ROW ONLY,와 FETCH FIRST 1 ROW ONLY 같은 결과를 보여줍니다.

 

SELECT

       film_id

     , title

  FROM

       film

ORDER BY

       title

FETCH FIRST ROW ONLY;


♥ 실습 2 ♥

다음 쿼리는 FETCH 절을 사용하여 제목별로 정렬된 처음 5개의 필름을 선택합니다.

 

SELECT
       film_id

     , title
  FROM
       film
ORDER BY
       title 
FETCH FIRST 5 ROW ONLY;

 


♥ 실습 3 ♥

다음 쿼리는 제목별로 정렬된 처음 5개의 영화 다음 5개의 영화를 반환합니다.

 

SELECT
       film_id

     , title
  FROM
       film
ORDER BY
       title 
OFFSET 5 ROWS 
FETCH FIRST 5 ROW ONLY; 


지금까지  PostgreSQL의 FETCH와 LIMIT에 대해서 공부했습니다.

다른 테이블로 쿼리 많이 연습해 보시고 익숙해 지시기 바랍니다.

 

다음 강의에서 뵙겠습니다.

 

본 강의는 PostgreSQL Tutorial을 참조합니다.

 

PostgreSQL Tutorial - Learn PostgreSQL from Scratch

Welcome to the PostgreSQLTutorial.com website! This PostgreSQL tutorial helps you understand PostgreSQL quickly. You’ll master PostgreSQL very fast through many practical examples and apply the knowledge in developing applications using PostgreSQL. If yo

www.postgresqltutorial.com


728x90

댓글