4. SQL 고급 문법 - 3. SQL 프로그래밍.

하쮸·2024년 10월 14일

SQL

목록 보기
6/6
post-thumbnail

1. SQL 프로그래밍.

  • 스토어드 프로시저MySQL에서 프로그래밍 기능이 필요할 때 사용하는 데이터베이스 개체.
    • SQL 프로그래밍은 기본적으로 스토어드 프로시저 안에 만들어야 함.

스토어드 프로시저의 구조

DELIMITER $$
CREATE PROCEDURE 스토어드 프로시저 이름()
BEGIN
	-- SQL 프로그래밍 코딩
END $$
DELIMITER ;
CALL 스토어드 프로시저 이름();
  • 스토어드 프로시저DELIMITER $$ ... END $$ 안에 작성하고 CALL로 호출.

1-1. IF문

  • IF문은 조건문으로 가장 많이 사용되는 프로그래밍 문법 중 하나.
  • 다양한 조건을 처리할 수 있음.

1-1-1. IF문의 기본 형식.

  • IF문은 조건식이 참이라면 SQL문장들을 실행, 그렇지 않으면 생략하고 넘어감.

IF문의 형식

IF <조건식> THEN
	-- SQL 문장들
END IF;
  • SQL문장들이 한 문장이라면 해당 문장만 쓰면 됨.
    • 두 문장 이상을 처리해야할 때는 BEGIN ... END로 묶어줘야 함.
  • 세미콜론(;)으로는 SQL의 끝인지, 스토어드 프로시저의 끝인지 구별할 수 없어서 $$를 사용.
    • SQL에서 같다는 의미로 =을 사용.
    • SELECT 뒤에 문자가 나오면 화면에 출력함. (프로그래밍에서 print()와 비슷한 기능)

1-1-2. IF ~ ELSE문

  • IF ~ ELSE문은 조건에 따라 다른 부분을 수행함.
    • 프로그래밍과 비슷하게 참일 경우 IF문 수행, 거짓일 경우 ELSE문 수행.

1-1-3. 참고.

  • DECLARE 예약어를 사용해서 변수를 선언할 수 있음.
    • DECLARE myNum INT;
      • myNum 변수 선언, 데이터 형식은 INT로 지정.
  • SET 예약어로 변수에 값을 대입할 수 있음.
    • SET myNum = 200;
  • SELECT문에 INTO가 붙을 경우 결과를 변수에 저장함.
    • SELECT debut_date INTO debutDate
      • 이 경우 debut_date의 값이 debutDate에 저장됨.
  • 날짜 관련 함수.
    • CURRENT_DATE() : 오늘 날짜를 알려줌.
    • CURRENT_TIMESTAMP : 오늘 날짜 및 시간을 함께 알려줌.
    • DATEDIFF(날짜1, 날짜2) : 날짜2로부터 날짜1까지 일수로 몇일인지 알려줌.

1-2. CASE문.

  • 여러 가지 조건중에서 선택해야 하는 경우도 있음.
    • 이럴 때 CASE문을 사용해서 조건을 설정할 수 있음.

1-2-1. CASE문의 기본형식.

  • IF문은 참 아니면 거짓 두 가지만 있기 때문에 2중 분기라는 용어를 사용함.
  • CASE문은 2가지 이상의 여러 가지 경우일 때 처리가 가능하므로 다중 분기라고 부름.

CASE문의 형식

CASE
WHEN 조건1 THEN
	SQL 문장들 1
WHEN 조건2 THEN
	SQL 문장들 2
WHEN 조건3 THEN
	SQL 문장들 3
ELSE
	SQL 문장들 4
END CASE;
  • SELECT절에서 FROM절 앞에 사용.
  • CASEEND CASE사이에는 여러 조건을 넣을 수 있음.
    • WHEN 다음에 조건이 나오는 데 조건이 여러개라면 WHEN을 여러 번 반복함.

1-3. WHILE문.

  • WHILE문은 필요한 만큼 계속 같은 내용을 반복할 수 있음.

1-3-1. WHILE문의 기본 형식.

  • WHILE 문은 조건식이 참인 동안에 SQL문장들을 계속 반복함.

WHILE문의 형식

WHILE <조건식> DO
	SQL 문장들
END WHILE;

1-3-2. WHILE문의 응용.

  • ITERATE[레이블] : 지정한 레이블로 가서 계속 진행.
    • 프로그래밍에서 continue와 비슷함.
  • LEAVE[레이블] : 지정한 레이블을 빠져나감. WHILE문이 종료.
    • 프로그래밍에서 break와 비슷함.
  • ITERATE는 반복문을 계속 진행하고, LEAVE는 반복문을 빠져나감.

1-4. 동적 SQL.

  • SQL문은 내용이 고정되어 있는 경우가 대부분.
    • 상황에 따라 내용 변경이 필요할 때 동적 SQL을 사용하면 변경되는 내용을 실시간으로 적용시켜 사용할 수 있음.

1-4-1. PREPARE, EXECUTE.

  • PREPARESQL문을 실행하지는 않고 미리 준비만 해놓고, EXECUTE는 준비한 SQL문을 실행함.
    • 실행 후 DEALLOCATE PREPARE로 문장을 해제해주는 것이 바람직함.
  • PREPARE, EXECUTE동적 SQL문을 만들 수 있음.

1-4-2. 동적 SQL의 활용.

  • PREPARE문에서는 ?로 향후에 입력될 값을 비워놓고, EXECUTE에서 USING으로 ?에 값을 전달할 수 있음.
    • 그러면 실시간으로 필요한 값들을 전달해서 동적으로 SQL이 실행됨.
    • Ex 출입한 내역을 테이블에 기록.
      • 출입증을 태그하는 순간의 날짜와 시간이 INSERT문으로 만들어져 입력되도록.
CREATE TABLE gate_table (id INT AUTO_INCREMENT PRIMARY KEY, entry_time DATETIME);
SET @curDate = CURRENT_TIMESTAMP();		-- <현재 날짜와 시간을 @curDate변수에 넣음.>
PREPARE myQuery FROM 'INSERT INTO gate_table VALUES(NULL, ?)';	 -- <?를 사용해서 entry_time에 입력할 값을 비워놓음.>
EXECUTE myQuery USING @curDate;		-- <USING 문으로 앞에서 준비한 @curDate 변수를 넣은 후에 실행됨.>
DEALLOCATE PREPARE myQuery;
  • 일반 SQL에서 변수는 @변수명으로 지정하는 데 별도의 선언은 없어도 됨.
    • 스토어드 프로시저에서 변수는 DECLARE로 선언한 후에 사용.
profile
Every cloud has a silver lining.

0개의 댓글