컴퓨터 과학/[프로그래머스] SQL DB Essentials

Chapter 06 DML : 내장 함수와 갱신문

계란💕 2022. 3. 8. 12:13

1. 단일행 내장함수(Single-Row Built-In Functions)

1-1. SQL 내장 함수

  - 단일행 내장 함수(SINGLE-ROW BUILT-IN FUNCTIONS): 함수의 입력이 단일 행

  -> 각 행에 대해 개별적으로 적용, 단 하나의 결과를 리턴 (SELECT, ORDER BY, WHERE절에 사용)

  -> 함수의 인자(argument)로 컬럼명, 표현식, 상수가 가능

  -> 함수의 인자로 함수를 사용하는 함수의 중첩(nesting)이 가능하다.

 

  Ex) 문자형

    - ASCII(char), CHAR(integer): 아스키 코드 값, 아스키 문자를 리턴

    - INSTR(str, substr): str에서 첫번째 나타나는 substr의 시작위치를 리턴

    - SUBSTR(str, position[, length]): position부터 length만큼의 문자열 리턴

    - REPLACE(str , from_str, str, to_str): str에 있는 from을 to로 바꾼다. 

    - REVERSE(str): 문자들의 순서를 거꾸로 한다. 

    - TRIM(str): 맨 앞, 맨뒤의 공백 제거

    - TRIM( {BOTH | LEADING | TRAILING} removed_str FROM str ): str에서 맨 앞/뒤의 removed_str을 제거한다.

    - STRCMP(str1, str2): 두 문자열을 비교, str1이 str2보다 작으면 -1, 같으면 0, 크면 1

 

  Ex) 숫자형

    - SIGN(x): x가 음수, 0, 양수 => -1/ 0/ 1

    - FLOOR(x): x보다 작은 최대 정수

    - CEILING(x): x보다 큰 최소 정수

    - ROUND(x, d): 소수점 이하 d자리까지 반올림

    - TRUNCATE(x, d): 소수점 이하 d자리까지 유지, 나머지 버림

    - MOD(x, y)

    - POWER(x, y)

    - LOG(b, x)

    - EXP(x)

    - SQRT(x)

    - SIN(x), COS(x), TAN(x)

    - ASIN(x), ACOS(x), ATAN(x)

 

  Ex) 날짜형

    - 표현  (문자형이 디폴트)

      -> 문자형: YYYY-MM-DD HH:MM:SS

      -> 숫자형: YYYYMMDDHHMMSS.uuuuuu 

           ( 소수점 이하 여섯번째 자리까지. 100만분의 1초까지 가능)

    - SYSDATE(), NOW() :컨텍스트에 따라 문자형 / 숫자형으로 출력 (SYSDATE(): 현재시간, NOW(): "실행"된 시간)

      -> NOW()는 날짜형 컴럼의 디폴트 값을 할당하는데 주로 사용

      -> CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP와 NOW()는 같다.

    - SLEEP(x): x초 동안 실행을 쉰다.

    - TIMESTAMP(): 날짜와 시간, DATE(): 날짜, TIME(): 시간(시 분 초)

      -> DAY(): 날짜의 "일" , DAYNAME(): 요일이름

      -> WEEKDAY(): 요일 번호 (월요일: 0)

    - 날짜 연산 직접 더하거나 빼면 오류가 난다. -> 문자열이 아닌 숫자로 변환하여 계산해야한다.

      -> INTERVAL, TIMESTAMPDIFF(unit, begin, end) 함수를 사용

      Ex) DATE(NOW()) - INTERVAL 20 YEAR

      Ex) TIMESTAMPDIFF(SECOND, '2010-01-01 10:00:00', '2010-01-01 10:45:59' ) diff

    - DATE_FORMAT(): 날짜와 시간의 출력 형식을 지정

      -> %H(h) / %i / %S(s) / %p : 시 / 분 / 초 /  AM/PM

      -> 대문자: 문자형, 소문자: 숫자형

    - GET_FORMAT( {DATE | TIME | DATETIME}, {'EUR' | 'USA' | 'JIS' | 'ISO' | 'INTERNAL'} )

    - CONVERT_TZ(dt, from_tz, to_tz): 날짜형 값 dt를 from_tz 시간대에서 to_tz 시간대로 변경

 

  Ex) 변환형

    - CAST(): 데이터를 다른 데이터 타입의 데이터로 변환 (숫자 <-> 문자, 날짜 )

      -> CAST(NOW() AS DATE)

    - CONVERT(): CAST()와 동일

      -> CONVERT(NOW() , DATE)  

    -  Oracle은 비표준 함수 to_number(), to_char(), to_date() 제공

 

  Ex) Null 관련 함수

    -  COALESCE(expr1, expr2, expr3, ... ) : null값이 아닌 최초의 expr을 리턴한다. (모두 null이면 null 리턴)

 

  Ex) 정규식 함수

    - Regular Expression: 특정 문자의 집합 또는 문자열을 기호로 바꾸는 방법

    - 문자열의 집합을 정확하게 표현하기 위해 쓰는 표현 규칙

    -  기본요소

    1) anchor: 비교한 문자열에서 패턴의 위치(^(hat): 시작점, $: 종료점)

    2) character set: 임의의  "한 문자 자리"에 나올 수 있는 문자들의 집합

    3) modifier: character set의 반복 횟수

      -> {n}: n회 반복

      -> {m, n}: m부터 n회까지 반복 가능       

      -> a?: a{1,}, 1회 이상 반복

      -> a*: a{0,}, 0회 이상 반복

      Ex) [:digit:]{4} : 숫자가 3회 반복

 

    - alnum: 알파벳 또는 숫자

    - Character set에서 사용하는 특수기능을 갖는 문자들

      -> - : 문자의 범위 지정

      -> . : 임의의 한 문자

      -> ^ : negation(NOT)

      -> | : 여러 대안을 서술(OR)

      -> (...) : 괄호 안의 정규식을 한 단위로 취급

      ->   Character set안에 '^'이 있으면 이는 시작 기호가 아닌 Not을 의미한다.

    -  backslash의 기능

      -> 특수 기능 갖는 문자 앞의 backslash: 특수 기능을 제거

      -> {,},(,),<,> 앞의 backslash: {,},(,),<,>에 특수 기능을 부여한다

 

    - REGEXP_LIKE( expr, pattern[, match_type] )

      ->컬럼(expr)의 문자열 내에 정규식(pattern)과 일치하는 부분분자열 있는지 검사

      -> match_type: c / i / m / n / u

      -> expr RLIKE pattern 으로 간결하게 쓸 수 있다.

 

    - REGEXP_INSTR( expr, pattern[, pos[, occurence[, match_type]]] )

      -> 컬럼의 문자열 내에 정규식과 일치하는 부분 문자열의 시작 위치를 리턴

      -> pos: 검사를 시작할 위치 (디폴트 1) / occurence: 몇 번째 부분 문자열을 찾는지 지정.

 

    - REGEXP_SUBSTR( expr, pattern[, pos[, occurence[, match_type]]] )

      -> 컬럼의 문자열내에서 정규식과 일치하는 부분 문자열을 리턴

 

    - REGEXP_REPLACE(expr, pattern[, replace[, pos[, occurence[, match_type]]]] )

      -> 정규식과 일치하는 모든 문자열을 대체 문자열 replace로 수정

 

    - REGEXP_COUNT( expr, pattern[, pos[, occurence[, match_type]]] )

      -> 정규식과 일치하는 모든 부분 문자열의 개수를 리턴

      -> MySQL에서는 제공하지 않는다.

 

    - RLIKE와 REGEXP연산자는 MySQL에서 제공하는 비표준 연산자이다.

 

