NULL 값
- 한 행의 특정 열에 데이터 값이 없으면 NULL이라고 한다..
- NULL 값은 알 수 없는 값으로 00 또는 공백과 다르다.
- NULL 값을 포함하는 연산의 경우 결과도 NULL이다.
- 모르는 데이터에 숫자를 더하거나 빼도 결과는 모르는 데이터인 것과 같다.
- 숫자를 0으로 나누면 오류가 발생하지만 NULL로 나누면 결과는 NULL이다.
Literal 문자열
- 열 이름 열 별칭이 아니면서 SELECT 목록에 포함된 문자, 숫자, 또는 날 짜이며 각 행이 반환될 때마다 출력된다.
- 텍스트 리터럴 문자열은 질의 결과(SQL 구문)에 포함되어 SELECT 목록의 열과 동일하게 취급된다.
- 날짜 및 문자 리터럴은 반드시 작은따옴표(' ')로묶지 않는다.
Pseudo Column 의사 열
: QUERY 가 가능 한열
- ROWNUM을.
- ROWNUM은 각 검색된 행의 일련변호로써 , ORDER BY에 의한 정렬 이전에 부여된다.
- ROWID 는 테이블 내의 특정한 행을 유일하게 구별해 주는 값으로 데이터 타입은 ROWID이다.
✔ SELECT 컬럼 [AS] 별칭 , , ,
FROM 테이블명 별칭 , , , ;
WHERE condition(s)
- 검색 결과에 대한 제한을 둘 때 사용
- WHERE 은 FROM 절 뒤에 온다.
- 문자열과 날짜 값은 작은 따옴표로 묶어서 표시
- WHERE 절은 생략 가능하고 생략할 경우 모든 행이 검색됨
- WHERE 조건식의 결과가 TRUE 인 ROW만 선택한다.
- WHERE 절은 별칭은 사용할 수 없다.
- 테이블의 데이터를 추출하는 필터 역할은 한다.
- 조인시 테이블들을 연결하는 조건으로 사용된다.
- 산술 연산, 비교 연산, 칼럼, 숫자, 문자상수, LIKE, IN BETWEEN, IS NULL, IN NOT NULL 함수, 논리연산자, ANY, ALL
→ 조건식의 표현식
Q1) 사원테이블에서 사원의 이름이 FORD인 정보를 출력하자.
SELECT *
FROM EMP
WHERE ENAME = 'FORD'; #VALUE는 대소문자를 가린다.
Q2) 사원테이블에서 직업이 매니저인 사원의 번호, 이름, 직업 급여를 리턴하자.
SELECT EMPNO, ENAME, JOP, SAL
FROM EMP
WHERE JOB = 'MANAGER';
Q3) 사원테이블에서 급여가 3000 이상인 사원의 번호, 이름, 직업, 급여를 조회하자.
SELECT EMPNO, ENAME, JOB, SAL
FROM EMP
WHERE SAL >= 3000;
Q4)
□NOT BETWEEN 하한값(a) AND 상한 값(b)
- expr < a OR expr > b와 같다.
□ BETWEEN 하한 값(a) AND 상한 값(b)
- 두 사이의 값을 출력할 때 사용되면 조건절에 명시된 범위의 값을 리턴한다.
- expr >= a AND expr <= b와 같다.
# 사원 테이블에서 급여가 1300에서 1700 사이에 해당되는 사원의 이름, 직업, 급여 부서 번호를 출력하자.
SELECT ENAME, JOB, SAL, DEPTNO
FROM EMP
WHERE SAL BETWEEN 1300 AND 1700;
# 사원 테이블에서 급여가 1300에서 1700 사이에 해당되지 않는 사원의 이름, 직업, 급여 부서 번호를 출력하자.
SELECT ENAME, JOB, SAL, DEPTNO
FROM EMP
WHERE SAL NOT BETWEEN 1300 AND 1700;
Q5)
□ IN (여러 값 중 하나와 일치하는 값)
- 여러 값 중에 어느 하나와 일치한다.
- IN 은 = ANY와 같다.
- NOT IN 은!= ALL과 같다.
- 형태는 IN(값 1, 값 2, 값 3)이며 비교대상이 괄호 안의 값에 포함될 경우 조건을 만족하게 된다.
- IN은 비교하는 값이 하나이더라도 ( )와 같이 사용하며, 여러 형태의 데이터 타입 모두 비교 가능하다.
# 사원 테이블에서 사원번호가 7902, 7788, 7566인 사원의 사번, 이름, 급여, 입사일을 출력하자.
SELECT EMPNO, ENAME, SAL, HIREDATE
FROM EMP
WHERE EMPNO IN(7902, 7788, 7566);
Q6)
□ LIKE 연산자 (문자의 패턴이 일치하는 값)
- % : 임의의 길이 문자열(공백 문자 가능), 0개 또는 1개 이상의 문자와 대응
- _; 한 글자.
- ESCAPE : 검색할 문자에 % _ 문자를 포함할 때
# 사원의 이름 중D자로 끝나는 사원을 출력해보자.
SELECT ENAME
FROM EMP
WHERE ENAME LIKE'% D';
# 사원의 이름 중 A로 시작하는 사원을 출력해보자.
SELECT ENAME
FROM EMP
WHERE ENAME LIKE 'A%';
# 사원의 이름 중_ A (두 번째 글자가 A)인 사원
SELECT ENAME
FROM EMP
WHERE ENAME LIKE'_A%';
# 사원의 이름 중W로 시작하되 _ _ (두 칸) 건너뛰고 D로 끝나는 사원
SELECT ENAME
FROM EMP
WHERE ENAME LIKE 'W__%D';
□ 칼럼, VALUE 생성 및 삭제
# 칼럼 생성 및 삭제
CREATE TABLE TEST(NAME VARCHAR2(15));
DROP TABLE TEST;
# VALUE 생성 및 삭제
INSERT INTO TEST VALUES('22222');
DELETE FROM TEST;
□ ESCAPE
SELECT * FROM TEST WHERE NAME LIKE '%_%' 입력하게 되면 모든 행을 리턴하게 된다.
따라서 LIKE 연산자로 '%' 나 '_' 등과 같은 특수문자를 검색하기 위해 ESCAPE를 사용한다.
# 이름에 _문자가 들어있는 이름을 출력하고 싶다.
SELECT *
FROM TEST
WHERE NAME LIKE '%#_%' ESCAPE '#';
(해당 쿼리에서는 #을 사용했지만 ** , #, ! 다 사용할 수 있음)
# 두 번째 글자가 % 인 이름을 출력하고 싶다.
SELECT *
FROM TEST
WHERE NAME LIKE '%#%%' ESCAPE '#';
Q7)
□ NULL
# 사원 테이블에서 커미션이 NULL인 사원을 조회하자. (책정되지 않는)
SELECT *
FROM EMP
WHERE COMM IS NULL;
# 사원테이블에서 커미션이 책정되는 사원을 조회하자.
SELECT *
FROM EMP
WHERE COMM IS NOT NULL;
함수
단일행(문자 함수, 숫자 함수, 날짜 함수, 변환 함수, 기타 함수), 다중행
✔ 문자 함수
UPPER, LOWER, INITCAP(단어의 첫 문자는 대문자 나머지 소문자), CONCAT(결합), SUBSTR
INSTR(특정 문자열의 위치를 숫자로 리턴), LENGTH, CHR, ASCII
Q8)
□ LOWER (소문자 변환)
사원 테이블에서 JAMES의 사원번호, 성명, 직업, 부서 번호를 출력하되 모두 소문자로 출력하자.
SELECT EMPNO, LOWER(ENAME), LOWER(JOB), DEPTNO
FROM EMP
WHERE ENAME ='JAMES';
Q9)
□ INITCAP (단어의 첫 문자는 대문자 나머지 소문자)
# DEPT 테이블에서 칼럼의 첫 글자만 대문자로 변환하여 모든 정보를 출력하자.
SELECT DEPTNO, INITCAP(DNAME), INITCAP(LOC)
FROM DEPT;
Q10)
□ CONCAT (결합)
SELECT EMPNO, ENAME, CONCAT(EMPNO, ENAME) ENAME
FROM EMP
WHERE DEPTNO = 10;
Q11)
□ SUBSTR ("문자열", "시작 위치", "길이")
문자 단위로 시작 위치와 자를 길이를 지정하여 문자열을 자른다.
# 사원 테이블에서 이름의 첫 글자가 K보다 크고 Y보다 작은 사원의 정보를 출력하되 이름순으로 정렬해보자.
SELECT *
FROM EMP
WHERE SUBSTR(ENAME,1,1) > 'K' AND SUBSTR (ENAME,1,1) < 'Y'
ORDER BY ENAME;
😃 알고 가기
칼럼 폭조절 숫자
COLUMN COMM FORMAT 9999
컬럼폭 조절 문자
COLUMN ENAME FORMAT A10
□ TRIM 문자열 삭제 (LTRIM 왼쪽 삭제, RTRIM 오른쪽 삭제)
Q12)
□ PAD 문자열 채우기 (LPAD 왼쪽 채우기, RTRIM 오른쪽 채우기)
: LPAD("값", "총 문자 길이", "채움 문자")
# 부서 번호가 10번인 사원의 이름을 왼쪽으로부터 "*"로 채워서 출력하자.
SELECT ENAME, LPAD(ENAME,15, '*'), SAL, LPAD(SAL,10, '*')
FROM EMP
WHERE DEPTNO = 10;
Q13)
□ LTRIM
# EMP 테이블에서 10번 부서의 사원에 대하여 담당 업무 중 좌측에 'A'를 삭제하고
급여 중 좌측의 1을 삭제하여 출력하여라.
SELECT ENAME, JOB, LTRIM(JOB, 'A'), SAL, LTRIM(SAL,1)
FROM EMP;
Q14)
□ RTRIM
# EMP 테이블에서 10번 부서의 사원에 대하여 담당 업무 중 우측에 'T'를 삭제하고
급여 중 우측의 0을 삭제하여 출력하여라
SELECT ENAME, JOB, RTRIM(JOB, 'T'), SAL, RTRIM(SAL,0)
FROM EMP
WHERE DEPTNO = 10;
Q15)
□ REPLACE (문자열 변경)
: REPLACE ( 문자열 , "바꿀 문자열", "바뀔 문자열")
# 사원 이름에 ON문자열을 *?로 변경해서 조회
SELECT ENAME, REPLACE(ENAME, 'ON', '*?')
FROM EMP;
Q16)
□ TRANSLATE (문자열 한 글자씩 변경, 규칙성 가짐)
: TRANSLATE ( 문자열 , "바꿀 문자열", "바뀔 문자열")
# 사원 이름에 ON문자열을 *?로 변경해서 조회
SELECT ENAME, TRANSLATE(ENAME, 'ON', '*?') 결과
FROM EMP;
✔ 숫자 함수
ROUND : 반올림
TRUNK : 버림
MOD(M, N) : M을 N으로 나눈 나머지
ABS : 숫자 값을 절댓값으로
FLOOR : 해당 수보다 작거나 같은 정수 중 큰 정수 갑을 리턴 (반내림)
CEIL : 해당 수보다 크거나 같은 정수중 가장 작은 정수 값을 리턴
SIGN : 1, -1, 0 (양수, 음수, 0)
POWER(M, N) : M의 N승
Q17)
□ ROUND(반올림, 자릿수)
SELECT ROUND(456.678) RES1, ROUND(456.678,0) RES2, ROUND(456.678,2) RES3, ROUND(456.678,-2) RES4
FROM DUAL;
Q18)
□ TRUNC (버림, 자릿수)
SET NUM 7 (소수점 제대로 나오지 않을 때 입력)
SELECT TRUNC(456.678) RES1, TRUNC(456.678,0) RES2, TRUNC(456.678,2) RES3, TRUNC(456.678,-2) RES4
FROM DUAL;
✔ 날짜 데이터
CENTURY, YEAR, MONTH, DAY, HOURS, MINUTES, SECONDS = 7BYTE
기본 date format
'RR/MM/DD', 'DD-MON-RR'
RR = Y2K 고려해서 연도를 표기한 것 (00~49 : 2000년대, / 50~99:1900년대)
81/09/28
ex) 2011년 6월 7일 오전 3시 15분47초 → 07-JUN-11
CENTURY, YEAR, MONTH, DAY, HOURS, MINUTES, SECOND
20 11 06 07 3 15 47
- DATE + NUMBER : 날짜에 해당 일수를 더한 결과를 리턴, 날짜 형태로 표시
- DATE - NUMBER : 날짜에 해당 일수를 뺀 결과를 리턴, 날짜 형태로 표시
- DATE1 - DATE2 : 두 날짜 사이의 경과 일수 나타냄, 숫자로 표시
- DATE + NUMBER/24 : 날짜에 해당 시간을 더해서 리턴. 날짜 형태로 리턴
# 입사일이 81년도 9월 9일 이후에 입사한 사원을 출력해보자.
#1
SELECT ENAME, HIREDATE
FROM EMP
WHERE HIREDATE >='81/09/09';
#2
SELECT ENAME, HIREDATE
FROM EMP
WHERE HIREDATE >='81-09-09';
#3
SELECT ENAME, HIREDATE
FROM EMP
WHERE HIREDATE >='1981-09-09';
□ SYSDATE
: 7BYTE를 가지고 있지만 리턴되는 것은YY/MM/DD형식이다.
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD-HH:MM')
FROM DUAL;
□ SYSTIMESTAMP
: TIMESTAMP WITH TIME ZONE 형식의 시스템 날짜를 리턴한다.
SELECT SYSTIMESTAMP
FROM DUAL;
□ CURRENT_DATE
: 현재 SESSION의 날짜 정보를 일/월/년도 24시 : 분: 초 리턴
□ CURRENT_TIMESTAMP
: TIMESTAMP WITH TIME ZONE 형식으로 CURRENT_DATE SESSION TIME ZONE형식으로 리턴
□ EXTRACT
: DATETIME 또는 INTERVAL의 값 표현 형식에 지정된 DATETIME 필드의 값을 추출해서 리턴한다.
# 오늘 날짜에서 연도만 출력하고 싶다.
SELECT EXTRACT (YEAR FROM SYSDATE)
FROM DUAL;
# 사원 테이블에서 사원의 이름, 입사일자에서 입사한 월 정보만 조회하자.
SELECT ENAME, EXTRACT (MONTH FROM HIREDATE)
FROM EMP;
# 사원테이블에서 사원의 이름, 입사일자에서 입사한 일 정보만 조회하자.
SELECT ENAME, EXTRACT(DAY FROM HIREDATE)
FROM EMP;
□ MONTHS_BETWEEN(D1, D2)
: 두 날짜 간의 경과를 개월 수
□ ADD_MONTHS(D1, N)
: D1날짜에 N개월을 더함
□ NEXT_DAY(D1, 'CHAR')
: D1보다 이후 날짜이고 'CHAR'에 지정한 요일에 해당하는 날짜
□ LAST_DAY
: 해당 월의 마지막 날짜를 리턴한다.
Q19)
# 사원 테이블에서 현재까지 근무일수가 몇 주 며칠인지 조회한다.
SELECT ENAME, HIREDATE, SYSDATE, (SYSDATE-HIREDATE) "TOTAL DAYS",
TRUNC((SYSDATE-HIREDATE)/7) WEEKS, ROUND(MOD((SYSDATE-HIREDATE),7)) DAYS
FROM EMP
ORDER BY 4 DESC;
Q20)
# 사원 테이블에서10번 부서의 사원의 현재까지의 근무 월 수를 계산해서 리턴 받자.
SELECT ENAME, HIREDATE, SYSDATE, MONTHS_BETWEEN(SYSDATE, HIREDATE) AS M_BETWEEN, TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE),0) AS T_BETWEEN
FROM EMP
WHERE DEPTNO=10
ORDER BY 4 DESC;
Q21)
# 사원 테이블에서10번 부서 사원의 입사일로부터5개월이 지난 날짜를 계산하여 출력하자.
SELECT ENAME, HIREDATE, ADD_MONTHS(HIREDATE,5) A_MONTH
FROM EMP
WHERE DEPTNO = 10
ORDER BY HIREDATE DESC;
Q22)
# 사원 테이블에서 10번 부서 사원의 입사일로부터 돌아오는 금요일을 계산해보자.
SELECT ENAME, HIREDATE, NEXT_DAY(HIREDATE, 6)
FROM EMP
WHERE DEPTNO = 10
ORDER BY HIREDATE DESC;
□ 날짜 데이터의 ROUND
일은 반올림할 때 정오를 넘으면 (PM) 다음날 자정을 출력하고, 넘지 않으면 그날 자정을 출력한다.
월을 반올림할 경우 15일 이상이면 다음 달1일을 출력하고 넘지 않으면 현재 달 1일을 출력한다.
년도를 반올림하는 경우에는 6월을 넘으면 다음 해1월 1일을 출력하고 넘지 않으면 그 해 1월 1일을 출력한다.
□ 날짜 데이터의 TRUNC
일은 절삭할 때 그날 자정을 출력하고, 월을 절삭하면 그 달의 1일을 출력한다.
년도를 절삭하면 그 해 1월 1일을 출력한다.
단, 주의할 점은 시간 정보가 중요하지 않을 경우 시간 정보를 생략하고 입력하거나 연산할 때 편리하다.
✔ TO_CHAR
숫자 FORMAT
숫자(9, 0), 그룹 구분자(,), G, 소수점, 통화 $ L ,
공백 제거FM, 표기법 EEEE(지수), RN(로마 표기자), rn, X(16진수 표기),
기호 표시MI : 숫자가 음수일 경우에 마지막에 - ,
PR : 음수인 경우 <> 안에 숫자 표시,
S : 음수인 경우 숫자 앞에-
□ 숫자(9,0)
SELECT TO_CHAR(1000, '9999')
FROM DUAL;
SELECT TO_CHAR(1000, '00009999')
FROM DUAL;
SELECT TO_CHAR('1000', '00009999')
FROM DUAL;
SELECT TO_CHAR(12.3, '009.90')
FROM DUAL;
□ 그룹 구분자
SELECT TO_CHAR(12345, '99.999.9') AS RES FROM DUAL;
날짜 FORMAT
기원 : AD/BC, A.D./B.C.
년도 : YYYY(2021), YYY(021), YY(21), Y(1), YEAR, SYYYY(BC인 경우 음수로 표시), PR
분기 : Q (4분기)
월 : MM(1~12), MON(월 이름 약어 JAN, FEB), MONTH(January), RM (로마식)
주 : W(1,2,3,4,5주 표시), WW(년 주표시:1월 1일- 1월 7일까지가 1주 차가 된다.),
IW (IOS주표시 : 1월 1일부터 첫 번째 일요일까지가 1주 차가 된다.)
일자 : D, DD, DDD, J(BC4712 이후의 줄리 안력 일자.)
요일 : DY(MON), DAY(Monday)
시간 FORMAT
오전/오후 : AM/PM, A.M./P.M.
시간 : HH, HH12, HH24
분 : MI
초 : SS, SSSS
시간대 : TZD(서머타임), TZH, TZM, TZR(US/Central)
기타 :../;
□ FM 표기법
: 날짜의 두 자리 숫자를 한자리로 표기
ex)
SELECT TO_CHAR(SYSDATE, 'DD') FROM DUAL;
해당 날짜가 02로 표기됨
SELECT TO_CHAR(SYSDATE, 'FMDD') FROM DUAL;
해당 날짜가 2로 표기됨
SELECT ENAME,
HIREDATE, TO_CHAR(HIREDATE, 'FMDD, MONTH, YYYY') T_HIREDATE,
TO_CHAR(HIREDATE, 'YYYY"년"MM"월"DD"일"') T_KOR
FROM EMP
WHERE DEPTNO = 10
ORDER BY HIREDATE DESC;
Q23)
# 사원테이블에서 20번 부서중 급여 앞에$를 삽입하고 천 단위 구분자를 표시하면서 조회하자.
단 사원의 번호 이름, 직업, 봉급, 봉급 포맷을 출력하자.
SELECT EMPNO, ENAME, JOB, SAL, TO_CHAR(SAL, '$999,999')
FROM EMP
WHERE DEPTNO=20
ORDER BY SAL DESC;
# L은 로컬 화폐단위
SELECT EMPNO, ENAME, JOB, SAL, TO_CHAR(SAL, 'L999,999')
FROM EMP
WHERE DEPTNO = 20
ORDER BY SAL DESC;
Q24)
# 날짜 포맷 표기
: WW는 주기 표시
# 년도가 다르게 출력되는 경우를 살펴보자
SELECT TO_CHAR(TO_DATE('98', 'RR'), 'YYYY') TEST 1,
TO_CHAR(TO_DATE('05', 'RR'), 'YYYY') TEST 2,
TO_CHAR(TO_DATE('98', 'YY'), 'YYYY') TEST 3,
TO_CHAR(TO_DATE('05', 'YY'), 'YYYY') TEST 4
FROM DUAL;
❔ YY형식이 날짜의 연도 부분을 현재의 세기로 해석
RR형식은 현재 연도와 지정된 년도의 두 자리를 바 교하여50년을 기준으로 해석을 달리한다.
현재의 연도가2000 ~ 2050년도 사이라면 'RR' 01~49까지는 2000년대로 해석하고
'50'~'99'까지는 1900년대로 해석한다.
Q25)
숫자형과 문자형을 확인
ex)
CREATE TABLE TEST(NO NUMBER(4), CH VARCHAR2(4));
INSERT INTO TEST
VALUES(1,1);
❔ 문자는 왼쪽 정렬,, 숫자는 오른쪽 정렬
Q26)
□ 추가 변환 함수
TO_TIMESTAMP : CHAR, VARCHAR2 데이터 타입을TIMESTAMP 변환
TO_TIMESTAMP_TZ : CHAR, VARCHAR2 데이터타입을 TIMESTAMP WITH TIME ZONE 타입으로 변환
TO_YMINTERVAL : CHAR, VARCHAR2 데이터타입을 INTERVAL DAY TO SECOND 타입으로 변환
SELECT SYSDATE, SYSDATE + TO_YMINTERVAL('01-03') "15 MONTH LATER"
FROM DUAL;
TO_DSINTERVAL : CHAR, VARCHAR2 데이터 타입을INTERVAL DAY TO SECOND 타입으로 변환
SELECT SYSDATE, SYSDATE + TO_DSINTERVAL('003 17:00:00') AS "3 DAY 17 HOURS LATER"
FROM DUAL;
Q27)
□ 기타 함수
MVL (COLUMN, EXP1) : NUL값을 EXP1값으로 변환
NVL2 (COLUMN, EXP1, EXP2) : 해당 칼럼이NULL일 경우 EXP2값을, NULL이 아니면 EXP1값을 리턴
NULLIF (EXP1, EXP2) : EXP1과 EXP2값을 비교해 같으면 NULL, 다르면 EXP1값을 리턴
COALESCE (EXP1... EXPN) : EXP1, EXP2,... EXPN 중NULL이 아닌 첫 번째 값을 이용
DECODE : IF ~THEN~ELSE 문의 역할 수행(조건부 조회를 쉽게...)
CASE WHEN 조건식 THEN : IF~THEN~ELSE 문의 역할 수행
EXP1 END
# 사원 테이블의 사원 이름, 매니저, 매니저가 없다면 '상위관리자'로 표시하고 매니저가 있으면 '담당'으로 출력하자
SELECT ENAME, MGR, NVL2 (MGR, MGR||'담당', '상위 관리자')
FROM EMP;
# 사원 테이블의 사원 이름,, 직업, 직업이 'CLERK' 인경우 NULL로 출력하자.
SELECT ENAME, JOB, NULLIF(JOB, 'CLERK') AS RESULT
FROM EMP;
Q28)
□ COALESCE : NVL 함수를 일반화시킨 함수
# 사원 테이블에서 이름, 커미션 , 연봉, 커미션 NULL이 아닌 경우 커미션을, 커미션이 NULL인 경우 연봉을,
모두 NULL인 경우엔 50을 출력하자.
SELECT ENAME, COMM, SAL, COALESCE(COMM, SAL*12,50) RESULT
FROM EMP;
Q29)
□ DECODE : 데이터들을 다른 값으로 리턴
: DECODE(VALUE, IF1, THEN1, IF2, THEN2...)
VALUE 값이 IF1일 경우 THEN1 값으로 리턴, VALUE IF2일 경우에는 THEN2 값으로 리턴된다.
# 봉급이 1000보다 작으면 'A', 1000 이상 2500미만 'B', 2500 이상이면 'C'로 표시한다.
(DECODE + SIGN)
SELECT ENAME, SAL, DECODE(SIGN(SAL-1000),-1, 'A',
DECODE(SIGN(SAL -2500),-1, 'B', 'C')) GRADE
FROM EMP;
❔ SIGN : 인자가 양수, 0, 음수인지 판단하여 값을 리턴함
N < 0 : -1
N = 0 : 0
N > 0 : 1
□ CASE WHEN THEN
[형식]
CASE [대상 값, 대상 값은] WHEN 비교조건 1 THEN 처리 1
WHEN 비교조건 2 THEN 처리 2
ELSE 디폴트 처리END
# 봉급이 1000보다 작으면 'A', 1000 이상 2500 미만 'B', 2500 이상이면 'C'로 표시한다.
(CASE WHEN THEN 사용)
SELECT ENAME, SAL,
CASE WHEN SAL < 1000 THEN 'A'
WHEN SAL >= 1000 AND SAL <2500 THEN 'B'
ELSE 'C' END AS GRADE
FROM EMP;
'|Playdata_study > SQL.Oracle' 카테고리의 다른 글
210526_DB4 (SQL) / INSERT, UPDATE, DELETE, MARGE (0) | 2021.05.26 |
---|---|
210525 _DB3 (SQL) / 집합(SET)연산, 서브쿼리 (0) | 2021.05.25 |
210524 _DB3 (SQL) / 분석함수, JOIN (0) | 2021.05.24 |
210521 _DB3 (SQL) (0) | 2021.05.22 |
210517_ DB 1 (SQL) (0) | 2021.05.17 |
댓글