관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

SQL 고급 문법 5 - SQL 프로그래밍 1 : IF 문과 CASE 문 본문

알고리즘 및 자료 관리/SQL

SQL 고급 문법 5 - SQL 프로그래밍 1 : IF 문과 CASE 문

huenuri 2024. 10. 21. 10:52

지난번에 스토어드 프로시저를 조금 다루어보았는데 이번 단원에서는 좀 더 깊이 있게 학습하게 된다.

 

SQL은 앞에서 배운 것처럼 SELECT, INSERT, UPDATE, DELETE 등을 사용한다. 그렇기에 C, 자바, 파이썬과 같은 프로그래밍 언어와는 많이 달라 보인다. 하지만 필요하다면 SQL만으로도 멋진 프로그램을 만들 수 있다.

 

시작하기 전에

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

스토어드 프로시저는 다음과 같은 구조를 갖는다.


 

 

 

 

IF 문

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

 

IF 문의 기본 형식

IF 문은 조건식이 참이라면 'SQL문장들'을 실행하고, 그렇지 않으면 그냥 넘어간다.

 

 

SQL문장들이 한 문장이라면 그 문장만 써도 되지만, 두 문장 이상이 처리되어야 할 때는 BEGIN~END로 묶어줘야 한다. 처음에는 습관적으로 BEGIN~END로 묶어주는 것을 권장한다.

 

 

 

처음에는 프로시저가 존재하지 않은 경고가 떠서 market_db를 use로 해주고 몇 가지 코드를 더 실행해주었더니 이제 잘 실행이 된다. 혹시 설치의 문제인가 했는데 그건 아니었다.

이렇게 조건문으로 SQL 문장을 실행할 수 있다는 것을 보여주는 예시이다.

 

다른 프로그래밍 언어에서는 같다는 의미로 ==을 사용하지만 SQL은 =를 사용한다. 그리고 SELECT 뒤에 문자가 나오면 그냥 화면에 출력해 준다. print()와 비슷한 기능을 하는 것이다.


 

 

 

 

IF ~ ELSE 문

IF ~ ELSE 문은 조건에 따라 다른 부분을 수행한다. 조건식이 참이라면 'SQL문장들1'을 실행하고, 그렇지 않으면 'SQL문장들2'를 실행한다.

 


 

 

 

IF 문의 활용

기존 테이블과 함께 IF 문을 활용해보겠다. 아이디가 APN(에어핑크)인 회원의 데뷔 일자가 5년이 넘었는지 확인해 보고 5년이 넘었으면 축하 메시지를 출력해 본다.

 

 

 

 

날짜 관련 함수

MySQL은 날짜와 관련된 함수를 여러 개 제공해 준다. 그중 조금 전에 사용한 예제에서 사용한 함수에 대해 살펴보겠다.

  • CURRENT_DATE() : 오늘 날짜를 알려준다.
  • CURRENT_TIMESTAMP() : 오늘 날짜와 시간을 함께 알려준다.
  • DATEDIFF(날짜1, 날짜2) : 날짜2로부터 날짜1까지 일수로 몇일인지 알려준다.


 

 

 

 

CASE 문

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

 

CASE 문의 기본 형식

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

 

 

CASE와 END CASE 사이에는 여러 조건을 넣을 수 있다. WHEN 다음에 조건이 나오는데, 조건이 여러 개라면 WHEN을 여러 번 반복한다. 그리고 모든 조건에 해당하지 않으면 마지막에 ELSE 부분을 수행한다.

 

 

시험 점수와 학점을 예로 들어보자. 학점은 A~F로 5가지 경우에 따라 달라지므로 CASE를 사용한다.

 


 

 

 

CASE 문의 활용

 

인터넷 마켓 데이터베이스의 회원들은 문건을 구매한다. 회원들의 총구매액을 계산해서 회원의 등급을 다음과 같이 4단계로 나누려고 한다.

 

 

단계별로 코드를 작성해서 실행해 보겠다. 먼저 구매 테이블(buy)에서 회원별로 총구매액을 구해본다. GROUP BY를 이용해서 다음과 같이 만들 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

주의할 점은 구매 테이블에는 4명만 구매했으므로, 나머지 5명에 대한 아이디 등의 정보가 없다. 그렇기에 SELECT에서 회원 테이블의 아이디인 M.mem_id를 조회하고 GROUP BY도 M.mem_id로 변경했다.

 

 

 

 

새로운 회원등급 열이 추가되고, 총구매액에 따라 회원이 분류되었다.

 


 

 

 

학습을 마치고

SQL도 프로그래밍 언어처럼 조건문과 반복문을 사용하여 사용할 수 있으니 편리한 것 같다. 이 단원 또한 분량이 많아서 WHILE 문부터는 다음 포스트에 기록해 보겠다.

역시 교실에서 하니 사람들이 너무 떠들어서 시끄러워 집중을 할 수가 없지만 그래도 음악이라도 크게 틀어놓고 공부를 하는 중이다. 이제 2시간만 더 하면 아침 공부가 끝난다.