본문 바로가기

SQL

2021-12-14 [명령어 정리]

--ROUND(값, 자리수) : 값을 소수점 해당 자리수까지 반올림
--FLOOR(값) : 값의 소수점을 버림처리
--TRUNC(값, 자리수) : 값을 소수점 해당 자리수까지 버림
--CELL(값) : 값의 소수점을 올림처리
--MOD (값1, 값2) : 값1을 값2로 나눈 나머지
--ABS(값) : 값의 절대값

SELECT  ROUND(3.1415,1),
        FLOOR(3.1415), TRUNC(3.1415,2),
        CEIL(3.1415),
        MOD(5,2),
        ABS(-7)
FROM DUAL;

 

 

--DBMS_RANDOM.RANDOM : 2의 31승 이상 ~ 2의 -31승 미만의 정수 생성
--DBMS_RANDOM.VALUE(값1, 값2) : 값1 이상 값2 미만의 범위에서 난수생성
--DBMS_RANDOM.STRING(옵션,길이) : 옵션에 따라 문자열을 길이만큼 생성
--옵션 : U = 대문자만, L = 소문자만, A = 대소문자, 
		X = 대문자 + 소문자, P = 출력가능한 모든 값(공백 특수문자포함)

SELECT DBMS_RANDOM.RANDOM,
	FLOOR(DBMS_RANDOM.VALUE(1,45)),
   	 DBMS_RANDOM.STRING('X',12),
 	   DBMS_RANDOM.STRING('P',12)
 FROM DUAL

 

 

--SYSDATE : 현재시간(ORACLE 설치된 시스템 기준)
--TO_CHAR(날짜,형식) : 날짜를 형식에 맞추어 제공, 형식에서는 / . - 만 가능
--Y : 년 , MM : 월, DD : 일
- D,DAY,DY : 요일
--AM, PM : 오전, 오후
--HH : 시(12시간 기준), HH24 : 시(24시 기준), MI : 분, SS : 초
-- W : 달의 몇번째 주, IW : 연의 몇번째 주
-- Q : 분기

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD DAY AM HH24:MI:SS'),
		TO_CHAR(SYSDATE,'Q')
FROM DUAL

 

 

-- 9 : 숫자
-- 출력결과가 ####인 경우 : 형식변환이 정식적으로 처리가 되지 않을 때
-- 통화는 달러 유로 엔화만 가능 원화는 역슬러시라 처리가 안됨
-- 원화는 L로 표시

SELECT TO_CHAR(123456789, 'L999,999,999')
FROM DUAL;

 

 

-- 날짜 - 숫자 : 해당날짜로부터 숫자만큼 이전일
-- 날자 + 숫자 : 해당날짜로부터 숫자만큼 이후일
SELECT SYSDATE + 30
FROM DAUL;

 

 

예제

1,3분기에 입사한 사원들을 구하시오

SELECT ENAME
FROM EMP
--WHERE TO_CHAR(HIREDATE,'Q') = 1 OR WHERE TO_CHAR(HIREDATE,'Q') = 3 
--WHERE MOD(TO_CHAR(HIREDATE,'Q'),2) = 1
WHERE TO_CHAR(HIREDATE,'Q') IN (1,3)
;

 

 

 

 

 

 

 

--SELECT CONCAT('HELLO','WORLD')
--CONCAT(값1, 값2) : 문자열 값1과 값2를 이어줌 || 기능과 동일
SELECT 'HELLO' || 'WORLD' 
--SELECT CONCAT('HELLO','WORLD')
FROM DUAL
;

 

--LENGTH(값) : 값의 길이를 구할 때
--SUBSTR(값, 숫자1, 숫자2) : 값에서 숫자 1번째 글자부터 숫자2번째 만큼 자른다.
--INSTR(값1, 값2) : 값1에서 값2의 위치를 앞에서부터 찾는다
--INSTR(값1, 값2, 숫자) : 값1에서 숫자번째 글자부터 앞에서부터 값2를 찾는다
--INSTR(값1,값2,-1,숫자) : 값1에서 숫자번째 글자부터 뒤에서부터 값2를 찾는다.[추천안함]
--REPLACE(값1, 값2, 값3) : 값1에서 값2를 찾아 값3으로 변경
--LOWER(값) : 값을 소문자화, UPPER(값) : 값을 대문자화

SELECT LENGTH('HELLO WORLD!!'),SUBSTR('HELLO WORLD!!'3,2),INSTR('HELLO WORLD!!','L'),
INSTR('HELLO WORLD!!','L',-1',2), REPLACE('HELLO WORLD!!','L','K'), 
LOWER('HELLO WORLD!!'),UPPER('hello world!!')
FROM DUAL   
;

 

SQL에서 조건문

CASE WHEN 조건                          -- 조건이 TRUE이면 값을 돌려준다

        THEN  값

            ·

            ·

        ELSE 값N  => 생략가능          -- 모두 FALSE이면 값N을 돌려준다

END

 

 

 

DECODE(값, 값1, 값1A, 값2, 값2A, ... , 값N)

값이 값1과 같으면 값1A를 돌려준다.

값이 값2와 같으면 값2A를 돌려준다.

         ·

         ·

일치하는 값이 없으면 값N을 돌려준다. (값N은 생략가능)

 

SELECT CASE WHEN MOD(6,2) = 1
				THEN '홀수',
                ELSE '짝수'
       			END
       FROM DUAL
       
SELECT DECODE (MOD(6,2),1,'홀수','짝수')
FROM DUAL;

--NVL(값1, 값2) : 값1이 NULL이면 값2로 대체
SELECT ENAME, SAL, COMM, SAL + NVL(SAL,0)
FROM EMP;

NULL값에 그냥 연산해버리면 결과값도 NULL이 나옴 NVL로 NULL값이 나오는 것 대체값으로 바꿔주기

 

예제

 

-- 커미션을 받지 않는 사원의 급여를 10프로 인상하여 실급여를 구하시오
-- 실급여 = 급여 + 커미션

-- 1
SELECT ENAME,SAL,COMM, CASE WHEN COMM IS NULL
						THEN (SAL * 1.1)
                        ELSE SLA + COMM
                        END AS RSAL
FROM EMP;

-- 2
SELECT ENAME, SAL, COMM
	DECODE(COMM, NULL, SAL * 1.1, SAL + COMM) AS RSAL
FROM EMP;

-- 3
SELECT ENAME, SAL, COMM,
	SAL + NVL(COMM, SAL * 0.1) AS RSAL
FROM EMP;

'SQL' 카테고리의 다른 글

1231  (0) 2022.01.03
12 24  (0) 2021.12.24
21-12-20 서브쿼리와 JOIN  (0) 2021.12.20
211216 - 순차함수와 집계함수  (0) 2021.12.16
20211213[DBMS, 호스트명, SELECT ,FROM ,WHERE ,ORDER BY]  (0) 2021.12.13