본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

MySQL PROCEDURE — WHILE 반복 누적합 완전 정리

by 왕진 2026. 6. 29.
반응형

 

 

MySQL 실습 정리

PROCEDURE WHILE

반복문으로 1부터 100까지 누적합을 계산합니다.

1 핵심 개념

WHILE은 조건이 참인 동안 같은 SQL 블록을 반복한다. 반복 변수 증가를 빠뜨리면 무한 반복이 되므로 SET i = i + 1 같은 종료 방향 코드가 핵심이다.

이 글은 짧은 실습 코드를 그대로 외우는 것보다, 각 줄이 왜 필요한지와 어디에서 오류가 자주 나는지를 함께 정리하는 데 초점을 둔다.

SQL 문법은 실행 순서와 블록 종료 기호가 중요하다. 특히 저장 프로시저는 구분자, 변수 선언 위치, END 문을 같이 확인해야 한다.
2 원본 예제 코드
DROP PROCEDURE IF EXISTS whileProc; DELIMITER $$ CREATE PROCEDURE whileProc() BEGIN DECLARE i INT; DECLARE hap INT; SET i = 1; SET hap = 0; WHILE (i <= 100) DO SET hap = hap + i; SET i = i + 1; END WHILE; SELECT hap; END $$ DELIMITER ; CALL whileProc();
3 줄별 포인트
문법 의미 확인 위치
초기값 i는 1, hap은 0에서 시작한다. 예제 코드에서 직접 확인
반복 조건 i가 100 이하인 동안 반복한다. 예제 코드에서 직접 확인
누적 hap에 현재 i를 더해 다시 hap에 저장한다. 예제 코드에서 직접 확인
증가식 i를 1씩 증가시켜 언젠가 조건이 거짓이 되게 한다. 예제 코드에서 직접 확인
END WHILE 반복 블록은 END WHILE로 닫는다. 예제 코드에서 직접 확인

 

반응형

 

4 실행 흐름
1
원본 구조 확인테이블, 컬럼, 기존 프로시저 이름을 먼저 확인한다.
2
작은 SQL로 검증완성문을 실행하기 전 SELECT 한두 개로 중간 결과를 확인한다.
3
구분자와 블록 닫기DELIMITER, END IF, END WHILE, END 문을 빠뜨리지 않았는지 본다.
4
실행 결과 비교예상 행 수, NULL, 출력 문자열을 기준으로 정상 여부를 판단한다.
5
재실행 가능하게 정리DROP IF EXISTS나 명확한 WHERE 조건을 넣어 반복 실행 오류를 줄인다.
5 용어 카드
PROCEDURE서버에 저장해 CALL로 실행하는 SQL 블록
DELIMITER프로시저 작성 중 임시로 바꾸는 문장 종료 기호
DECLARE프로시저 내부 지역 변수를 선언하는 명령
SET변수에 값을 대입하는 명령
CALL저장 프로시저를 실행하는 명령
JOIN여러 테이블의 행을 조건에 따라 연결하는 문법
NULL값이 없음을 나타내는 특별한 상태
COUNT(*)조건에 맞는 결과 행 수를 세는 집계 함수
6 결과 해석

결과를 볼 때는 출력값만 맞는지 보지 말고, 왜 그 행만 남았는지 또는 왜 그 값이 계산되었는지를 역으로 설명할 수 있어야 한다.

확인 대상 정상 신호 의심할 부분
프로시저 생성 Query OK 또는 생성 성공 DELIMITER, END, 변수 선언 위치
CALL 실행 SELECT 결과가 출력됨 프로시저 이름, 권한, 내부 문법
JOIN 결과 조건에 맞는 행만 출력 ON 조건, 별칭, WHERE 위치
집합 결과 컬럼 수가 맞고 세로로 합쳐짐 UNION 대상 컬럼 개수와 타입
행 개수 예상한 범위의 COUNT CROSS JOIN으로 인한 곱셈 증가
7 자주 하는 실수
실수 증상 해결
DELIMITER 복구 누락 이후 SQL이 계속 $$ 기준으로 해석된다. DELIMITER ; 로 되돌린다.
DECLARE 위치 오류 프로시저 생성에서 문법 오류가 난다. BEGIN 바로 다음에 변수 선언을 모은다.
조건 순서 오류 ELSEIF 결과가 의도와 다르게 나온다. 넓은 조건보다 구체적인 조건을 먼저 둔다.
별칭 생략 같은 테이블/컬럼을 구분하기 어렵다. A, B처럼 역할별 별칭을 붙인다.
대량 CROSS JOIN 결과 행이 폭증한다. COUNT로 규모를 먼저 확인한다.
8 실전 변형

예제는 고정값으로 작성되어 있지만 실무에서는 매개변수, 조건, 출력 컬럼을 바꿔 재사용한다. 먼저 상수로 동작을 확인한 뒤 필요한 값을 파라미터로 옮기면 디버깅이 쉽다.

-- 예제 검증 순서 -- 1. SELECT 단독 실행 -- 2. 변수에 고정값 대입 -- 3. IF 또는 JOIN 조건 확인 -- 4. PROCEDURE로 감싸기 -- 5. CALL로 반복 실행
9 빠른 검산 질문
질문 확인할 내용
이 SQL은 행을 줄이는가 늘리는가? WHERE, INNER JOIN은 줄이고 CROSS JOIN은 늘린다.
블록을 모두 닫았는가? END IF, END WHILE, END와 DELIMITER를 확인한다.
변수와 컬럼 이름이 충돌하지 않는가? 필요하면 별칭과 명확한 변수명을 쓴다.
반복 실행해도 같은 결과인가? DROP IF EXISTS 또는 안전한 조건을 넣는다.
결과가 비어도 정상일 수 있는가? IN, NOT IN, JOIN 조건을 따로 테스트한다.
10 학습 메모

