본문 바로가기
개발자/DB 오라클

데이터베이스 SQL 오라클 dual 테이블

by mansfield 2022. 2. 23.
반응형

-- dual 테이블

-- 오라클에서 자체적으로 제공해 주는 테이블

-- 간단하게 함수를 이용해서 계산, 결과값을 확인할 때 사용하는 테이블.
-- 오직 한 행, 한 칼럼만을 담고 있는 테이블.
-- 사용 용도 : 특정 테이블을 생성할 필요 없이 함수 또는 계산을 하고자 할 때 사용.

-- 오라클에서 제공해 주는 함수들.
-- 1. 날짜와 관련된 함수들
--    1) sysdate : 현재 시스템의 날짜를 구해 오는 함수
                select sysdate from dual;

--    2) add_months(현재 날짜, 숫자(더할 개월 수)) : 현재 날짜에서 개월 수를 더해주는 함수.
                select add_months(sysdate, 3) from dual;
                
--    3) next_day(현재 날짜, '요일') :  다가올 날짜(요일)을 구해주는 함수.  
                select next_day(sysdate, '월요일') from dual;
                
--    4) to_char(날짜, '날짜형식') : 형식에 맞게 문자열로 날짜를 출력하는 함수.     
                select to_char(sysdate, 'yyyy/mm/dd') from dual;
                select to_char(sysdate, 'mm-dd-yyyy') from dual;
      
--    5) months_between(큰 날짜, 날짜) : 두 날짜 사이의 개월수를 출력해주는 함수
                select months_between('22/07/07', sysdate) from dual;  
                
--    6) last_day() : 주어진 날짜가 속한 달의 마지막 날짜를 반환하는 함수.
                select last_day(sysdate) from dual;             
      
      
-- 2. 문자와 관련된 함수들.
--    1) concat('문자열1', '문자열2') : 문자열을 연결하는 함수.
                select concat('안녕', '하세요!') from dual;

--              literal 연산자 : 문자열을 연결하는 연산자.
                select '오하요' || '고자이마스!' from dual;

--    2) upper() : 소문자를 대문자로 바꿔주는 함수.
                select upper('happy day') from dual;

--    3) lower() : 대문자를 소문자로 바꿔주는 함수
                select lower('HELLO WORLD') from dual;

--    4) substr('문자열', x, y) : 문자열을 x부터 y의 길이만큼 추출해 내는 함수.                 
                select substr('ABCDEFG', 3, 2) from dual;  --CD

--              x값이 음수인 경우에는 오른쪽 부터 시작이 된다.
                select substr('ABCDEFG', -3, 2) from dual;  --EF
                
--    5) 자릿수를 늘려주는 함수
--       lpad('문자열', '전체자릿수', '늘어난 자릿수에 들어갈 문자열') 
--            : 왼쪽 자릿수를 늘려주는 함수.
                select lpad('ABCDEFG', 15, '*') from dual;


--       rpad('문자열', '전체자릿수', '늘어난 자릿수에 들어갈 문자열') 
--            : 오른쪽 자릿수를 늘려주는 함수.
                select rpad('ABCDEFG', 15, '=') from dual;
                
--    6) 문자를 지워주는 함수.
--       왼쪽 문자를 지워주는 함수.
--       ltrim() : 왼쪽 문자를 지워주는 함수
                select ltrim('ABCDEFGA', 'A') from dual;
         
--       오른쪽 문자를 지워주는 함수.
--       rtrim() : 오른쪽 문자를 지워주는 함수
                select rtrim('ABCDEFGA', 'A') from dual;
                
--    7) replace() : 문자열을 교체해주는 함수.
--       형식) replace('원본 문자열', '교체될 문자열', '새로운 문자열')
                select replace('Java Program', 'Java', 'Spring') from dual;
                
--[문제1] emp 테이블에서 결과가 아래와 같이 나오도록 화면에 보여주세요.
--결과) 'SCOTT의 담당업무는 ANALYST 입니다.'
--단, concat() 함수를 이용하세요.
select concat (ename, '의 담당업무는 '), concat(job, '입니다.') from emp;

