study ../SQLD

[과목 II. SQL 기본 및 활용] 제1장 SQL 기본: contents

wlsekf 2025. 8. 17. 21:56
과목 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