SQL
- Structured Query Language
- 관계형 데이터베이스에서 데이터를 관리하기 위해 설계된 특수 목적 프로그래밍 언어
- 관계형 데이터 베이스에서 데이터 정의, 데이터 조작, 데이터 제어를 하기 위해 사용하는 언어
처리과정
요청 ▶️ 처리(Parse -> Bind -> excute -> fetch) ▶️ 결과
SQL 용어
- Attribute = Column: 더 이상 나눌 수 없는 특정 속성
- Tuple = Row: 연결된 데이터
- Field: 컬럼과 행이 겹치는 하나의 공간(셀)
- 기본키(Primary Key, PK): 각 행을 식별 할 수 있는 컬럼
- 테이블당 1개만 존재
- Null 입력 불가
- 외래키(Foreign Key, FK): 다른 테이블의 기본키를 참조하는 컬럼
- 여러개 존재 가능
- 기본키와 Table 제약조건으로 설정 가능
데이터 타입
문자 | VARCHAR2 | 가변 길이 문자 |
CHAR | 고정 길이 문자 | |
숫자 | NUMBER | 가변 길이 숫자 |
날짜/시간 | DATE | 날짜 및 시간 값 |
SQL 종류
데이터 조작어(DML)
- SELECT: 데이터 조회 및 검색
- INSERT: 데이터 입력
- UPDATE: 데이터 수정/변경
- DELETE: 데이터 삭제
데이터 정의어(DDL)
- CREATE: 데이터 구조 정의
- ALTER: 데이터 구조 변경
- DROP: 데이터 구조 삭제
- RENAME: 데이터 구조명 변경
데이터 제어어(DCL)
- GRANT: 객체 권한 부여
- REVOKE: 객체 권한 제거
트랜잭션 제어어(TCL)
- COMMIT: 트랜잭션 결과 적용
- ROLLBACK: 트랜잭션 결과 제거
SELECT
SELECT [DISTINCT] 컬럼명 AS "별명"
FROM 테이블명
WHERE 조건
ORDER BY 컬럼명(or 별명) [DESC];
▶️ 문자 사용 시 '문자' ex) WHERE name = '홍길동'
Alias(컬럼 별칭)
Alias를 사용하여 실행 결과 Header 부분 변경
Literal
임의로 지정한 문자열, 모든 행에 반복적으로 표시
ex) SELECT 'test' AS '테스트행'
FROM 테이블명
LIMIT 3;
테스트행 |
test |
test |
test |
DISTINCT
컬럼에 포함된 중복 값을 한번씩만 표시, SELECT절에 1회만 기술 가능
정렬(ORDER BY)
실행 결과를 특정 컬럼 값 기준으로 정렬할 때 사용 ex) ORDER BY 컬럼명 DESC;
- ASC(Default): 오름차순
- DESC: 내림차순
연산자
주어진 식을 계산하여 결과를 얻어내는 과정인 연산을 지원하기 위한 기호 또는 명령어
연산자 우선순위
0 | () | ||
1 | 산술 연산자 | +, -, *. / | NUMBER / DATE 자료형에 사용 가능 VARCHAR2에 숫자가 입력된 경우 사용 가능 |
2 | 연결 연산자 | ||, CONCAT | 문자와 문자 연결 공백 입력 시 '' 활용 |
3 | =, >, <, <>, !=, ^=, >=, <= | 비교 연산자 | 비교하는 컬럼값/표현식이 동일한 데이터 타입이어야 함 |
4 | IS NULL, LIKE, IN | ||
5 | BETWEEN-AND | ||
6 | NOT | 논리 연산자 | 조건에 대한 반대값 반환 |
7 | AND | 여러 조건이 동시에 TRUE일 때만 TRUE 반환 | |
8 | OR | 하나라도 TRUE이면 TRUE 반환 |
- 비교연산자
- 같지 않다: <>, !=, ^=
- BETWEEN-AND
WHERE LEVEL BETWEEN 4 AND 5;
▶️ LEVEL이 4이상 5이하 - LIKE
WHERE NAME LIKE'_지%';
▶️ 지 앞에 한 글자, 뒤에 아무 글자가 오는 일치하는 글자를 리턴 - IN
WHERE LEVEL IN (4, 5)
▶️ LEVEL이 4 또는 5
SQL 함수
하나의 큰 프로그램에서 반복적으로 사용되는 부분들을 분리한 작은 서브 프로그램
단일 행 함수(Output N개)와 다중 행 함수(Output 1개)로 구분
- 단일 행 함수: 각 행에 함수 적용
ex) 문자형 함수, 숫자형 함수, 날짜형 함수, 변환형 함수, ...
- 다중 행 함수: 모든 레코드를 한 번에 연산, 결과값 1개
ex) 집계함수, 순위함수
문자형 함수
1. LENGTH('문자'): 주어진 문자열의 길이를 NUMBER로 반환하는 함수
- VARCHAR2: 실제 데이터 길이 반환
- CHAR: 컬럼 전체 길이 반환
2. SUBSTR( COLUMN, Position, [Length]): Position부터 Length의 길이까지 문자열을 잘라서 CHARATER로 반환하는 함수
- Length 생략 시 Position부터 끝까지 반환
3. REPLACE( COLUMN, 원본 문자열, 변환 문자열): 주어진 문자열의 일부 문자열을 다른 문자열로 치환하여 String으로 반환하는 함수
4. LOWER(String)/UPPER(String): 문자열을 대문자(Upper)나 소문자(Lower)로 변환하는 함수
숫자형 함수
1. TRUNC(Number, [decimal_place]): 지정한 자릿수에 버림하는 함수
ex) TRUNC( 123.456, 2 ); ▶️ 123.4
2. ROUND(Number, [decimal_place]): 지정한 자릿수에서 반올림하는 함수
날짜형 함수
1. SYSDATE: 지정된 형식으로 날짜와 시간을 표시하는 함수
변환함수
1. TO_CHAR( 숫자|날짜, [format]): 숫자나 날짜로 주어진 데이터를 FORMAT 형태의 문자열 타입으로 변환하는 함수
▶️ FORMAT
날짜 | YYYY/YY/YEAR | 년도 | 2021/21/'2021' |
MONTH/MON/MM/RM | 달 | 9월/9월/09/로마기호 | |
DDD/DD | 일 | 001/01 | |
DAY/DY/D | 요일 | 목요일/목/5 (1:일 ~ 7:토) | |
HH(12)/HH24 | 시간 | 02/14 | |
AM|PM | 오전, 오후 | ||
MI | 분 | 10 | |
SS | 초 | 59 | |
숫자 | 9 | 자리 수 지정 | |
0 | 남는 자리에 0 표시 | ||
. | , | 지정한 위치에 . 또는 , 표시 |
2. TO_DATE( 문자열, [format]): 문자열로 주어진 데이터를 FORMAT 형태의 날짜 타입을 변환하는 함수
3. TO_NUMBER(문자열, [format]): 숫자로 변환될 때, 의미있는 형태의 문자열을 숫자 타입으로 변환하는 함수
집계함수
여러 행들의 그룹이 모여서 그룹당 단 하나의 결과를 돌려주는 함수
ex) SUM, AVG, MIN, MAX, COUNT
- GROUP BY 절과 함께 사용 시 소그룹화
GROUP BY
집계함수와 함께 사용되어 데이터를 소그룹으로 생성
- WHERE절에 그룹 함수 사용 불가
- 컬럼 이름만 사용 가능
HAVING
GROUP BY에 의해 그룹화된 그룹 함수 실행 결과를 제한
- SELECT, HAVING, ORDER BY에서 사용
- SUM / AVG의 경우 NULL값 제외하고 계산
순위함수
1. RANK() Over(ORDER BY ...): 정렬 결과를 기준으로 순위 출력 🚩 중복 순위 다음은 해당 개수 만큼 건너뛰고 반환 ex) 1, 2, 2, 4
2. DENSE_RANK() OVER(ORDER BY ...) 🚩 중복 순위가 있어도 건너뛰지 않고 순위 반환 ex) 1, 2, 2, 3
3. FIRST_VALUE(COLUMN) | LAST_VALUE OVER (PARTITION BY ...): 파티션별 가장 먼저 / 가장 나중에 나오는 값을 구하는 함수
NULL
1. NVL( COLUMN, 'ABCD' ): COLUMN 값이 NULL이면 ABCD로 변환
2. NVL2( COLUMN, 'ABCD', 'XXXX'): COLUMN 값이 NULL이 아니면 ABCD, NULL이면 XXXX반환
3. NULLIF( COLUMN, 'A') : 특정 데이터(A)를 NULL로 변환
IF-THEN
1. DECODE(COLUMN, SEARCH, RESULT, [DEFAULT]): SELECT 구문으로 IF-THEN 논리를 제한적으로 구현
ex) DECODE(GENDER, 'M', '남성', 'F', '여성'): GENDER가 M이면 남성 출력, F면 여성 출력
2. CASE COLUMN : DECODE와 같은 기능을 하는 내장 함수
WHEN SEARCH
THEN result
ELSE ...
END
'IT > CS' 카테고리의 다른 글
[JavaScript] ES6 자바스크립트 특징 (0) | 2021.08.20 |
---|---|
[DB] 절차형 SQL (0) | 2021.08.13 |
[소프트웨어공학] 소프트웨어 아키텍처 설계 (0) | 2021.08.08 |
[소프트웨어공학] 요구사항 분석 (0) | 2021.08.08 |
[DB] 엔터티, 속성, 관계 (0) | 2021.08.03 |