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

MySQL 저장 프로시저로 전체 테이블 조회하는 방법 (단계별 예제)

MySQL에서는 저장 프로시저(Stored Procedure) 내부에 SELECT * FROM 테이블명 쿼리를 작성하여 테이블의 전체 데이터를 간편하게 조회할 수 있습니다. 이 글에서는 테이블 생성부터 저장 프로시저 작성과 호출까지, 실제 실행 결과와 함께 단계별로 살펴보겠습니다.

1. 예제용 테이블 생성

먼저 학생 정보를 담을 테이블을 만들어 보겠습니다. 아래 쿼리는 자동 증가(AUTO_INCREMENT)되는 기본키와 학생 이름 컬럼으로 구성되어 있습니다.

mysql> create table DemoTable654 (
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentFirstName varchar(100)
);
Query OK, 0 rows affected (0.70 sec)

2. 샘플 데이터 삽입

INSERT 문을 사용해 테스트용 레코드를 여러 개 추가합니다.

mysql> insert into DemoTable654(StudentFirstName) values('John');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable654(StudentFirstName) values('Sam');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable654(StudentFirstName) values('Mike');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable654(StudentFirstName) values('Robert');
Query OK, 1 row affected (0.12 sec)

삽입된 데이터 확인

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

mysql> select *from DemoTable654;

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

+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
|         1 | John             |
|         2 | Sam              |
|         3 | Mike             |
|         4 | Robert           |
+-----------+------------------+
4 rows in set (0.00 sec)

3. 전체 테이블을 조회하는 저장 프로시저 생성

이제 테이블의 모든 레코드를 반환하는 저장 프로시저를 만들어 보겠습니다. 여러 SQL 문을 하나의 블록으로 묶기 위해 먼저 구분자(DELIMITER)를 //로 변경한 후, BEGIN ... END 블록 안에 SELECT 문을 작성합니다.

mysql> DELIMITER //
mysql> CREATE PROCEDURE getWholeTable()
    BEGIN
    SELECT *FROM DemoTable654;
    END
    //
Query OK, 0 rows affected (0.16 sec)
mysql> DELIMITER ;

참고: 프로시저 본문 내부의 세미콜론(;)이 MySQL 클라이언트에 의해 잘못 해석되지 않도록 DELIMITER를 임시로 변경하는 것이며, 프로시저 생성이 끝나면 반드시 원래 구분자인 세미콜론으로 되돌려야 합니다.

4. 저장 프로시저 호출하기

생성된 프로시저는 CALL 명령으로 실행할 수 있습니다.

mysql> call getWholeTable();

실행하면 다음과 같이 테이블의 전체 데이터가 출력됩니다.

+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
| 1         | John             |
| 2         | Sam              |
| 3         | Mike             |
| 4         | Robert           |
+-----------+------------------+
4 rows in set (0.08 sec)
Query OK, 0 rows affected (0.13 sec)

핵심 정리

  • 저장 프로시저 안에서 SELECT *를 사용하면 해당 테이블의 전체 데이터를 그대로 반환할 수 있습니다.
  • 프로시저 본문은 BEGIN ... END 블록으로 감싸며, 충돌을 피하기 위해 DELIMITER를 변경해 주는 것이 좋습니다.
  • 완성된 프로시저는 CALL 프로시저명(); 형태로 언제든 재사용할 수 있어, 반복적인 조회 작업을 효율적으로 처리할 수 있습니다.