1-2. 갱신문 

  1) INSERT문

  - 형식

INSERT INTO 테이블명 [(컬럼명_리스트)]
VALUES        {(컬럼값_리스트),}+;
INSERT INTO 테이블명 [(컬럼명_리스트)]
SELECT문;   -> 테이블이 미리 정의되어 있어야 한다. (CTAS문이랑 다름)

    -> CTAS문은 테이블을 먼저 생성하고 투플을 삽입한다. 

 

  2) DELETE문

DELETE FROM 테이블명
[WHERE		투플_조건식];

  - DELETE FROM(복구 가능) <-> TRUNCATE FROM(복구 불가)

 

  Note) DDL과 DML의  차이

  - DDL명령어는 하드디스트에 저장된 테이블에 직접 적용 (AUTO COMMIT)

  - DML명령어는 테이블을 메모리에 로딩하여 작업한다.

    -> COMMIT을 실행해야 메모리에서 실행된 명령을 하드디스트의 테이블에 실제로 반영

 

  

  3) UPDATE문

  - 테이블에서 (조건 만족하는) 투플의 컬럼 값을 수정

UPDATE 테이블명
SET 	{컬럼명 = 산술식,}+
[WHERE 투플_조건식];

 

  - 다중행 내장 함수(multi-row function): 함수의 입력이 여러 행

    -> 집단 함수/ 윈도우 함수/ 그룹 함수

 

 

본 게시글은 프로그래머스의 "학교 밖에서 듣는 전공 필수SQL/DB Essentials" 강의 내용을 토대로 업로드 했습니다.

(코드리뷰 개선 과정)

 

 

[스터디/2기] 학교 밖에서 듣는 전공필수 SQL/DB Essentials

⏰마지막 할인 중 2기 일정이 맞지 않다면 오픈 알림 신청하고 최저가에 수강하세요! 오픈 알림 신청 개발자에게 데이터베이스를 이해하는 능력은 필수! 데이터베이스의 기본 개념부터 ERD를 읽

programmers.co.kr

https://programmers.co.kr/learn/courses/13484