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 | |
|---|---|
| BBK | 1920 |
| KBS | 1210 |
| JYP | 200 |
| EJW | 95 |
| SSK | 75 |
구매내역의 회원(+ 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;
실행 결과
| userID | name | |
|---|---|---|
| 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;
실행 결과
| userID | name | |
|---|---|---|
| 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;
실행 결과
| userID | name | 고객등급 | |
|---|---|---|---|
| BBK | 바비킴 | 1920 | 최우수고객 |
| KBS | 김범수 | 1210 | 우수고객 |
| JYP | 조용필 | 200 | 일반고객 |
| EJW | 은지원 | 95 | 일반고객 |
| SSK | 성시경 | 75 | 일반 고객 |
| YJS | 윤종신 | --NULL-- | 유령고객 |
| JKW | 조관우 | --NULL-- | 유령고객 |
| KKH | 김경호 | --NULL-- | 유령고객 |
| LJB | 임재범 | --NULL-- | 유령고객 |
| LJB | 이승기 | --NULL-- | 유령고객 |