SELECT 쿼리의 결과 집합을 정렬하기 위한 구문 👉🏻 웬만하면 SELECT쿼리에 항상 추가하도록!
ASC 또는 DESC를 각각 적용할 수 있음SELECT * FROM emp
--ORDER BY empno; --오름차순
--ORDER BY empno ASC; --오름차순
ORDER BY empno DESC; --내림차순
--조회에 사용되지 않은 컬럼으로 정렬 가능
SELECT empno, ename, deptno
FROM emp
ORDER BY sal;
-- 2차 정렬
-- deptno으로 1차정렬 후 같은 depno 그룹 내에서 empno 내림차순으로 정렬
SELECT empno, ename, deptno FROM emp
ORDER BY deptno , empno DESC;
NULLS 키워드를 추가-- null값 포함 오름차순 정렬시 null값은 가장 나중으로(큰 값으로 치부됨)
SELECT empno, ename, deptno, comm FROM emp
ORDER BY comm;
-- null값 포함 내림차순 정렬 후 null값을 마지막으로 보내기
SELECT empno, ename, deptno, comm FROM emp
ORDER BY comm DESC NULLS LAST;
-- null값 포함 오름차순 정렬 후 null값을 처음으로 보내기
SELECT empno, ename, deptno, comm FROM emp
ORDER BY comm NULLS FIRST;
-- null값을 포함하는 컬럼에서 null값 제외 후 정렬
SELECT empno, ename, deptno, comm FROM emp
WHERE comm IS NOT NULL
ORDER BY comm;
💡 DESC NULLS LAST를 많이 사용
조회결과에서 중복된 행(데이터)을 제거하는 키워드 👉🏻 SELECT 키워드에 붙여서 사용
-- 중복조회되는 행(30, SALESMAN)을 1개만 조회되도록
SELECT DISTINCT
deptno, job
FROM emp
ORDER BY deptno, job;
-- 전체 사원들의 직무형태
SELECT DISTINCT job FROM emp;
-- 잘못된 사용법! : DISTINCT 키워드는 컬럼에 적용하는 것 X, 전체 데이터 비교를 위해 SELECT에 적용
SELECT DISTINCT depno, DISTINCT job FROM emp;
SELECT depno, DISTINCT job FROM emp;
두 개의 데이터를 하나의 문자로 연결하여 표현하는 연산자
||을 사용할 때 연산코드가 컬럼명이 되므로 Alias를 적용하면 좋음'' 두번 적어 표현SELECT ename || job FROM emp;
-- Alias 적용
SELECT ename || job EMPLOYEE FROM emp;
-- 작은 따옴표 문자데이터로 쓰기
SELECT ename || '''s sal is ' || sal FROM emp;
➡ [ename]'s sal is [sal]
오라클 SQL Functions , Built-in Functions,
테이스 용도로 오라클 DB가 제공하는 기본 테이블 👉🏻 SYS계정(관리자 계정)이 소유하는 테이블
테이블을 조회할 때 조회되는 모든 행에 각각 함수의 결과가 반영됨
행들의 조회결과를 하나의 결과로 도출하여 반영
숫자를 매개변수로 받아서 사용하는 함수 👉🏻 숫자값을 반환
-- 12.567 -> 소수점 3째자리에서 반올림
SELECT round(12.567, 2) FROM dual;
-- 56789 -> 10의자리에서 버림
SELECT trunc(56789, -2) FROM dual;
-- 13을 8로 나눈 나머지
SELECT mod(13, 8) FROM dual;
-- -12.567 올림 -> -12
SELECT ceil(-12.567) FROM dual;
-- -12.567 내림 -> -13
SELECT floor(-12.567) FROM dual;
-- 3의 4제곱 -> 81
SELECT power(3, 4) FROM dual;
-- 11의 제곱근 -> 3.3166...
SELECT sqrt(11) FROM dual;
문자를 매개변수로 받아서 사용하는 함수
💡 오라클은 한글 인코딩을 UTF-8을 기본으로 하며 UTF-8은 한글 한글자에 3바이트가 필요 👉🏻 한글을 바이트 단위로 다룰 때 조심
패딩, Padding 트림, trimltrim, rtrim의 경우 패턴을 지정하여 지우는 것이 가능trim의 경우 지우려는 문자를 명확히 하나만 지정해야함-- 'hELlo' 이니셜(첫글자) 대문자 -> Hello
SELECT initcap('hELlo') FROM dual;
--'Oracle SQL Developer'에서 5번째 인덱스부터 5글자로 자르기
SELECT substr('Oracle SQL Developer', 5, 5) FROM dual;
<padding>
SELECT
lpad('SQL', 10, '*') two
, rpad('SQL', 10, '*_') four
FROM dual;
SELECT
lpad('ABCDEFGHIJKL', 5)
FROM dual;
➡ ABCDE
<trim>
SELECT
' SQL '
, ltrim(' SQL ') l
, rtrim(' SQL ') r
, trim(' SQL ') t
, ltrim( rtrim(' SQL ') ) lr
FROM dual;
--lpad, rpad 패턴 지정하여 지우기
SELECT
'*_*_*DATA_*_*_'
, ltrim ( '*_*_*DATA_*_*_', '_*') l
, rtrim ( '*_*_*DATA_*_*_', '_*') r
FROM dual;
➡ DATA
--trim 종류
SELECT
'*****SQL******'
, trim('*' FROM '*****SQL******') t
, trim(LEADING '*' FROM '*****SQL******') lt
, trim(TRAILING '*' FROM '*****SQL******') tt
, trim(BOTH '*' FROM '*****SQL******') bt
FROM dual;
-- '안녕하세요'의 문자열 길이 -> 5
SELECT length('안녕하세요') FROM dual;
-- 'ACE 안녕하세요'문자열 바이트 수 -> 19
SELECT lengthb('ACE 안녕하세요') FROM dual;
-- 'ABCDEFGHI'에서 'DEF'문자열의 위치 ->4
SELECT instr('ABCDEFGHI', 'DEF') FROM dual;
날짜시간을 매개변수로 받아서 사용하는 함수
SELECT sysdate FROM dual;
-- 날짜 덧셈
SELECT
sysdate +1 d
FROM dual;
SELECT
sysdate s1
, to_char(sysdate, 'YYYY/MM/DD HH24:MI:SS') s2
, trunc(sysdate) t1
, to_char(trunc(sysdate), 'YYYY/MM/DD HH24:MI:SS') t2
FROM dual;
SELECT
sysdate
, systimestamp
FROM dual;
숫자, 문자, 날짜시간 사이에서 형변환을 해주는 함수
-- 자동형변환
SELECT
'12345' + 1
FROM dual;
➡ 12346
-- 날짜시간 데이터를 문자데이터로
-- sysdate를 표현형식을 지정해서 문자데이터로 변환
SELECT
to_char(sysdate, 'YYYY/MM/DD HH24:MI:SS') d
FROM dual;
-- 문자데이터를 날짜시간 데이터로
-- 날짜데이터처럼 보이지만 문자데이터인 경우 날짜데이터로 형변환
SELECT
to_date('22/7/5') d
FROM dual;