[DB][SQL][국비교육] Day 22

Ga02·2023년 1월 27일

국비교육

목록 보기
21/82

🔍 ORDER BY 절

SELECT 쿼리의 결과 집합을 정렬하기 위한 구문 👉🏻 웬만하면 SELECT쿼리에 항상 추가하도록!

  • 작성 위치는 SELECT 구문의 마지막 절
  • 기본 정렬은 오름차순이지만 내림차순으로 설정 가능
  • 기준 컬럼들마다 ASC 또는 DESC를 각각 적용할 수 있음
    • ASC, ASCending, 오름차순 정렬 👉🏻 생략 가능
    • DESC, DeSCending, 내림차순 정렬
  • 조회하는 컬럼과 정렬하는 컬럼이 일치하지 않아도 됨
  • 정렬은 여러번 가능 👉🏻 먼저 적힌 컬럼 순서대로 정렬됨
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;

➰ NULL 값을 포함하는 컬럼의 정렬

  • 오름차순(ASC)일 때 NULL이 마지막에 위치
  • 내림차순(DESC)일 때 NULL이 처음에 위치
  • NULL 값에 대한 정렬 순서를 변경하려면 NULLS 키워드를 추가
    • NULLS FIRST : NULL값들을 처음에 보이도록 정렬
    • NULLS LAST : NULL값들을 마지막에 보이도록 정렬
--  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를 많이 사용


🔍 DISTINCT 키워드

조회결과에서 중복된 행(데이터)을 제거하는 키워드 👉🏻 SELECT 키워드에 붙여서 사용

  • 조회된 행에 컬럼의 모든 값이 중복일 때 그 행들을 하나의 행으로 표현
  • ❗ 컬럼에 각각 DISTICT 키워드를 적용하는 것이 아님
    👉🏻 중복의 기준은 컬럼이 아니라 데이터 전체이므로 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;

🔍 데이터 연결 연산자, ||

두 개의 데이터를 하나의 문자로 연결하여 표현하는 연산자

  • 문자, 숫자, 날짜시간(Datetime)들을 하나의 문자로 표현할 수 있음
  • ||을 사용할 때 연산코드가 컬럼명이 되므로 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,

➰ DUAL 테이블

테이스 용도로 오라클 DB가 제공하는 기본 테이블 👉🏻 SYS계정(관리자 계정)이 소유하는 테이블

  • 조회결과를 하나의 행으로 보여줌
  • 연산의 결과, 함수의 수행결과, 가상 컬럼 등을 확인할 때 사용

➰ 단일 행 함수, Single Row Function

테이블을 조회할 때 조회되는 모든 행에 각각 함수의 결과가 반영됨

➰ 그룹함수, Group Function

행들의 조회결과를 하나의 결과로 도출하여 반영


🔍 단일행 함수

➰ 숫자함수, Numeric Function

숫자를 매개변수로 받아서 사용하는 함수 👉🏻 숫자값을 반환

-- 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;

➰ 문자함수, Character Function

문자를 매개변수로 받아서 사용하는 함수
💡 오라클은 한글 인코딩을 UTF-8을 기본으로 하며 UTF-8은 한글 한글자에 3바이트가 필요 👉🏻 한글을 바이트 단위로 다룰 때 조심

  • 반환값이 문자인 함수
    • 패딩, Padding
      : 문자가 표현될 공간을 미리 확보하고 그 안에 문자를 추가 -> 빈공간은 패딩에서 설정한 문자로 채움(기본 패딩문자는 띄어쓰기)
      - 확보하는 공간의 크기가 데이터보다 작으면 공간만큼만 잘려서 표현됨
    • 트림, trim
      : 문자 양 끝단에 있는 ' '(띄어쓰기)를 제거하는 함수
      • 문자를 지정하여 제거하기 가능
        ltrim, 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;

➰ 날짜시간 함수. Datatime Function

날짜시간을 매개변수로 받아서 사용하는 함수

  • sysdate
    yy/mm/dd 형식으로 현재 날짜, 시간을 반환하는 함수 👉🏻 시간은 초단위까지 표현
SELECT sysdate FROM dual;

--  날짜 덧셈
SELECT 
    sysdate +1 d
FROM dual;
  • trunc(date)
    자정을 기준으로 시간을 잘라 날짜만 표현
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;
  • systimestamp
    현재 날짜와 시간을 밀리초단위까지 표현
    • 타임존을 설정할 수 있음
SELECT 
    sysdate
    , systimestamp
FROM dual;

➰ 변환함수, Conversion Function

숫자, 문자, 날짜시간 사이에서 형변환을 해주는 함수

  • 숫자만 있는 숫자서식문자는 덧셈시 숫자타입으로 자동 형변환
--	자동형변환
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;
profile
IT꿈나무 댓츠미

0개의 댓글