Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

햄코딩

SQL DAY 2 본문

SQL

SQL DAY 2

햄코딩 2022. 5. 11. 18:19
220511 DAY 19 정리중

 SQL(Structuered Query Language) 종류

  • SQL : 구조화된 DB에 질문하는 언어
종류 설명
DDL(Data Definition Language) CREATE, ALTER, DROP, RENAME, TRUNCATE
DML(Data Manipulation Language) INSERT, UPDATE, DELETE, SELECT
DCL(Data Control Language) GRANT, REVOKE
TCL(Transaction Control Language) COMMIT, ROLLBACK, SAVEPOINT

 

■ 오라클의 기본 함수 (문자, 수, 날짜)

MATH 함수

ceil 올림 select ceil(0.1) from dual;--올림//1
floor 내림 select floor(0.9) from dual;--내림//0
round 반올림 select round(0.5) from dual;--반올림//1
mod 나머지 select mod(49, 5) from dual;--49를 5로 나눈 나머지
trunc 소수점 이하의 자리수를 자른다.  select trunc(0.12346789, 3) from dual;--소수점 3자리 남김//0.123

 

문자열 함수

upper 모두 대문자로 select upper('nice to meet you') from dual;
lower 모두 소문자로 select lower('NICE TO MEET YOU') from dual;
initcap 첫 문자만 대문자로. 이니셜만 대문자로 select initcap('NICE TO MEET YOU') from dual;--Nice To Meet You
length 문자열의 길이를 눈에 보이는 길이로 select length('hello') from dual;--5
select length('안녕하세요') from dual;--5 
lengthb 문자열의 길이를 byte 단위로 select lengthb('hello') from dual;--5
select lengthb('안녕하세요') from dual;--15
substr 문자열을 눈에 보이는 글자 수대로 자르기 select substr('nice to meet you', 2, 10) from dual;--ice to mee
select substr('안녕하세요', 2, 3) from dual;--녕하세
substrb 문자열을 byte 단위로 자르기 select substrb('nice to meet you', 2, 10) from dual;--ice to mee
select substrb('안녕하세요', 4, 3) from dual;--녕
instr 문자열을 눈에 보이는 글자 수대로 찾기 select instr ('nice to meet you', 'to') from dual;--6
select instr('안녕하세요', '하세') from dual; --3
instrb 문자열을 byte단위로 찾기 select instrb ('nice to meet you', 'to') from dual;--6
select instrb('안녕하세요', '하세') from dual; --7
lpad 왼쪽을 지정한 문자로 채워라. select lpad('hi', 10, '#') from dual;--########hi
rpad 오른쪽을 지정한 문자로 채워라. select rpad('hi', 10, '$') from dual;--hi$$$$$$$$

 

 형 변환 함수

to_char(데이터, '출력 형식') 날짜 또는 숫자를 문자 format으로 변경
to_number() 문자를 숫자로 변경 - 오라클 기능 좋아져서 잘 안씀.
to_date(데이터, 날짜 형식) 문자를 날짜로 변경 (기본 날짜 형식 : YY/MM/DD)

 

 날짜 함수

moths_between 날짜와 날짜 사이의 개월 수를 구한다.
add_months 기준 날짜에 개월 수를 추가한 날짜를 계산해 준다.
next_day 가장 가까운 요일의 날짜 반환
last_day 기준이 되는 달의 마지막 날짜
round 날짜 반올림
trunc 날짜 자르기

 

기타 함수 (NVL, NVL2, DECODE, CASE)

NVL (컬럼명, 대체값) null을 0 또는 다른 값으로 변환. 
※ 컬럼과 대체값의 데이터 타입은 동일해야 한다.
NVL2 (컬럼명, 대체값1, 대체값2) 컬럼이 null이 아니면 대체값1, null이면 대체값2
※ 컬럼과 대체값의 데이터 타입은 동일해야 한다.
DECODE (컬럼명, 조건, 결과) 여러 조건에 따른결과를 정한다.
CASE WHEN 컬럼 = 조건 THEN 결과 ELSE ~ 여러 조건에 따른결과를 정한다.
** 1. NVL : 일종의 if~else문 **
--comm 데이터가 null이면 0으로 대체
select ename, job, sal, comm, nvl(comm, 0) from emp;

--데이터 타입이 다르면 에러
select ename, job, sal, comm, nvl(comm, sysdate) from emp;--error:숫자 타입vs날짜 타입
select ename, job, sal, comm, nvl(comm, '없음') from emp; --error


2. NVL2
select ename, job, sal, comm, nvl2(comm, comm * 12, 0) from emp;
select ename, job, nvl2(job, '직업 있음', '직업 없음') from emp;
select ename, hiredate, nvl2(hiredate, hiredate, sysdate) from emp;


3. DECODE
--부서번호가 10이면 회계로 변환, 그 나머지는 else로 변환
select deptno, decode(deptno, 10, '회계') from emp; -- [DECODE 1]
select deptno, decode(deptno, 10, '회계', 'else') from emp; -- [DECODE 2]
select deptno, decode(deptno, 10, '회계', 20, '기획', 'else') from emp; -- [DECODE 3]
select deptno, decode(deptno, 10, '회계', 20, '기획', 30, '영업', 'else') from emp; -- [DECODE 4]


Q. emp의 모든 데이터를 출력하는데,급여를 CLERK과 ANALYST는 5%, SALESMAN과 MANAGER은 10% 올려서 출력하시오.
select empno, ename, job, mgr, hiredate, sal, comm, deptno
	, case	when job = 'CLERK' then sal + (sal / 100 * 5)
		when job = 'ANALYST' then sal + (sal * 0.05)
		when job = 'SALESMAN' then sal * 1.1
		when job = 'MANAGER' then sal + (sal / 100 * 10)
		else 0 --then과 else의 데이터타입 일치
	end as "월급 인상안"
from emp;


4. CASE
select deptno
	, case	when deptno = 10 then '회계'
		when deptno = 20 then '기획'
		when deptno = 30 then '영업'
		else 'else'
	end
from emp;
, sal * 1.05, sal)as "월급인상" from emp;

DECODE1, DECODE2, DECODE3, DECODE4

'SQL' 카테고리의 다른 글

SQL DAY 5  (0) 2022.05.16
SQL DAY 4  (0) 2022.05.13
SQL DAY 3  (0) 2022.05.12
SQL DAY 1  (0) 2022.05.10