1. 표현식
- 하나이상의 값과 연산자, 함수들이 결합된 식
1) CASE WHEN THEN
- 특정 조건에 따라 값을 변경할 수 있는 수식(표현식)
- 주로 SELECT절에서 사용
( 사용 형식 )
CASE WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2
:
ELSE 값n
END
예제) 사원테이블에서 80번 부서 사원들의 급여를 조회하여 급여가
15000 이상이면 'A등급',
5000-14999 사이이면 'B 등급',
5000 미만이면 'C 등급'으로 비고에 표시하시오
( Alias는 사원번호, 사원명, 급여, 비고 )
SELECT EMPLOYEE_ID AS 사원번호,
EMP_NAME AS 사원명,
SALARY AS 급여,
CASE WHEN SALARY >= 15000 THEN 'A등급'
WHEN SALARY >= 5000 AND SALARY < 15000 THEN 'B등급'
-- SALARY BETWEEN 5000 AND 14999 THEN
ELSE 'C등급'
END AS 비고
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 80; -- 조건 숫자
2. 조건식
- 하나 이상의 표현식과 관계 연산자(논리 연산자)가 결합된 식
- 연산자는 논리연산자, 관계 연산자, 기타 연산자(IN, ANY, SOME, ALL, EXISTS, LIKE, BETWEEN)
⇒ LIKE 패턴비교연산자 될 수 있으면 안 씀
1) IN 연산자
- 주어진 값 중 비교항목이 포함되면 TRUE를 반환하는 연산자
- SOME, ANY와 같은 기능
- OR 연산자로 대치 가능 ⇒ OR 연산자보다 단순 간단
- WHERE 절에 사용
( 사용 형식 )
컬럼명 IN(값1, 값2,...)
예제) 상품 테이블에서 분류코드가 'P101', 'P201', 'P301' 중 어느 한 분류에 속한 상품정보를 출력하시오
( Alias는 상품코드, 상품명, 분류코드, 판매 가격 )
(OR 연산자 사용)
SELECT PROD_ID AS 상품코드,
PROD_NAME AS 상품명,
PROD_LGU AS 분류코드,
PROD_PRICE AS 판매가격
FROM PROD
WHERE PROD_LGU = 'P101'
OR PROD_LGU = 'P201'
OR PROD_LGU = 'P301'
ORDER BY PROD_LGU ASC; -- 컬럼명 사용
-- ORDER BY 3 ASC; -- 컬럼인덱스 사용 SELECT문에 기술되어진순서 ASC 안써줘도댐
-- ORDER BY PROD_LGU ASC, PROD_PRICE DESC ; 분류코드가 똑같은 것은 그안에서 가격이 내림차순으로 정렬한다.
(IN 연산자 사용)
SELECT PROD_ID AS 상품코드,
PROD_NAME AS 상품명,
PROD_LGU AS 분류코드,
PROD_PRICE AS 판매가격
FROM PROD
WHERE PROD_LGU IN('P101', 'P201','P301')
-- WHERE PROD_LGU NOT IN('P101', 'P201','P301') 부정은 IN앞에 NOT
ORDER BY PROD_LGU ASC;
(ANY 연산자 사용)
SELECT PROD_ID AS 상품코드,
PROD_NAME AS 상품명,
PROD_LGU AS 분류코드,
PROD_PRICE AS 판매가격
FROM PROD
WHERE PROD_LGU =ANY('P101', 'P201','P301') -- ANY와 SUM은 관계연산자가 붙는다 , IN은 관계연산자가 붙지 않는다.
-- NOT PROD_LGU =ANY ('P101', 'P201','P301') 부정은 전체부정 범위가아닌 나머지 제품들
ORDER BY PROD_LGU ASC;
(SOME 연산자 사용)
SELECT PROD_ID AS 상품코드,
PROD_NAME AS 상품명,
PROD_LGU AS 분류코드,
PROD_PRICE AS 판매가격
FROM PROD
WHERE /*NOT*/ PROD_LGU =SOME ('P101', 'P201','P301')
ORDER BY PROD_LGU ASC;
예제) 직무이력 테이블{JOB_HISTORY)에 존재하는 사원 정보를 조회하시오
( Alias는 사원번호, 사원명, 직무 코드, 급여 )
(JOIN을 이용) --공통컬럼존재 FROM절 테이블두개 --조건은 적어도 테이블-1개
SELECT DISTINCT A.EMPLOYEE_ID AS 사원번호, --중복된것을 없애기 위해
A.EMP_NAME AS 사원명,
A.JOB_ID AS 직무코드,
A.SALARY AS 급여
FROM EMPLOYEES A, JOB_HISTORY B --별칭사용
WHERE A.EMPLOYEE_ID = B.EMPLOYEE_ID; --별칭을이용 소속추가
(IN을 이용)
SELECT EMPLOYEE_ID AS 사원번호,
EMP_NAME AS 사원명,
JOB_ID AS 직무코드,
SALARY AS 급여
FROM EMPLOYEES
WHERE EMPLOYEE_ID IN (SELECT EMPLOYEE_ID
FROM JOB_HISTORY);
(EXISTS을 이용)
SELECT A.EMPLOYEE_ID AS 사원번호,
EMP_NAME AS 사원명,
A.JOB_ID AS 직무코드,
SALARY AS 급여
FROM EMPLOYEES A
WHERE EXISTS (SELECT 1 --1은 의미없다,
FROM JOB_HISTORY B
WHERE A.EMPLOYEE_ID=B.EMPLOYEE_ID);
2._case_when_then.sql
0.00MB
'데이터베이스 > ORACLE' 카테고리의 다른 글
13. 함수 ( FUNCTION ) (0) | 2021.03.16 |
---|---|
12. 조건식 ( LIKE , BETWEEN ) (0) | 2021.03.16 |
10. 연산자 ( OPERATION ) (0) | 2021.03.16 |
9. SELECT (0) | 2021.03.15 |
8. 기타 자료형 ( RAW, BFILE, BLOB ) (0) | 2021.03.15 |