Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 저장 프로시저와 LIMIT으로 특정 개수의 레코드만 조회하는 방법

MySQL에서 저장 프로시저(Stored Procedure)를 활용하면 반복적으로 사용하는 쿼리 로직을 데이터베이스 안에 미리 정의해 두고, 필요할 때마다 간단하게 호출할 수 있습니다. 이번 글에서는 테이블을 생성하고 데이터를 삽입한 뒤, LIMIT 절을 이용해 지정한 개수만큼의 레코드만 반환하는 저장 프로시저를 만드는 과정을 단계별로 살펴보겠습니다.

1단계: 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다. 클라이언트 ID와 이름을 저장하는 간단한 구조입니다.

mysql> create table DemoTable1368
    -> (
    -> ClientId int,
    -> ClientName varchar(20)
    -> );
Query OK, 0 rows affected (0.58 sec)

2단계: 샘플 데이터 삽입하기

INSERT 명령어를 사용해 여러 개의 레코드를 테이블에 추가합니다.

mysql> insert into DemoTable1368 values(101,'Adam');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1368 values(102,'Bob');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1368 values(103,'John');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1368 values(104,'Sam');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1368 values(105,'Mike');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1368 values(106,'Carol');
Query OK, 1 row affected (0.11 sec)

3단계: 전체 레코드 확인하기

SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1368;

실행 결과는 다음과 같습니다.

+----------+------------+
| ClientId | ClientName |
+----------+------------+
|      101 | Adam       |
|      102 | Bob        |
|      103 | John       |
|      104 | Sam        |
|      105 | Mike       |
|      106 | Carol      |
+----------+------------+
6 rows in set (0.00 sec)

현재 총 6개의 레코드가 저장되어 있는 것을 확인할 수 있습니다.

4단계: LIMIT을 적용한 저장 프로시저 생성하기

이제 핵심 단계입니다. LIMIT 절을 사용해 표시할 레코드 수를 제한하는 저장 프로시저를 생성합니다. 프로시저는 입력 매개변수(IN limitValue int)를 받아, 해당 값만큼의 레코드만 반환하도록 작성했습니다.

mysql> DELIMITER //
mysql> CREATE PROCEDURE limit_Demo(IN limitValue int)
    -> BEGIN
    -> DECLARE limValue int;
    -> SET limValue = limitValue;
    -> SELECT * FROM DemoTable1368 LIMIT limValue;
    -> END
    -> //
Query OK, 0 rows affected (0.17 sec)
mysql> DELIMITER ;

주요 포인트:

  • DELIMITER //: 저장 프로시저 내부의 세미콜론(;)이 일반 SQL 문 종료 기호로 해석되지 않도록 구분자를 임시로 변경합니다.
  • DECLARE limValue int;: 프로시저 내부에서 사용할 지역 변수를 선언합니다.
  • LIMIT limValue: 변수에 담긴 값만큼 결과 행 수를 제한합니다.
  • 작업이 끝나면 DELIMITER ;로 원래 구분자를 복원해야 합니다.

5단계: 저장 프로시저 호출하기

CALL 명령어로 저장 프로시저를 실행합니다. 여기서는 상위 3개의 레코드만 조회하도록 값 3을 전달해 보겠습니다.

mysql> CALL limit_Demo(3);

실행 결과는 다음과 같습니다.

+----------+------------+
| ClientId | ClientName |
+----------+------------+
|      101 | Adam       |
|      102 | Bob        |
|      103 | John       |
+----------+------------+
3 rows in set (0.00 sec)
Query OK, 0 rows affected (0.03 sec)

전체 6개의 레코드 중 처음 3개만 정상적으로 출력된 것을 확인할 수 있습니다. 호출 시 전달하는 숫자를 바꾸면(CALL limit_Demo(5); 등) 원하는 개수만큼 유연하게 결과를 조절할 수 있습니다.

정리

이처럼 MySQL의 저장 프로시저와 LIMIT 절을 함께 사용하면, 페이지네이션이나 목록 미리보기처럼 결과 개수를 동적으로 제어해야 하는 상황에서 매우 유용합니다. 매개변수 하나만 바꿔 재사용할 수 있으므로 코드 중복도 줄일 수 있습니다. 실무에서는 ORDER BY 절과 함께 사용해 어떤 기준으로 상위 N개를 가져올지 명확히 지정하는 것이 좋습니다.