24.02.20

김무영·2024년 2월 21일

정렬

  • 문자열이 숫자형식의 값을 가졌을 때, 정렬을 수행하면 자릿수에 대한 정렬을 한다.
    • 각 자릿수 기준 오름차순 진행 ( EX 202의 두번째 자리 0보다 21의 두번째 자리 1이 높으므로 뒤로 감)

function

  • 자주 사용될 기능을 미리 구현하여 제공하는 것.
  • 오라클 자체에서 제공하는 함수 (built-in function) 와 사용자가 정의(user define function)
    • 사용자 정의 함수 : PL/SQL에서 정의할 수 있다.
    • create or replace function 함수명(매개변수,,,,)
      return 데이터형
      is
      변수 선언
      begin
      코드 작성
      return 값;
      end;
      /
  • insert, where절 사용, having절에서 사용
  • 사용법 )
    • 함수명( 컬럼명,, )
      패키지명.함수명( 컬럼명,, )
  • 수치 : abs, round, ceil, floor, trunc**
    • 반올림 : round(값), round(값, 자릿수)
      • 양의 정수를 사용하면, 실수부의 자릿수가 설정되고 반올림해서 볼 자릿수를 설정
      • 음의 정수를 사용하면, 정수부의 자릿수가 설정되고 해당 자리에서 반올림하여 보여진다.
    • 올림 : ceil(값)
      • 실수부에 하나라도 값이 있다면 올림처리
    • 내림 : floor(값)
    • 절사 : trunc(값), trunc(값, 자릿수)
      • 양의 정수를 사용하면, 실수부의 자릿수가 설정되고 설정된 자리를 절사한다.
      • 음의 정수를 사용하면, 정수부의 자릿수가 설정되고 해당 자리를 절사한다.
  • 문자열함수 : upper, lower, initcap, length, instr, substr, trim, ltrim, rtrim, lpad, rpad, replac,,,,
    • 문자열의 길이 : length(값)
    • 대문자 : upper(값)
    • 소문자 : lower(값)
    • 첫글자만 대문자로 변경( 띄어쓰기 이후 글자에도 적용된다. ) : initcap(값)
    • 특정문자의 인덱스 얻기 => 문자열이 없다면 0이 나온다.
      • instr(값, 찾을 문자열, 시작인덱스)
    • 자식문자열 얻기 : substr(값, 시작인덱스, 자를글자수)
    • 문자열의 앞, 뒤 공백을 제거 : trim
      • trim(값) trim(' ABC ') => 'ABC'
    • 문자열의 앞 공백을 제거 : ltrim
      • ltrim(값) ltrim(' ABC ') => 'ABC '
    • 문자열의 뒷 공백을 제거 : rtrim
      • rtrim(값) rtrim(' ABC ') => ' ABC'
    • 문자열의 앞, 뒤에 특정 문자 채우기 :
      lpad(값, 총글자수, 채울문자열),rpad(값, 총글자수, 채울문자열)
      • lpad('ABCDE',10,'#')
      • rpad('ABCDE',10,'#')
  • 조건 함수 : decode , case
    • decode : PL/SQL에서는 사용할 수 없다.
      • 조건을 부여하고 조건에 맞으면 짧을 코드를 실행해야할 때 사용
      • decode(컬럼명, 비교값, 실행코드,비교값,실행코드,,,,비교값이 없을 때 실행코드)
    • case문
      • select 조회 컬럼에서 사용.
      • 조회된 결과로 비교하여 다른 코드를 실행할 때 사용.
      • 조회 결과로 비교할 때 실행될 코드가 긴 경우 사용.
      • 문법 )
        • select case 컬럼명
          when 비교값 then 실행코드
          when 비교값 then 실행코드
          when 비교값 then 실행코드
          else 비교값이 없을 때 실행코드
          end alias
  • 집계함수 : count, sum, avg, max, min,rollup,cube,,,,
    • 모든 컬럼 값을 모아서 하나로 만드는 일.
    • group by절과 함께 사용하면 그룹별 집계를 얻을 수 있다.
      • select 컬럼명, 집계함수(일반컬럼명)
        from 테이블명
        group by 그룹으로 묶을 컬럼명
        • 일반컬럼명
          • 그룹별 집게를 얻기 위한 컬럼
          • group by 절에 포함되지 않는 함수도 사용 가능.
    • 여러 레코드가 조회되는 컬럼과 함께 사용하면 error가 발생.
    • where절에서는 집계함수를 직접 사용할 수 없다.
    • count : 레코드의 총 수를 얻을 때 사용. null인 컬럼은 count에 포함되지 않는다.
      • count(컬럼명)
    • sum : 컬럼의 합계를 구할 때 사용
      • sum(컬럼명)
    • avg : 컬럼의 평균을 구할 때 사용
      • avg(컬럼명)
    • max : 컬럼의 값 중 최고 값을 구할 때 사용
      • max(컬럼명)
    • min : 컬럼의 값 중 최저 값을 구할 때 사용
      • min(컬럼명)
    • 그룹별 합과 총계 얻기
      • rollup, cube 사용
        • 소계 후 전체 합계 얻기
          • group by rollup(그룹으로 묶을 컬럼명)
        • 전체 합계 출력후 소계 얻기
          • group by cube
      • rollup과 cube는 여러 컬럼이 그룹으로 묶이면 다른 결과를 보여준다.
      • 사용예 )
        • group by rollup(컬럼명,컬럼명)
          • 소계 후 합계가 출력되고, 마지막에 총 합계가 출력된다.
        • group by cube(컬럼명,컬럼명,,)
          • 그룹별 전체 합계가 먼저 출력된 후 합계와 소계가 출력된다.
  • 변환함수 : to_char , to_date , to_number
    • 문자 변환 : to_char
      • 숫자 -> 문자열로 변환 (2024 -> 2,024) : 패턴의 길이가 데이터의 크기보다 작다면 적용 결과가 ###으로 반환된다.
      • to_char(값,'pattern');
    • 날짜 변환 : to_date( 날짜형식의 문자열 ,' 패턴')
      • 날짜 형식의 문자열을 날짜로 변환.
      • 패턴에 패턴 문자나 특수문자가 아닌 문자열을 사용하면 error발생 => "문자열" 패턴이 길면 error발생
    • 숫자 변환 : to_number('문자열');
      • 숫자형식의 문자열을 숫자로 변환.
  • 랭크함수 : rank over, row_number over
    • 조회되는 결과에 순차적인 번호를 붙여 조회하는 함수.
    • rank() over()는 동일 순위가 출력된다.
      • 동일 번호 이후에는 그 수만큼 건너 뛴다.
    • row_number() over()는 동일 순위가 출력되지 않는다.
    • order by와 함께 사용하지 않는다. => 순위가 섞인다.
    • 사용법 )
      • rank() over((partition by : 생략가능) 컬럼명 order by 순위를설정할컬럼명 정렬조건(asc,desc))
      • row_number() over((partition by : 생략가능) 컬럼명 order by 순위를설정할컬럼명 정렬조건(asc,desc))
  • 날짜함수 : months_between, add_months
    • 날짜에 + 연산자를 사용하면 일자가 증가한다
    • 날짜에 - 연산자를 사용하면 일자가 감소한다.
    • add_months : 월을 더할 때 사용하는 함수
      • add_months (날짜, 더할 개월수)
    • months_between : 두 날짜간의 개월 차이 ( 실수로 결과가 나온다. )
      • months_between(큰날짜, 작은날짜)
  • null변환함수 : nvl, nvl2
    • null은 숫자도 문자열도아닌 사용할 수 없는 값.
    • null은 연산되면 연산의 결과가 null로 나온다.
    • nvl과 nvl2함수로 null인 컬럼 값을 다른 값으로 변경할 수 있다.
      • nvl : 컬럼값이 null인 경우 제공할 값을 설정할 때.
      • nvl2 : 컬럼값이 null인 경우와 null이 아닌 경우에 제공할 값을 설정할 때 사용.
      • 사용법 )
        • nvl(컬럼명, null일때 제공할 값) -> 컬럼의 데이터형과 일치한 값만 사용가능.
        • nvl2(컬럼명,null이 아닐때 제공할 값,null일 때 제공할 값)
  • 난수 생성 함수
    • dbms_random 패키지를 사용
    • 사용법 )
      • dbms_random.string(생성문자,자릿수)
      • 생성문자
        • u : 대문자
        • l : 소문자
        • a : 대,소문자가 합쳐진 난수
        • x : 대문자와 숫자가 합쳐진 난수
        • p : 특수문자혼합

컬럼에 NLL이 입력되는 상황

  • number, date는 insert할 때 컬럼명이 생략되면 null이 입력된다.
  • varchar2, char는 insert할 때 컬럼명이 생략되거나''가 입력되면 null이 입력된다.

dual 테이블

  • 모든 계정이 사용할 수 있는 가상 테이블.
  • 같은 이름으로 테이블이 생성되면 사라지고, 테이블을 삭제하면 다시 사용할 수 있다.
  • 함수를 테스트할 때 사용하면 편리
  • select에 정의하는 값으로 컬럼을 만들고, 한 행 조회를 수행한다.

subquery

  • query문 안에 select query문 정의하는 문법.
  • 단수행, 복수행 서브쿼리 모두 사용할 수 있다.
    • 단수행(Single-row subquery) : 서브쿼리의 조회 결과가 하나
    • 복수행(Multi-row subquery) : 서브쿼리의 조회 결과가 여러개
  • 조회결과를 사용하여 쿼리문을 실행해야 할 때.
  • create, insert, update, delete, select에서 사용할 수 있다.

0개의 댓글