IT/CS

[DB] SQL 정리

Terriermon 2021. 8. 12. 22:29

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