과목 II. SQL 기본 및 활용
제1장 SQL 기본
제1절 관계형 데이터베이스 개요
제2절 SELECT 문
제3절 함수
제4절 WHERE 절
제5절 GROUP BY, HAVING 절
제6절 ORDER BY 절
제7절 조인
제8절 표준 조인
# 데이터 조작어(DML: Data Manipulation Language)
* 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 한다. (SELECT)
* 데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류의 명령어들을 말한다. 예를 들어 데이터를 테이블의 새로운 행에 집어넣거나, 원하지 않는 데이터를 삭제하거나 수정하는 것들의 명령어 (INSERT, UPDATE, DELETE)
* INSERT: 테이블에 데이터를 입력할 때 사용
* UPDATE: 입력한 정보 중에 잘못 입력되거나 변경이 발생되어 정보를 수정할 때 사용
* DELETE: 테이블의 정보가 필요 없게 되었을 경우 데이터 삭제를 수행
# 데이터 정의어(DDL: Data Definition Language)
* 테이블과 같은 데이터 구조를 정의하는 데 사용되는 명령어들로 그러한 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어 (CREATE, ALTER, DROP, RENAME)
# 데이터 제어어(DCL: Data Control Language)
* 데이터베이스에 접근하고 객체들을 사용할 수 있도록 권한을 부여하거나 회수하는 명령어 (GRANT, REVOKE)
# 트랜잭션 제어어(TCL: Transaction Control Language)
* 논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업 단위(트랜잭션) 별로 제어하는 명령어
* COMMIT, ROLLBACK
# SELECT 문
* WHERE 절은 필수가 아니므로 생략 가능하다.
* DISTINCT 옵션을 통해 중복된 데이터가 있을 경우 1건으로 처리해 출력할 수 있다.
* SELECT, FROM은 필수이므로 생략되면 에러가 발생된다.
* SELECT List에 서브쿼리가 사용될 수 있다.
# WHERE 절
* 데이터베이스에서 조회되는 데이터에 대한 조건을 설정하여 원하는 데이터만들 검색하기 위해 사용하는 절
* 집계 함수를 사용할 수 없다.
# COLUMN1의 값이 NULL이 아닌 경우를 찾아내는 문장(ANSI 표준 기준)
* SELECT * FROM MYTABLE WHERE COLUMN1 IS NOT NULL;
# 함수의 실행 결과
* LOWER('SQL Expert'): 'sql expert'
* UPPER('SQL Expert'): 'SQL EXPERT'
* ASCII('A'): 65
* LTRIM('xxYYZZxYZxx', 'x'): ' YYZZxYZxx'
# 연산자의 종류
## 비교 연산자
* =: 같다.
* >: 보다 크다.
* >=: 보다 크거나 같다.
* <: 보다 작다.
* <=: 보다 작거나 같다.
## SQL 연산자
* BETWEEN a AND b: a와 b의 값 사이에 있으면 된다. (a와 b값이 포함됨)
* IN (list): 리스트에 있는 값 중에서 어느 하나라도 일치하면 된다.
* LIKE '비교 문자열': 비교 문자열과 형태가 일치하면 된다. (%, _ 사용)
* IS NULL: NULL 값인 경우
## 논리 연산자
* AND: 앞에 있는 조건과 뒤에 오는 조건이 참(TRUE)이 되면 결과도 참(TRUE)이 된다. 즉 앞의 조건과 뒤의 조건을 동시에 만족해야 한다.
* OR: 앞에 있는 조건이 참(TRUE)이거나 뒤의 조건이 참(TRUE)이 되어야 결과도 참(TRUE)이 된다. 즉, 앞뒤의 조건 중 하나만 참(TRUE)이면 된다.
* NOT: 뒤에 오는 조건에 반대되는 결과를 되돌려 준다.
## 부정 비교 연산자
* !=: 같지 않다.
* ^=: 같지 않다.
* <>: 같지 않다. (ISO 표준, 모든 운영체제에서 사용 가능)
* NOT 칼럼명 =: ~와 같지 않다.
* NOT 칼럼명 >: ~보다 크지 않다.
## 부정 SQL 연산자
* NOT BETWEEN a AND b: a와 b의 값 사이에 있지 않다. (a, b값을 포함하지 않는다.)
* NOT IN (list): 리스트 값과 일치하지 않는다.
* IS NOT NULL: NULL 값을 갖지 않는다.
# GROUP BY 절과 HAVING 절
* 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행한다.
* GROUP BY 절에서는 SELECT 절과는 달리 ALIAS 명을 사용할 수 없다.
* 집계 함수는 WHERE 절에는 올 수 없다.
* HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치한다.
# 함수
* LENGTH: 문자열의 길이를 반환하는 함수
* CHR: 주어진 ASCII 코드에 대한 문자를 반환하는 함수
* REPLACE: 문자열을 치환하는 함수
# 단일행 함수
## 문자형 함수: 문자를 입력하면 문자나 숫자 값을 반환한다. (LOWER, UPPER, SUBSTR/SUBSTRING, LENGTH/LEN, LTRIM, RTRIM, TRIM, ASCII)
* LOWER(문자열): 문자열의 알파벳 문자를 소문자로 바꾸어 준다.
* UPPER(문자열): 문자열의 알파벳 문자를 대문자로 바꾸어 준다.
* ASCII(문자): 문자나 숫자를 ASCII 코드 번호로 바꾸어 준다.
* CHR/CHAR(ASCII 번호): ASCII 코드 번호를 문자나 숫자로 바꾸어 준다.
* CONCAT(문자열1, 문자열2): 오라클, My SQL에서 유효한 함수이며 문자열1과 문자열2를 연결한다. 합성 연산자 '||' (오라클), '+' (SQL Server)와 동일하다.
* SUBSTR/SUBSTRING(문자열, m[, n]): 문자열 중 m 위치에서 n개의 문자 길이에 해당하는 문자를 돌려준다. n이 생략되면 마지막 문자까지이다.
* LENGTH/LEN(문자열): 문자열의 개수를 숫자값으로 돌려준다.
* LTRIM(문자열, [지정 문자]): 문자열의 첫 문자부터 확인해서 지정 문자가 나타나면 해당 문자를 제거한다. (지정 문자가 생략되면 공백 값이 디폴트). SQL Server에서는 LTRIM 함수에 지정 문자를 사용할 수 없다. 즉, 공백만 제거할 수 있다.
* RTRIM(문자열, [지정 문자]): 문자열의 마지막 문자부터 확인해서 지정 문자가 나타나는 동안 해당 문자를 제거한다. (지정 문자가 생략되면 공백 값이 디폴트). SQL Server에서는 RTRIM 함수에 지정 문자를 사용할 수 없다. 즉, 공백만 제거할 수 있다.
* TRIM([leading | trailing | both] 지정 문자 FROM 문자열): 문자열에서 머리말, 꼬리말, 또는 양쪽에 있는 지정 문자를 제거한다. (leading | trailing | both가 생략되면 both가 디폴트). SQL Server에서는 TRIM 함수에 지정 문자를 사용할 수 없다. 즉, 공백만 제거할 수 있다.
## 숫자형 함수: 숫자를 입력하면 숫자 값을 반환한다. (ABS, MOD, ROUND, TRUNC, SIGN, CHR/CHAR, CEIL/CEILING, FLOOR, EXP, LOG, LN, POWER, SIN, COS, TAN)
## 날짜형 함수: DATE 타입의 값을 연산한다. (SYSDATE/GETDATE, EXTRACT/DATEPART, TO_NUMBER(TO_CHAR(d, 'YYYY' | 'MM' | 'DD')) / YEAR | MONTH | DAY
## 변환형 함수: 문자, 숫자, 날짜형 값의 데이터 타입을 변환한다. (TO_NUMBER, TO_CHAR, TO_DATE / CAST, CONVERT)
## NULL 관련 함수: NULL을 처리하기 위한 함수 (NVL/ISNULL, NULLIF, COALESCE)
* NVL(표현식1, 표현식2) / ISNULL(표현식1, 표현식2): 표현식1의 결괏값이 NULL이면 표현식2의 값을 출력한다. 단 표현식1과 표현식2의 결과 데이터 타입이 같아야 한다. NULL 관련 가장 많이 사용되는 함수이므로 상당히 중요하다.
* NULLIF(표현식1, 표현식2): 표현식1이 표현식2와 같으면 NULL을, 같지 않으면 표현식1을 리턴한다.
* COALESCE(표현식1, 표현식2, ...): 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타낸다. 모든 표현식이 NULL이라면 NULL을 리턴한다.
# 집계 함수
* COUNT(*): NULL 값을 포함한 행의 수를 출력한다.
* COUNT(표현식): 표현식의 값이 NULL 값인 것을 제외한 행의 수를 출력한다.
* SUM([DISTINCT | ALL] 표현식): 표현식의 NULL 값을 제외한 합계를 출력한다.
* AVG([DISTINCT | ALL] 표현식): 표현식의 NULL 값을 제외한 평균을 출력한다.
* MAX([DISTINCT | ALL] 표현식): 표현식의 최댓값을 출력한다. (문자, 날짜 데이터 타입도 사용 가능)
* MIN([DISTINCT | ALL] 표현식): 표현식의 최솟값을 출력한다. (문자, 날짜 데이터 타입도 사용 가능)
* STDDEV([DISTINCT | ALL] 표현식): 표현식의 표준 편차를 출력한다.
* VARIAN([DISTINCT | ALL] 표현식): 표현식의 분산을 출력한다.
* 기타 통계 함수: 벤더별로 다양한 통계식을 제공한다.
# SELECT 문장 실행 순서
* FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
# JOIN
* 일반적으로 조인은 PK와 FK 값의 연관성에 의해 성립된다.
* DBMS 옵티마이저는 FROM 절에 나열된 테이블들이 아무리 많아도 항상 2개의 테이블씩 짝을 지어 JOIN을 수행한다.
* EQUI JOIN은 조인에 관여하는 테이블 간의 칼럼 값들이 정확하게 일치하는 경우에 사용되는 방법이다.
* EQUI JOIN은 '=' 연산자에 의해서만 수행되며, 그 이외의 비교 연산자를 사용하는 경우에는 모두 NON EQUI JOIN이다.
* 대부분 NON EQUI JOIN을 수행할 수 있지만, 때로는 설계상의 이유로 수행이 불가능한 경우도 있다.
# 순수 관계 연산자
* SELECT, PROJECT, JOIN, DIVIDE
'study .. > SQLD' 카테고리의 다른 글
| [과목 II. SQL 기본 및 활용] 제2장 SQL 활용: contents (0) | 2025.08.18 |
|---|---|
| [과목 II. SQL 기본 및 활용] 제2장 SQL 활용: index (1) | 2025.08.18 |
| [과목 II. SQL 기본 및 활용] 제1장 SQL 기본: index (1) | 2025.08.17 |
| [과목 I. 데이터 모델링의 이해] 제2장 데이터 모델과 SQL: contents (3) | 2025.08.13 |
| [과목 I. 데이터 모델링의 이해] 제2장 데이터 모델과 SQL: index (3) | 2025.08.13 |