반응형
1. 함수(FUNCTION)
- 매개변수로 값을 전달받아 가공처리하여 결과값을 반환하는 기능을 제공
- 매개변수로 값 받기 필수!!
- vs 자바의 메소드 : 필드가 있어 매개변수로 값 안받아도 됨
1) 단일함수
- 매개변수로 하나의 값을 전달받아 가공처리하여 결과값을 반환하는 함수
문자함수
- 매개변수로 문자값을 전달받아 가공처리하여 결과값을 반환하는 함수
- (String클래스의 메소드와 유사)
숫자함수
- 매개변수로 숫자값을 전달받아 가공처리하여 결과값을 반환하는 함수
- 정수, 실수형 개념 없이 그냥 숫자형 하나임
- DUAL테이블 이용 (검색 테이블 없이 SELECT 명령을 작성할 경우 사용하는 가상의 테이블)
- (Math클래스의 메소드와 유사)
날짜함수
- 매개변수로 날짜값을 전달받아 가공처리하여 결과값을 반환하는 함수
- DUAL테이블 이용
- SYSDATE키워드 이용 (시스템의 현재 날짜와 시간을 제공하기 위한 키워드, 타임스탬프와 유사)
- SYSDATE 키워드의 검색값은 기본적으로 [RR/MM/DD]형식의 패턴으로 검색되지만 내부적으로 날짜와 시간을 제공함
SELECT SYSDATE FROM DUAL;
변환함수 (강제 형변환 함수)
- 전달값이 원하는 자료형의 값으로 변환하여 반환하는 함수 (강제 형변환 함수)
- TO_NUMBER, TO_DATE, TO_CHAR
일반함수
- 전달값이 특정 조건에 참인 경우에만 가공처리되어 결과값을 반환하는 함수
- NVL(전달값, 변경값) : if문
- NVL2(전달값, 변경값1, 변경값2) : if-else문
- DECODE(전달값, 비교값1,변경값1,비교값2,변경값2 ...[,기본값]) : if-else-if문
2) 그룹함수
- 매개변수로 다수의 값을 전달받아 가공처리하여 결과값을 반환하는 함수
- 주의) 한 건의 결과만 반환
2. 문자함수
- 매개변수로 문자값을 전달받아 가공처리하여 결과값을 반환하는 함수 (String클래스의 메소드와 유사)
1) UPPER(문자값) & LOWER(문자값)
-- UPPER(문자값) : 문자값을 전달받아 대문자로 변환하여 반환하는 함수
-- LOWER(문자값) : 문자값을 전달받아 소문자로 변환하여 반환하는 함수
--1)
SELECT ENAME, UPPER(ENAME), LOWER(ENAME) FROM EMP;
--2)
--EMP 테이블에서 사원이름이 SMITH인 사원의 사원번호, 사원이름, 급여를 검색
SELECT EMPNO, ENAME, SAL FROM EMP WHERE ENAME='SMITH';
--3)
--SQL 명령은 대소문자를 구분하지 않지만 문자값은 대소문자를 구분하여 비교
SELECT EMPNO, ENAME, SAL FROM EMP WHERE ENAME='smith'; --검색실패
--UPPER 함수 또는 LOWER 함수를 사용해 대소문자를 구분하지 않고 비교할 때 사용
SELECT EMPNO, ENAME, SAL FROM EMP WHERE UPPER(ENAME)=UPPER('SMITH');
SELECT EMPNO, ENAME, SAL FROM EMP WHERE UPPER(ENAME)=UPPER('smith');
2) INITCAP(문자값)
-- 문자값을 전달받아 첫문자만 대문자로 변환하고, 나머지는 소문자로 변환하여 반환하는 함수
SELECT ENAME, INITCAP(ENAME) FROM EMP;
3) CONCAT(문자값, 문자값) [ ||연산자 와 동일]
-- 두 개의 문자값을 전달받아 결합하여 반환하는 메소드
-- ||기호를 사용하는 것과 유사한 기능 제공
SELECT ENAME , JOB, CONCAT(ENAME,JOB), ENAME||JOB FROM EMP;
4) SUBSTR(문자값, 시작위치, 갯수)
-- 문자값을 전달받아 시작위치(INDEX)부터 갯수만큼의 문자들을 분리하여 반환하는 함수
SELECT EMPNO, ENAME, JOB, SUBSTR(JOB,6,3) FROM EMP WHERE EMPNO=7499;
5) LENGTH(문자값)
-- 문자값을 전달받아 문자 갯수를 반환하는 함수
SELECT EMPNO, ENAME, JOB, LENGTH(JOB) FROM EMP WHERE EMPNO=7499;
6) INSTR(문자값, 검색문자값, 시작위치, 검색위치) - 검색
-- 문자값을 전달받아 검색문자값을 시작첨자부터
-- 검색하여 원하는 위치에서 검색된 문자값의 시작첨자를 반환하는 함수
SELECT EMPNO, ENAME, JOB, INSTR(JOB,'A',1,2) FROM EMP WHERE EMPNO=7499;
SELECT EMPNO, ENAME, JOB, INSTR(JOB,'X',1,2) FROM EMP WHERE EMPNO=7499; -- 검색문자값이 없는 경우 0 반환
7) LPAD(문자값, 자릿수, 채울문자) & RPAD(문자값, 자릿수, 채울문자) - 추가
-- LPAD(문자값, 자릿수, 채울문자) : 문자값을 전달받아 자릿수 길이만큼
--오른쪽부터 채우고 왼쪽 남은 자리에는 채울문자로 검색하는 함수
-- RPAD(문자값, 자릿수, 채울문자) : 문자값을 전달받아 자릿수 길이만큼
--왼쪽부터 채우고 오른쪽 남은 자리에는 채울문자로 검색하는 함수
SELECT EMPNO, ENAME, SAL, LPAD(SAL,8,'*'), RPAD(SAL,8,'*') FROM EMP;
8) TRIM( {LEADING|TRAILING} 제거문자 FROM 문자값) - 제거
-- 문자값을 전달받아 앞{LEADING} 또는 뒤{TRAILING}에 존재하는 제거문자를 삭제하여 반환하는 함수
SELECT EMPNO, ENAME, JOB, TRIM(LEADING 'S' FROM JOB), TRIM(TRAILING 'N' FROM JOB) FROM EMP WHERE EMPNO=7499;
9) REPLACE(문자값, 검색문자값, 치환문자값) - 치환
-- 문자값을 전달받아 검색문자값을 찾아 치환문자로 변환하여 반환하는 함수
SELECT EMPNO, ENAME, JOB, REPLACE(JOB, 'MAN', 'PERSON') FROM EMP WHERE EMPNO=7499;
3. 숫자함수
- 매개변수로 숫자값을 전달받아 가공처리하여 결과값을 반환하는 함수 (Math클래스의 메소드와 유사)
- 정수, 실수형 개념 없이 그냥 숫자형 하나임
- DUAL테이블 이용 (검색 테이블 없이 SELECT 명령을 작성할 경우 사용하는 가상의 테이블)
1) ROUND(숫자값,소숫점자릿수)
-- 숫자값을 전달받아 소숫점자릿수 위치만큼 검색되도록 반올림 처리하여 반환하는 함수
SELECT ROUND(45.582,2),ROUND(45.582,0),ROUND(45.582,-1) FROM DUAL;
2) TRUNC(숫자값,소숫점자릿수)
-- 숫자값을 전달받아 소숫점자릿수 위치만큼 검색되도록 절삭 처리하여 반환하는 함수
SELECT TRUNC(45.582,2),TRUNC(45.582,0),TRUNC(45.582,-1) FROM DUAL;
3) CEIL(숫자값) - 올림함수
-- 숫자값을 전달받아 소숫점 이하 값이 존재할 경우 증가된 숫자값(정수값)을 반환하는 함수
SELECT CEIL(15.3),CEIL(-15.3) FROM DUAL;
4) FLOOR(숫자값) - 내림함수
-- 숫자값을 전달받아 소숫점 이하 값이 존재할 경우 감소된 숫자값(정수값)을 반환하는 함수
SELECT FLOOR(15.3),FLOOR(-15.3) FROM DUAL;
5) MOD(숫자값1,숫자값2) - 나머지반환함수
-- 두개의 숫자값을 전달받아 숫자값1로 숫자값2를 나눈 나머지를 반환하는 함수
-- + , - , / 만 존재하고 % 연산자는 없음
-- % 연산자의 역할을 함
SELECT 20/8, MOD(20,8) FROM DUAL;
6) POWER(숫자값1,숫자값2) - 제곱근함수
-- 두개의 숫자값을 전달받아 숫자값1에 대한 숫자값2의 제곱근을 반환하는 함수
SELECT 3*3*3*3*3,POWER(3,5) FROM DUAL;
4. 날짜함수
- 매개변수로 날짜값을 전달받아 가공처리하여 결과값을 반환하는 함수
1) SYSDATE 키워드 (중요)
-- 시스템의 현재 날짜와 시간을 제공하기 위한 키워드
-- 타임스탬프와 유사
-- SYSDATE 키워드의 검색값은 기본적으로 [RR/MM/DD]형식의 패턴으로 검색되지만,
-- 내부적으로 날짜와 시간을 제공함
SELECT SYSDATE FROM DUAL;
2) ADD_MONTHS(날짜값, 숫자값)
-- 날짜값을 전달받아 숫자값만큼의 개월수를 더한 날짜값을 반환하는 함수
SELECT SYSDATE, ADD_MONTHS(SYSDATE,5) FROM DUAL;
3) 날짜값의 연산
-- 1)
-- 💚[일 증가] : 날짜값 + 숫자값 = 날짜값
SELECT SYSDATE,SYSDATE+7 FROM DUAL; --7일 후 (오늘날짜에 7일 더한 날짜가 계산되어 나옴)
-- 2)
-- 💚[일 감소] : 날짜값 - 숫자값 = 날짜값
SELECT SYSDATE,SYSDATE-7 FROM DUAL; --7일 전
-- 3)
-- 💚[시간 증가] : 날짜값 + 숫자값/24 = 날짜값
SELECT SYSDATE,SYSDATE+100/24 FROM DUAL; --100시간 후
-- 4)
-- 💚[시간 감소] : 날짜값 - 숫자값/24 = 날짜값
SELECT SYSDATE,SYSDATE-100/24 FROM DUAL; --100시간 전
-- 5)
-- 💚[일 계산] : 날짜값 - 날짜값 = 숫자값 (실수값)
SELECT EMPNO,ENAME,HIREDATE,CEIL(SYSDATE-HIREDATE)||'일' "근속일수" FROM EMP WHERE EMPNO=7499;
--오늘까지 근무일 15218.XXXX일 근무함
SELECT EMPNO,ENAME,HIREDATE,SYSDATE-HIREDATE FROM EMP WHERE EMPNO=7499;
-- 6)
-- 💚[ERROR] 날짜값 + 날짜값 = (더할 수 없음)
4) NEXT_DAY(날짜값,요일)
-- 날짜값을 전달받아 미래의 특정 요일의 날짜값을 반환하는 함수
SELECT SYSDATE,NEXT_DAY(SYSDATE,'토') FROM DUAL; --다가오는 미래의 토요일 날짜를 알려주세요!
5) 사용자 환경 (세션 - SESSION) 설정값 바꾸기
-- 오라클에 접속된 현재 사용자 환경(세션 - SESSION)에 따라 사용 언어 및 날짜와 시간 패턴이 다르게 적용되어 사용
-- 세션의 사용 언어 및 날짜와 시간 패턴 변경 가능
-- 1)
--세션의 사용 언어 변경 : AMERICAN
ALTER SESSION SET NLS_LANGUAGE='AMERICAN';
SELECT SYSDATE,NEXT_DAY(SYSDATE,'토') FROM DUAL; --ERROR
SELECT SYSDATE,NEXT_DAY(SYSDATE,'SAT') FROM DUAL; --OK
-- 2)
--세션의 사용 언어 변경 : KOREAN
ALTER SESSION SET NLS_LANGUAGE='KOREAN';
SELECT SYSDATE,NEXT_DAY(SYSDATE,'토') FROM DUAL; --OK
SELECT SYSDATE,NEXT_DAY(SYSDATE,'SAT') FROM DUAL; --ERROR
6) TRUNC(날짜값, 표현단위)
-- 날짜값을 전달받아 원하는 단위만 표현하고 ,
-- 나머지는 절삭하여 초기값( 01년 01월 01일 )으로 검색하여 반환하는 함수
SELECT SYSDATE, TRUNC(SYSDATE,'MONTH'),TRUNC(SYSDATE,'YEAR') FROM DUAL;
5. 변환함수
- 전달값이 원하는 자료형의 값으로 변환하여 반환하는 함수
1) TO_NUMBER(문자값)
- 문자값을 전달받아 숫자값으로 변환하여 반환하는 함수
- 주의) 전달된 문자값에 숫자가 아닌 형태의 문자가 존재할 경우 에러 발생
- 컬럼값이 '숫자'에서 숫자형으로 자동형변환
- 컬럼값이 숫자+'숫자'에서 숫자형으로 자동형변환
- 즉, TO_NUMBER(문자값)을 쓰지 않아도 문자값이 숫자값으로 자동형변환 잘 됨!
- 컬럼의 자료형이 숫자형이면 자동형변환됨
-- 1)
SELECT EMPNO,ENAME,SAL FROM EMP WHERE EMPNO=7839;
--비교 컬럼의 자료형이 '숫자형'인 경우 비교값이
-- '문자형'이면 TO_NUMBER 함수를 사용하여 숫자형으로 변환하여 비교
SELECT EMPNO,ENAME,SAL FROM EMP WHERE EMPNO=TO_NUMBER('7839'); -- 강제형변환
--비교 컬럼의 자료형이 '숫자형'인 경우 비교값이 '문자형'이면 자동으로 숫자형으로 변환하여 비교
SELECT EMPNO,ENAME,SAL FROM EMP WHERE EMPNO='7839'; --자동형변환
SELECT EMPNO,ENAME,SAL FROM EMP WHERE EMPNO='ABC'; --주의, 숫자가 아니기 때문에 ERROR
-- 2)
--문자값을 연산할 경우 문자값이 자동으로 숫자값으로 변환되어 연산 처리
SELECT 100+200 FROM DUAL;
--주의) [+]연산자가 [문자열결합]연산자로 사용되지 않음! 자바와 다르니 주의하자
-- 자동 형변환
SELECT '100'+'200' FROM DUAL;
-- 3)
--EMP 테이블에서 사원번호가 7839인 사원의 사원번호,사원이름,급여,세후급여(급여*0.9) 검색
SELECT EMPNO,ENAME,SAL,SAL*0.9 FROM EMP WHERE EMPNO=7839;
SELECT EMPNO,ENAME,SAL,SAL*TO_NUMBER('0.9') FROM EMP WHERE EMPNO=7839; --강제형변환해줌
SELECT EMPNO,ENAME,SAL,SAL*'0.9' FROM EMP WHERE EMPNO=7839; --자동형변환 되어 연산됨
2) TO_DATE(문자값[,패턴문자])
- 문자값을 전달받아 → 날짜값으로 변환하여 반환하는 함수
- 주의) 전달받은 문자값이 패턴에 맞지 않는 경우 에러 발생
- 기본패턴 : [RR/MM/DD] (오라클에서 날짜의 기본패턴은 무조건 RR/MM/DD이다)
- 기본패턴인 경우 자동형변환 되어 검색 가능하지만,
- 기본패턴이 아닌 경우는 TO_DATE(문자값[,패턴문자])를 사용해 반드시 강제형변환 이용하기!
--비교 컬럼의 자료형이 날짜형인 경우 비교값이 문자형이면 TO_DATE 함수를 사용하여 숫자형으로 변환하여 비교
-- 강제 형변환
SELECT EMPNO,ENAME,HIREDATE FROM EMP WHERE HIREDATE=TO_DATE('82/01/23'); --강제형변환
--비교 컬럼의 자료형이 날짜형인 경우 비교값이 문자형이면 자동으로 날짜형으로 변환하여 비교
-- 자동 형변환
SELECT EMPNO,ENAME,HIREDATE FROM EMP WHERE HIREDATE='82/01/23'; --자동형변환
SELECT EMPNO,ENAME,HIREDATE FROM EMP WHERE HIREDATE='1982/01/23'; --자동형변환
주의) 패턴에 맞지 않으면 에러
--패턴에 맞지 않는 문자값을 사용할 경우 에러 발생
SELECT EMPNO,ENAME,HIREDATE FROM EMP WHERE HIREDATE='01-23-1982'; --ERROR
SELECT EMPNO,ENAME,HIREDATE FROM EMP WHERE HIREDATE='82/15/23'; --ERROR
오라클에서는 [YYYY-MM-DD]패턴 OK
--날짜값은 [RR/MM/DD] 패턴 대신 [YYYY-MM-DD] 패턴으로 사용 가능
SELECT EMPNO,ENAME,HIREDATE FROM EMP WHERE HIREDATE='1982-01-23'; --자동형변환
TO_DATE함수 사용 시 원하는 패턴 작성 ex) 'MM-DD-YYYY
--TO_DATE함수 사용 시 패턴문자를 사용하여 원하는 패턴의 문자값을 전달받아 날짜값으로 변환하여 반환 가능
SELECT EMPNO,ENAME,HIREDATE FROM EMP WHERE HIREDATE=TO_DATE('01-23-1982','MM-DD-YYYY'); --OK
--2000년 1월 1일에 태어난 사람이 오늘까지 살아온 날짜 검색
//'2000-01-01'가 날짜값이 아닌 문자값으로 처리되어 (날짜값 - 문자값)으로 연산 처리되기 때문에 ERROR
SELECT SYSDATE-'2000-01-01' FROM DUAL; --ERROR
SELECT SYSDATE-TO_DATE('2000-01-01') FROM DUAL; --날짜값 - 날짜값 = 숫자값(실수값)반환
SELECT CEIL(SYSDATE-TO_DATE('2000-01-01'))||'일' "현재까지 살아온 날짜" FROM DUAL;
3) 🔥TO_CHAR({숫자값|날짜값},패턴문자)
- 숫자값 또는 날짜값을 전달받아 원하는 패턴의 문자값으로 변환하여 반환하는 함수
날짜패턴문자
: (자바의 SimpleDateFormat 클래스와 유사)
-- RR(년) , YYYY(년)
-- MM(월)
-- DD(일)
-- HH24(시간) , HH12(시간)
-- MI(분)
-- SS(초)
SELECT SYSDATE,
TO_CHAR(SYSDATE,'YYYY-MM-DD'),
TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;
-- 🔥정확한 날짜비교를 위해 사용한 TO_CHAR함수
-- 월 만 비교하고 싶다?
-- 시간 만 비교하고 싶다?
-- 년도 만 비교하고 싶다?
-- 원하는 값만 패턴으로 비교해주기
--EMP테이블에서 1981년도에 입사한 사원의 사원번호, 사원이름, 입사일을 검색
--현재 접속된 사용자 환경(세션)의 날짜와 표현패턴이 [RR/MM/DD]인 경우에만 검색 가능
SELECT EMPNO,ENAME,HIREDATE FROM EMP WHERE HIREDATE LIKE '81%'; --세션환경마다 검색여부가 달라짐
-- 권장!!!!!!
--TO_CHAR함수를 사용하여 세션에 상괎없이 원하는 패턴의 문자값으로 반환
SELECT EMPNO,ENAME,HIREDATE FROM EMP WHERE TO_CHAR(HIREDATE, 'YYYY')='1981'; --세션에 상관없음
숫자패턴문자
: (자바의 DecimalDateFormat클래스와 유사)
-- 9(숫자 또는 공백으로 출력해주세요)
-- 0(숫자가 없으면 0으로 출력해주세요)
-- L(화폐단위)
-- $(달러)
SELECT 100000000, TO_CHAR(100000000,'9,999,999,990') FROM DUAL; --세자리마다 콤마찍어주세요 (1억)
SELECT 1000000000, TO_CHAR(1000000000,'9,999,999,990') FROM DUAL; --세자리마다 콤마찍어주세요 (10억)
-- 전달받은 숫자값의 길이가 패턴문자의 길이보다 큰 경우 모든 패턴문자가 #으로 변환하여 반환
SELECT 10000000000, TO_CHAR(10000000000,'9,999,999,990') FROM DUAL;
--EMP테이블에서 사원번호가 7844인 사원의 사원번호, 사원이름, 급여 검색
--step1. 급여 출력
SELECT EMPNO, ENAME, SAL FROM EMP WHERE EMPNO=7844;
--step2. 변환해 급여 출력
SELECT EMPNO, ENAME, TO_CHAR(SAL,'999,990') FROM EMP WHERE EMPNO=7844;
--step3. AS 이용
SELECT EMPNO, ENAME, TO_CHAR(SAL,'999,990') SAL FROM EMP WHERE EMPNO=7844;
--step4. 화폐단위로 출력
SELECT EMPNO, ENAME, TO_CHAR(SAL,'L999,990') SAL FROM EMP WHERE EMPNO=7844;
--step5. 달러단위로 출력
SELECT EMPNO, ENAME, TO_CHAR(SAL,'$99,999.00') SAL FROM EMP WHERE EMPNO=7844;
6. 일반함수
- 전달값이 특정 조건에 참인 경우에만 가공처리되어 결과값을 반환하는 함수
1) 🔥NVL(전달값, 변경값) : if문과 비슷
-- 전달값이 NULL인 경우 → 변경값으로 변환하여 반환하는 함수
-- 변경값은 전달값과 같은 자료형의 값으로만 변경 가능
-- 다른 자료형의 값으로 변경한 경우 에러 발생
--EMP테이블에 저장된 모든 사원의 사원번호, 사원이름, 연봉(급여*12)를 검색
SELECT EMPNO, ENAME, SAL*12 ANNUAL FROM EMP;
-- EMP테이블에 저장된 모든 사원의 사원번호, 사원이름, 연봉((급여+성과급)*12)를 검색
--성과급이 NULL인 경우 연산이 불가능하므로 NULL이 검색됨
SELECT EMPNO, ENAME, (SAL+COMM)*12 ANNUAL FROM EMP; --검색실패
--NVL함수를 사용하여 성과급이 NULL인 경우 0으로 변환하여 연산 처리
--COMM이 NULL이면 0으로 바꿔서 검색해주세요!
SELECT EMPNO, ENAME, (SAL+NVL(COMM,0))*12 ANNUAL FROM EMP; --검색성공
2) NVL2(전달값, 변경값1, 변경값2) : if-else문과 비슷
-- 전달값이 NULL이 아닌 경우 → 변경값1로 변경하고,
-- 전달값이 NULL인 경우 → 변경값2로 변환하여 반환하는 함수
-- COMM이 NULL이 아니면 COMM으로 변경하고, NULL이면 0으로 변경해주세요! * 12
SELECT EMPNO, ENAME, (SAL+NVL2(COMM,COMM,0))*12 ANNUAL FROM EMP;
-- 위, 아래의 결과값은 같음
-- COMM이 NULL이 아니면 SAL+COMM으로 변경하고, NULL이면 SAL으로 변경해주세요! * 12
SELECT EMPNO, ENAME, NVL2(COMM,SAL+COMM,SAL)*12 ANNUAL FROM EMP;
3) DECODE(전달값,비교값1,변경값1,비교값2,변경값2 ...[,기본값]) : if-else-if /switch-case문과 비슷
-- 전달값을 비교값과 차례대로 비교하여 같은 경우 변경값으로 변환하여 반환하는 함수
-- 전달값 = 비교값1 -> 변경값1
-- 전달값 = 비교값2 -> 변경값2
-- ...
-- 모든 비교값이 다른 경우 기본값으로 변환하여 반환
-- 기본값 생략 가능 (기본값을 생략하면 NULL 반환)
-- 1. EMP테이블에 저장된 모든 사원의 사원번호, 사원이름, 업무, 급여, '업무별 실급여' 검색
--업무별 실급여 : 시원을 업무로 구분하여 급여를 다르게 계산하여 실제로 지불할 급여
SELECT DISTINCT JOB FROM EMP; --업무부서 확인
--업무별 실급여
--ANALYST:급여*1.1, CLERCK :급여*1.2, MANAGER:급여*1.3, PRESIDENT:급여*1.4, SALESMAN:급여*1.5
SELECT EMPNO, ENAME, SAL,
DECODE(JOB, 'ANALYST',SAL*1.1,
'CLERK',SAL*1.2,
'MANAGER',SAL*1.3,
'PRESIDENT',SAL*1.4,
'SALESMAN',SAL*1.5,SAL) "업무별 실급여"
FROM EMP;
-- 2. EMP테이블에 저장된 모든 사원의 사원번호, 사원이름, 업무, 급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP;
-- 3. EMP테이블에 저장된 모든 사원의 사원번호, 사원이름, 업무별 급여 검색 단, 해당업무가 아닌 경우에는 NULL 검색
SELECT EMPNO, ENAME,
DECODE(JOB,'ANALYST',SAL) "ANALYST",
DECODE(JOB,'CLERK',SAL) "CLERK",
DECODE(JOB,'MANAGER',SAL) "MANAGER",
DECODE(JOB,'PRESIDENT',SAL) "PRESIDENT",
DECODE(JOB,'SALESMAN',SAL) "SALESMAN"
FROM EMP;
4) 연습문제
SELECT EMPNO, ENAME, HIREDATE FROM EMP;
① 사원테이블에서 입사일이 12월인 사원의 사번, 사원명, 입사일 검색하시오
SELECT EMPNO, ENAME, HIREDATE FROM EMP WHERE HIREDATE LIKE '%/12/%';
SELECT EMPNO, ENAME, HIREDATE FROM EMP WHERE HIREDATE LIKE '__/12/__';
--권장
SELECT EMPNO, ENAME, HIREDATE FROM EMP WHERE TO_CHAR(HIREDATE,'MM') = '12'; -- 정확한 정답!
② 다음과 같은 결과를 검색할 수 있는 SQL 문장을 작성하시오
SELECT EMPNO, ENAME, LPAD(TO_CHAR(SAL),10,'*') "급여" FROM EMP; --NUMBER가 자동형변환으로 결합되니 쉽게 아래문장으로 바꾸자
SELECT EMPNO, ENAME, LPAD(SAL,10,'*') "급여" FROM EMP;
③ 다음과 같은 결과를 검색할 수 있는 SQL 문장을 작성하시오
SELECT EMPNO, ENAME, TO_CHAR(HIREDATE,'YYYY-MM-DD') "입사일" FROM EMP;
반응형
'sql' 카테고리의 다른 글
[sql] 6. JOIN문 (0) | 2024.05.07 |
---|---|
[sql] 5. 그룹함수 | GROUP BY절 | HAVING절 (0) | 2024.05.07 |
[sql] 3. DQL (SELECT) (1) | 2024.05.06 |
[sql] 2. DBMS 다운로드 및 설치법 (0) | 2024.05.05 |
[sql] 1. 관계형 DATABASE와 SQL의 개념 (0) | 2024.05.05 |