Day 21. 오라클 DB 1

ho_c·2022년 3월 20일
0

국비교육

목록 보기
21/71
post-thumbnail
post-custom-banner

지난 시간 select을 활용한 DQL 에 대해 배웠고, 오늘은 select 에 이용되는 단일행 함수와 출력을 정렬하는 order by 에 대해 배웠다.


📝목차

  1. order by
  2. 단일행 함수

1. order by <기준>

: 검색한 데이터를 기준으로 정렬할 때 사용

select <컬럼명, 연산식, 리터럴> from 테이블명;
select <컬럼명, 연산식, 리터럴> from 테이블명 where <조건 : 레코드>;

위와 같이 DQL의 기본 활용과 where을 통해 전체 데이터에 조건을 걸면서 우리가 검색-출력하는 데이터를 세부적으로 조작할 수 있었다.
오늘은 그 연장으로 조건에 따라 출력된 데이터를 정렬해보자.

[ 특징 ]

  • 쿼리문의 실행순서 중 가장 마지막이다.
  • 기본 오름차순 적용이다. asc
  • desc : 내림차순
  • 기준이 2개 이상이라면, 순서대로 정렬된다.
select emp_id, emp_name, salary from employee; -- 기본
select emp_id, emp_name, salary from employee order by 3; -- 숫자로도 설정가능
select * from employee order by dept_code, salary; -- dept_code 정렬 후, salary로 재정렬

2. 단일행 함수

: 각 행 하나마다 적용되는 함수

자바에 있는 메서드처럼 DBMS 안에서도 우리가 사용할 수 있는 함수는 매우 많다.
이를 이용하여, 더 많은 조건을 걸어서 데이터를 출력받을 수 있다.

문자 관련 함수

1) length : 문자열 길이

select length('Hello') from dual; -- 문자열의 길이를 리턴 [5]

2) lengthb : 문자열의 바이트 수

select lengthb('Hello') from dual; -- 영문자는 한 글자당 1바이트 
select lengthb('한글') from dual; -- 한 글자당 3바이트

3) instr : 문자열에서 시작을 기준으로 찾는 문자의 n번째 인덱스를 반환

instr('문자열', '찾고자 하는 거', 전체 인덱스 중 시작점, 발견 시점);
select instr('Hello World Hi High', 'H', 1, 1) from dual; 

4) substr : 문자열 안에서 원하는 만큼의 문자열을 추출하는 기능

substr('Now on Oracle practice',시작점, 시작포함 n개)
select substr('Now on Oracle practice',8,6) from dual;

5) distinct : 중복 제거

select distinct substr(emp_name,1,1) from employee;

6) replace : 문자열 치환 기능

select replace('Hello Java', 'Java', 'oracle') from dual;
select replace(email, 'kh', 'iei') from employee;

숫자 관련 함수

7) abs : 절대값 구하는 기능

select abs(-1) from dual; -- 1

8) mod : 나머지 연산자(%)

select mod(10,2) from dual; -- 0
select mod(10,3) from dual; -- 1

9) round : 반올림 함수

select round(126.756, 소수점 기준 몇 번째 자리) from dual;
select round(126.756, -1) from dual; -- 130
select round(127.243, 1) from dual; -- 128.2

10) floor : 버림 함수

11) trunc : 소수점 자리수를 지정하여 버림

select trunc(123.456, 1) from dual; -- 123.4

12) ceil : 올림 기능 - 강제로 올려버림

select ceil(122.024) from dual; -- 123

날짜 관련 함수

13) sysdate : 현재 시간 값을 가져오는 함수의 일종. 소괄호X

select sysdate from dual;

14) months_between : 두 날짜 사이의 개월 수 차이를 반환

select emp_name, hire_date, months_between(sysdate, hire_date) from employee;

15) add_months : 인자로 전달받은 날짜에 인자로 전달받은 숫자만큼의 개월 수를 더해 반환

select add_months('22/03/17',6) from dual; -- 22/09/17

16) next_day : 인자로 전달받은 날짜에 인자로 전달받은 요일 중 가장 가까운 다음 날짜를 반환

select sysdate, next_day('22/03/17', '토요일') from dual; --'22/03/19'

17) last_day : 인자로 전달받은 날짜가 속한 달의 마지막 날을 구해서 반환

select last_day(sysdate) from dual;

18) extract : 인자 날짜로부터 원하는 값을 추출

select extract(year from sysdate) from dual;
select extract(month from sysdate) from dual;
select extract(day from sysdate) from dual;
select emp_name,extract(year from hire_date) from employee;

형 변환 함수

19) to_char : 날짜, 숫자 데이터를 문자열로 변환하는 함수

< 날짜의 경우 >

아스키 코드(/, -, .)를 넘어가는 양식에 대해선 “”을 통해서 설정해줘야 한다.

select to_char(sysdate, 'YYYY/MM/DD') from dual;
select to_char(sysdate, 'YYYY-MM-DD HH:MI:SS') from dual; 
-- 오라클 DBMS에선 mm = MI
select to_char(sysdate, 'YYYY"년 "MM"월 "DD"일" HH24:MI:SS') from dual;

아스키 코드(/, -, .)를 넘어가는 양식에 대해선 “”을 통해서 설정해줘야 한다.

< 숫자의 경우 >

  • 원본 데이터 개체보다 형식의 크기가 커야 한다. 작으면 깨짐
  • L은 시스템 국가의 화폐 기호가 붙는다. 9 대신 0을 쓰면, 빈자리를 0으로 채워준다.
select emp_name, to_char(salary, 'L999,999,999') from employee;
select emp_name, to_char(salary, '000,000,000')||'원' from employee;

20) to_date : 문자, 숫자 데이터를 날짜로 변경해준다.

  • 인자간 양식이 일치해야 한다.
select to_date('2019년01월02일', 'YYYY"년"MM"월"DD"일"') from dual;
select to_date(1901020820, 'YYMMDDHHMI') from dual;
  • 입력되는 데이터들의 범위가 일치해야된다. 넘어가면 에러가 발생한다.

조건식 관련 함수

21) decode : 삼항 연산자 (자바 swicth)

  • 가변 인자를 가진다.
  • `decode(조건, 결과1, 결과1에 대한 동작, 결과2, 결과2에 대한 동작)
  • ‘같다’ 라는 연산만 가능하다.
  • 조건에 대한 인자는 계속 추가될 수 있다.
select 
    decode(substr(emp_no, 8, 1), 1, '남','여' ) 
from employee;

22) case : 특정 값에 대한 조건으로 경우의 수를 나눈 함수 (자바 IF)

select
    case
        when 조건 then 결과
    end
from employee;
profile
기록을 쌓아갑니다.
post-custom-banner

0개의 댓글