--[문제2] emp테이블에서 결과가 아래와 같이 나오도록 화면에 보여주세요.
--결과) 'SCOTT의 연봉은 36000입니다.'
-- 단, concat() 함수를 이용하세요.
select concat (ename, '의 연봉은 '), concat(sal*12, '입니다.') from emp;

--[문제3] member10테이블에서 결과가 아래와 같이 나오도록 화면에 보여주세요.
--결과) '사나 회원의 직업은 대학생입니다.'
-- 단, concat() 함수를 이용하세요.
select concat(memname, ' 회원의 직업은 '), concat(job, '입니다.') from member10;
select concat(memname || ' 회원의 직업은', job || '입니다.') from member10;

--[문제4] emp테이블에서 사번, 이름, 담당업무를 화면에 보여주세요.
-- 단, 담당업무는 소문자로 변경하여 화면에 보여주세요.
select empno, ename, lower(job) from emp;

--[문제5] 여러분의 주민등록번호 중에서 생년월일을 추출하여 화면에 보여주세요.
select substr('940116-1234567',1 ,6) from dual;
select to_char(to_date((substr('940116-1234567',1 ,6))), 'yyyy/mm/dd') from dual;

--[문제6] emp테이블에서 담당업무에 'A' 라는 글자를 '$'로 바꾸어 화면에 보여주세요.
select replace(job, 'A', '$') from emp;

--[문제7] member10 테이블에서 직업이 '대학생'인 정보를 '학생'으로 바꾸어 화면에 출력해보세요.
select replace(job, '대학생', '학생') from member10;

--[문제8] member10 테이블에서 주소에 '서울시'로 된 정보를 '서울특별시'로 바꾸어 화면에 보여주세요.
select replace(addr, '서울시', '서울특별시') from member10;


-- 3. 숫자와 관련된 함수들.
--    1) abs(정수) : 절대값을 구하는 함수.
      select abs(23) from dual;         --23
      select abs(-23) from dual;        --23 

--    2) sign(정수) : 양수(1), 음수(-1), 0을 반환해주는 함수.
      select sign(15) from dual;
      select sign(15), sign(-15), sign(0) from dual;
      
--    3) round(실수) :  반올림을 해주는 함수.      
      select round(1234.5678) from dual;      --1235

--       반올림을 할 때 자릿수를 지정.
--       형식) round(숫자[필수], 반올림 위치[선택])
--       음수값 지정시 자연수(정수) 쪽으로 한자리씩 위로 반올림을 한다.
      select round(0.1234567, 6) from dual;  --0.123457
      select round(2.3423557, 4) from dual;  --2.3424
      select round(1234.5678, -1) from dual; --1230 : 정수부터 한자리씩 위로 반올림
      
--    4) trunc() : 소수점 이하 자릿수를 잘라내는 함수.
--       형식) trunc(숫자[필수], 버릴 위치[선택])
      select trunc(1234.1234567, 0) from dual;  --1234 
      select trunc(1234.1234567, 4) from dual;  --1234.1234      
      select trunc(1234.1234567, -3) from dual;  --1000 : 정수쪽으로 자른다. 0으로 치환
      
--    5) ceil() : 무조건 올림해 주는 함수.
      select ceil(22.8) from dual;  --23
      select ceil(22.1) from dual;  --23
      
--    6) power(x의, n제곱) : 제곱을 구해주는 함수.
      select power(4, 3) from dual; -- 64
      
--    7) mod() : 나머지를 구해주는 함수.
--       형식) mod(나눗셈이 될 숫자, 나눌 숫자)
      select mod(17, 7) from dual;  --3
      
--    8) sqrt() : 제곱근을 구해주는 함수
      select sqrt(3) from dual;
      select sqrt(16) from dual;   --4  : 16은 4의 제곱
      

300x250

댓글