본문으로 건너뛰기

SQL 프로그래밍(1)

IF ... ELSE

조건문

참과 거짓에 의해서 실행해야 할 구문이 다를 때 사용함

IF <부울 표현식>
BEGIN -- '{' 역할
SQL문장들1...
END -- '}' 역할
ELSE
BEGIN
SQL문장들2...
END

예제 코드

DECLARE @var1 INT -- @var1에 변수 선언
SET @var1 = 100 -- 변수에 값 대입

IF @var1 = 100 -- 만약 @var1이 100이라면,
BEGIN
PRINT '@var1이 100이다'
END
ELSE
BEGIN
PRINT '@var1dl 100이 아니다'
END
실행 결과
@var1이 100이다


CASE

여러 개의 경우에 따라서 서로 다른 구문을 수행할 경우 IF 문보다 간결하게 사용할 수 있음

예제 코드

DECLARE point INT, @credit NCHAR(1)
SET @point = 100

SET @credit =
CASE
WHEN (@point >= 90) THEN 'A'
WHEN (@point >= 80) THEN 'B'
WHEN (@point >= 70) THEN 'C'
WHEN (@point >= 60) THEN 'D'
ELSE 'F'
END

PRINT '취득점수 ==>' + CAST(@point AS NCHAR(3)) -- 숫자를 문자로 변환
PRINT '학점 ==>' + @credit
실행 결과
취득점수 ==> 100
학점 ==> A


활용

구매내역의 회원 별 총액

USE sqlDB;
SELECT userID, SUM(price * amount)
FROM buyTBL
GROUP BY userID
ORDER BY SUM(price * amount) DESC;
실행 결과
userID
BBK1920
KBS1210
JYP200
EJW95
SSK75

구매내역의 회원(+ name) 별 총액

USE sqlDB;
SELECT B.userID, U.name, SUM(B.price * B.amount)
FROM buyTBL B
INNER JOIN userTBL U
ON B.userID = U.userID
GROUP BY B.userID, U.name
ORDER BY SUM(B.price * B.amount) DESC;
실행 결과
userIDname
BBK바비킴1920
KBS김범수1210
JYP조용필200
EJW은지원95
SSK성시경75

구매내역의 회원 별 총액 및 회원정보

USE sqlDB;
SELECT U.userID, U.name, SUM(B.price * B.amount)
FROM buyTBL B
RIGHT OUTER JOIN userTBL U
ON B.userID = U.userID
GROUP BY U.userID, U.name
ORDER BY SUM(B.price * B.amount) DESC;
실행 결과
userIDname
BBK바비킴1920
KBS김범수1210
JYP조용필200
EJW은지원95
SSK성시경75
YJS윤종신--NULL--
JKW조관우--NULL--
KKH김경호--NULL--
LJB임재범--NULL--
LJB이승기--NULL--

구매내역의 회원 별 등급 처리

USE sqlDB;
SELECT U.userID, U.name, SUM(B.price * B.amount)
CASE
WHEN ( SUM(B.price * B.amount ) >= 1500) THEN '최우수고객'
WHEN ( SUM(B.price * B.amount ) >= 1000) THEN '우수고객'
WHEN ( SUM(B.price * B.amount ) >= 1) THEN '일반고객'
ELSE '유령고객'
END AS [고객등급]
FROM buyTBL B
RIGHT OUTER JOIN userTBL U
ON B.userID = U.userID
GROUP BY U.userID, U.name
ORDER BY SUM(B.price * B.amount) DESC;
실행 결과
userIDname고객등급
BBK바비킴1920최우수고객
KBS김범수1210우수고객
JYP조용필200일반고객
EJW은지원95일반고객
SSK성시경75일반고객
YJS윤종신--NULL--유령고객
JKW조관우--NULL--유령고객
KKH김경호--NULL--유령고객
LJB임재범--NULL--유령고객
LJB이승기--NULL--유령고객