프로시저와 조인, 집합 연산은 모두 작은 문법처럼 보이지만 오류가 나면 원인을 찾기 어렵다. 그래서 완성 SQL을 한 번에 실행하기보다 블록별로 나누어 검증하는 습관이 중요하다.

특히 프로시저는 서버에 저장되는 객체이므로 이름 충돌, 구분자 복구, 권한 문제까지 함께 생각해야 한다. JOIN과 UNION은 결과 행 수와 컬럼 의미가 맞는지 확인하는 것이 핵심이다.

11 디버깅 순서
1
문법 단위로 자르기프로시저 전체를 보기 전에 SELECT, JOIN, 조건식을 따로 실행한다.
2
입력값 고정변수나 조건값을 임시 상수로 두고 결과가 예측 가능한지 확인한다.
3
결과 행 수 확인COUNT(*)로 행이 줄었는지 늘었는지 먼저 판단한다.
4
NULL 확인조건식에서 NULL이 섞이면 IN, NOT IN, 비교 연산 결과가 달라질 수 있다.
5
완성문 실행마지막에 전체 문장을 실행하고 예상 결과와 비교한다.
12 문법 비교표
문법 주요 역할 실무에서 보는 지점
IF / ELSEIF 조건에 따라 다른 명령 실행 조건 순서와 ELSE 처리
WHILE 조건이 참인 동안 반복 초기값, 증가식, 종료 조건
INNER JOIN 매칭되는 행만 연결 ON 조건 누락 여부
CROSS JOIN 모든 조합 생성 결과 행 수 폭증 여부
UNION ALL 결과를 세로로 합침 컬럼 개수와 의미 일치
ALTER CHANGE 컬럼명과 타입 변경 기존 타입 재기입 여부
13 테스트 데이터 관점

SQL 예제는 데이터가 어떤 모양인지에 따라 결과가 크게 달라진다. 같은 문법이라도 NULL이 있는지, 중복이 있는지, 관계가 1:1인지 1:N인지에 따라 해석이 달라진다.

데이터 상태 영향 확인 쿼리
중복 행 존재 JOIN 또는 UNION ALL 결과가 늘어난다 GROUP BY 후 COUNT(*)
NULL 존재 NOT IN 결과가 예상과 달라질 수 있다 WHERE 컬럼 IS NULL
관계 누락 INNER JOIN 결과에서 행이 사라진다 LEFT JOIN으로 비교
오타 컬럼명 ALTER나 SELECT가 실패한다 DESC 테이블명
대량 테이블 CROSS JOIN이 매우 느려질 수 있다 각 테이블 COUNT(*)
14 암기보다 중요한 기준

이 묶음의 문법은 키워드 암기보다 “어떤 행이 남고 어떤 행이 사라지는가”를 설명하는 능력이 더 중요하다. 프로시저는 흐름을 저장하고, JOIN은 관계를 펼치며, UNION은 결과 집합을 합친다.

문제가 생기면 완성된 긴 SQL에서 바로 원인을 찾으려 하지 말고, 테이블 단독 조회와 작은 조건식부터 다시 확인한다. 이 방식이 가장 빠르고 재현 가능하다.

15 최종 체크리스트
체크 통과 기준
제목 유지 기존 HTML title을 그대로 사용한다.
코드 블록 원본 md의 핵심 SQL을 포함한다.
용어 설명 초보자가 헷갈리는 키워드를 따로 설명한다.
실수 정리 문법 오류와 결과 오류를 구분한다.
검산 질문 실행 전후 확인할 질문을 남긴다.
16 한 줄 복습
상황 바로 떠올릴 문법 주의
조건 분기 IF, ELSEIF, ELSE END IF 필수
반복 처리 WHILE 조건 DO 증가식 필수
객체 재생성 DROP PROCEDURE IF EXISTS 기존 객체명 확인
결과 합치기 UNION ALL 컬럼 수 일치
컬럼명 수정 ALTER TABLE CHANGE 타입까지 다시 작성
행 수 확인 COUNT(*) JOIN 전후 비교
17 마무리 판단 기준

이 예제는 실행 결과가 맞는지만 보는 것이 아니라, 결과가 나온 이유를 설명할 수 있을 때 정리된 것으로 본다. 조건, 반복, 조인, 집합, 구조 변경 중 어느 범주인지 먼저 분류하면 복습이 쉬워진다.

짧은 SQL이라도 주석 없이 다시 봤을 때 목적이 보이도록 별칭, 출력명, 조건식을 명확하게 적는 습관이 중요하다.

핵심 요약

주제PROCEDURE WHILE
핵심반복문으로 1부터 100까지 누적합을 계산합니다.
검산작은 SELECT로 중간 결과를 확인한 뒤 완성 SQL을 실행한다.
주의구분자, 별칭, 조건 위치, 결과 행 수를 함께 점검한다.
활용반복 실행 가능한 실습 코드로 정리해 두면 이후 예제의 기준이 된다.

Tags

#MySQL #SQL #PROCEDURE #JOIN #UNION #COUNT #ALTER #티스토리
티스토리 태그 입력용
MySQL, SQL, PROCEDURE, JOIN, UNION, COUNT, ALTER, 데이터베이스, DB, 티스토리
반응형

댓글