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" 강의 내용을 토대로 업로드 했습니다.
(코드리뷰 개선 과정)
'컴퓨터 과학 > [프로그래머스] SQL DB Essentials' 카테고리의 다른 글
Chapter 07 DML : 집합과 조인 연산을 사용한 검색문 (다중 테이블 검색문) (0) | 2022.03.12 |
---|---|
[3주차] 강의노트 DML- Function & Update (0) | 2022.03.12 |
Chapter 05 DML : 단일 테이블 검색문 (Part 2) (0) | 2022.03.06 |
[2주차] 강의노트 DDL & DML (0) | 2022.03.05 |
Chapter 04 DML : 단일테이블 검색문(Part 1) (0) | 2022.03.02 |