지난 시간 select
을 활용한 DQL 에 대해 배웠고, 오늘은 select
에 이용되는 단일행 함수와 출력을 정렬하는 order by
에 대해 배웠다.
- order by
- 단일행 함수
: 검색한 데이터를 기준으로 정렬할 때 사용
select <컬럼명, 연산식, 리터럴> from 테이블명;
select <컬럼명, 연산식, 리터럴> from 테이블명 where <조건 : 레코드>;
위와 같이 DQL의 기본 활용과 where
을 통해 전체 데이터에 조건을 걸면서 우리가 검색-출력하는 데이터를 세부적으로 조작할 수 있었다.
오늘은 그 연장으로 조건에 따라 출력된 데이터를 정렬해보자.
asc
desc
: 내림차순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로 재정렬
: 각 행 하나마다 적용되는 함수
자바에 있는 메서드처럼 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;
아스키 코드(/, -, .)를 넘어가는 양식에 대해선 “”을 통해서 설정해줘야 한다.
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)
select
decode(substr(emp_no, 8, 1), 1, '남','여' )
from employee;
22) case : 특정 값에 대한 조건으로 경우의 수를 나눈 함수 (자바 IF)
select
case
when 조건 then 결과
end
from employee;