alt

[New!! 2026] (2과목) SQLD 완벽 요약강의 | 요약강의 | SQL 기본 및 활용 | 최단시간 최대효율👍 | 핵심 요약노트 | SQL개발자

2026년 11월 9일 공유

[New!! 2026] (2과목) SQLD 완벽 요약강의 | 요약강의 | SQL 기본 및 활용 | 최단시간 최대효율👍 | 핵심 요약노트 | SQL개발자

한눈에 보기
1. SQL은 관계형 DBMS를 제어하는 표준 언어로, 문법과 해석 능력이 핵심이다.
• SELECT문 실행 순서(FWGHSO) 암기가 필수적이다.
2. 데이터 조작 및 관리를 위한 다양한 함수와 연산자를 숙지해야 한다.
• 집계 함수는 NULL을 제외하며, 윈도우 함수는 행을 유지하며 계산한다.
3. 데이터베이스 구조 설계(DDL)와 권한 관리(DCL)는 시험의 주요 출제 포인트다.
• 제약 조건(PK, FK)과 트랜잭션 제어(COMMIT, ROLLBACK)의 차이를 이해해야 한다.

0. 학습 목표

  1. SQLD에서 다루는 관계형 데이터베이스, SQL의 구조와 실행 순서를 이해한다.
  1. 조회·조인·함수·서브쿼리·윈도우 함수 등 SQL 기본 및 활용 문법을 해석한다.
  1. 데이터 조작·트랜잭션·테이블 구조·권한 관리 명령을 구분한다.
🌐 외부 리서치
SQL 학습에 필요한 필수 자료 (SQLD 대비)
#학습 자료 #참고 링크

1. 데이터베이스와 SQL의 기초

🌐 외부 리서치
SQLD 강의 전에 알아둘 배경지식 4가지
#배경지식 #SQL 기초

1.1 DBMS와 관계형 데이터베이스의 구조

1. 데이터베이스에 접근할 때는 아무 방식으로나 직접 접근하는 것이 아니라, 중간에서 관리해 주는 시스템을 거쳐야 한다.
1. 이 시스템을 DBMS(Database Management System, 데이터베이스 관리 시스템)라고 한다.
2. DBMS는 데이터베이스를 관리하고 접근하기 위한 환경을 제공한다. 여러 종류 가운데 널리 사용되는 유형은 관계형 DBMS(RDBMS)이다.
2. SQLD 시험은 관계형 DBMS를 중심으로 출제된다.
1. 관계형 DBMS는 테이블과 테이블 사이의 관계를 표현한다.
2. 앞 과목에서 배운 것처럼, 그 관계는 기본 키(Primary Key)와 외래 키(Foreign Key)로 표현한다.
3. 대표적인 관계형 DBMS에는 Oracle, SQL Server, MySQL 등이 있다.
1. SQLD 시험에서는 Oracle과 SQL Server가 중요하며, 특히 Oracle에 더 큰 비중을 둔다.
2. 따라서 강의는 주로 Oracle 문법을 설명하고, SQL Server에서 다루는 내용도 필요한 경우 함께 언급한다.
4. 테이블을 구성하는 기본 용어는 다음과 같다.
1. 테이블의 속성은 컬럼(column) 또는 필드(field)라고 한다.
2. 각 데이터 한 줄은 튜플(tuple), 로우(row), 레코드(record)라고 한다.
3. 컬럼 이름을 설명하는 위쪽 부분은 컬럼 헤더(column header)라고 한다.
5. 컴퓨터가 데이터베이스에 접근할 때 사용하는 언어가 SQL이다.
1. SQL은 관계형 DBMS에서 사용하는 국제 표준 언어다.

1.2 SQL의 종류와 시험에서 요구하는 학습 방식

1. SQL은 역할에 따라 네 종류의 언어로 나뉜다.
1. DDL(Data Definition Language, 데이터 정의어)는 데이터 구조를 정의한다.
2. DML(Data Manipulation Language, 데이터 조작어)는 데이터를 조회하거나 조작한다.
3. DCL(Data Control Language, 데이터 제어어)는 권한을 관리한다.
4. TCL(Transaction Control Language, 트랜잭션 제어어)는 트랜잭션을 제어한다.
5. 지금은 각 종류에 어떤 문장이 속하는지 구분할 수 있도록 익히고, 세부 문법은 뒤에서 배운다.
2. 강의자는 SQL을 영어를 공부하는 방식처럼 학습해야 하는 언어라고 설명한다.
1. 먼저 단어와 문법을 기초부터 어려운 수준까지 익힌다.
2. 그다음 SQL 문장이 어떤 뜻인지 해석하고, 원하는 기능을 SQL 문장으로 표현할 수 있어야 한다.
3. SQLD는 객관식 시험이므로, 직접 SQL을 타이핑하는 대신 문장을 해석하거나 빈칸을 채우는 문제가 나올 수 있다.
1. 주어진 SQL이 어떤 기능을 하는지 해석하는 문제다.
2. 특정 기능을 구현하기 위해 빈칸에 들어갈 문법을 찾는 문제다.
3. 여러 SQL 문장 중 다른 하나를 고르는 식으로도 출제할 수 있다.
4. 강의에서는 시험에 나올 법한 문장과 해석 요령을 설명하지만, 응용력은 별도로 연습해야 한다.
1. 시중 문제집이나 인터넷에 공개된 문제를 풀어 보는 방법이 있다.
2. 시간이 있다면 직접 SQL 문장을 작성해 연습해야 자기 것으로 만들기 쉽고 합격에도 도움이 된다.

1.3 관계 대수는 SQL을 이해하기 위한 이론적 바탕이다

1. 관계 대수(Relational Algebra)는 SQL의 이론적 기초가 되는 수학적 언어다.
1. SQL이 정립되기 전에 관계 대수 이론이 먼저 수학적으로 정립되었다.
2. 관계 대수의 연산자들이 발전해 SQL 문법으로 이어졌다.
2. 교재와 시험 준비에서는 관계 대수를 먼저 설명하기도 하지만, 강의자는 SQL을 먼저 공부한 뒤 관계 대수를 보면 이해하기 더 쉽다고 권한다.
1. 셀렉션(selection)은 튜플, 즉 행을 선택하며 SQL의 WHERE절과 연결된다.
2. 프로젝션(projection)은 속성을 추출하며 SQL의 SELECT절과 연결된다.
3. SQL 문법을 익힌 다음 관계 대수로 돌아오면 각 연산자의 역할을 쉽게 연결할 수 있다.
3. 관계 대수는 자주 출제되는 내용은 아니지만 시험 범위에 포함되므로, SQL을 먼저 공부한 뒤 챙기면 된다.
1. 더 설명이 필요하면 강의자의 유튜브 채널에 있는 데이터베이스 개론 특강 중 관계 대수와 관계 해석 부분을 참고할 수 있다.

2. SELECT문과 기본 조회 방법

2.1 SELECT문의 작성 순서와 해석 순서

1. SELECT문은 데이터를 조회할 때 가장 기본적으로 사용하는 SQL 문장이다.
2. SQL은 작성 순서와 컴퓨터의 해석 순서가 다르다.
1. 작성할 때는 다음 순서로 쓴다.
1. SELECT
2. FROM
3. WHERE
4. GROUP BY
5. HAVING
6. ORDER BY
2. 컴퓨터는 위 순서가 아니라 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY 순서로 해석한다.
3. 강의자는 해석 순서를 “포워드가 했어요”라는 말로 외운다.
1. 앞 글자를 따라 F-W-G-H-S-O 순서로 기억한다.
2. 교재마다 다른 암기법을 써도 되지만, 해석 순서는 반드시 외워야 한다.
3. 이 순서를 알면 SELECT문 해석 문제를 풀기 쉽고, 시험에서 실행 순서를 묻는 문제에도 대응할 수 있다.

2.2 SELECT와 WHERE로 행과 열을 조회하기

1. SELECT문은 실행 순서에 맞춰 해석한다.
1. FROM 학생을 먼저 읽으면 학생 테이블을 대상으로 삼는다.
2. WHERE, GROUP BY, HAVING이 없으면 다음으로 SELECT를 해석한다.
3. SELECT *의 별표는 모든 컬럼을 조회한다는 뜻이므로, 학생 테이블의 전체 데이터를 출력한다.
2. 전체 컬럼이 아니라 일부 컬럼만 보고 싶다면 필요한 컬럼을 적는다.
1. 예를 들어 이름과 나이만 적으면 결과에도 이름과 나이만 나온다.
3. 중복된 결과를 제거하려면 DISTINCT를 쓴다.
1. 이름과 나이가 같은 홍길동 데이터가 두 행 있더라도 DISTINCT를 쓰면 중복을 제거해 한 행만 반환한다.
2. 중복 제거를 지정하지 않으면 기본적으로 ALL이 적용된 것으로 볼 수 있다.
4. WHERE절은 조건에 맞는 행을 걸러낸다.
1. 예를 들어 학생 테이블에서 나이가 20보다 큰 행을 고른 뒤, 이름과 나이를 출력한다.
2. 이때 조건을 만족하는 학생의 데이터만 조회된다.
3. 따라서 WHERE는 행(row)을 필터링하고, SELECT는 열(column)을 선택한다.

2.3 별칭과 SQL Server의 문자열 연결

1. 별칭은 컬럼이나 테이블에 다른 이름을 붙이는 기능이다.
1. AS를 사용해 학번 컬럼에 아이디라는 별칭을 붙이면 결과의 컬럼 헤더에 아이디가 표시된다.
2. AS는 생략할 수 있으며, 생략해도 같은 방식으로 동작한다.
3. FROM절의 테이블에도 별칭을 붙일 수 있다. 예를 들어 학생 테이블을 A라고 부를 수 있다.
2. 별칭을 사용할 때는 이름의 형식과 예약어에 주의해야 한다.
1. 강의에서는 숫자나 특수 문자를 별칭에 사용할 수 없고, 예약어도 별칭으로 사용할 수 없다고 설명한다.
2. 예약어는 SELECT, WHERE, FROM처럼 컴퓨터가 이미 문법 용도로 알고 있는 단어다.
3. 공백이나 특수 문자가 포함된 별칭도 양끝에 큰따옴표를 붙이면 사용할 수 있다.
3. WHERE절은 SELECT절보다 먼저 실행되므로, SELECT에서 만든 별칭을 WHERE에서 바로 사용할 수 없다.
1. 별칭은 SELECT가 실행되어야 정해진다.
2. 따라서 아직 별칭을 알 수 없는 단계인 WHERE에서 그 별칭을 참조하면 오류가 생길 수 있다.
3. 이 실행 순서는 별칭의 잘못된 사용을 묻는 문법 문제에 활용될 수 있다.
4. 문자열 연결 방식은 DBMS에 따라 다르다.
1. Oracle에서는 연결 연산자 ||를 사용한다.
2. 예를 들어 멤버 테이블에서 성과 이름을 연결해 전체 이름으로 출력할 수 있다.
3. SQL Server에서는 +를 문자열 연결에 사용한다.

3. 함수의 종류와 활용

3.1 함수와 더미 테이블 DUAL

1. 함수는 입력값을 받아 내부에서 처리한 뒤 결과값을 반환하는 기능이다.
2. 입력과 출력의 개수에 따라 함수 유형을 나눈다.
1. 입력 하나에서 결과 하나가 나오면 단일행 함수다.
2. 여러 입력에서 결과 하나가 나오면 다중행 함수다.
3. Oracle에서 함수를 시험할 때는 더미 테이블인 DUAL을 사용할 수 있다.
1. 일반 SQL은 테이블이 있다고 가정하고 작성하지만, 함수 시험은 실제 테이블 없이도 할 수 있다.
2. DUAL은 실제 데이터 테이블이 아니라, 가상으로 둔 테이블처럼 이해하면 된다.

3.2 문자 함수

1. 문자 함수는 종류가 많으므로, 강의에서는 대표 예시를 중심으로 설명한다.
2. SUBSTR는 지정한 위치에서 시작해 정해진 길이만큼 문자열을 반환한다.
1. SUBSTR('HI DAVID', 1, 2)처럼 시작 위치가 1이고 길이가 2이면 HI를 반환한다.
2. 시작 위치에 -5처럼 음수를 쓰면 문자열 뒤쪽부터 센다.
3. 길이를 생략하면 시작 위치부터 문자열 끝까지 반환한다. 따라서 예시에서는 DAVID가 나온다.
3. TRIM은 문자열의 양끝에 있는 공백이나 지정한 문자를 제거한다.
1. 제거할 문자를 지정하지 않으면 양끝 공백을 제거한다.
2. 제거 문자로 느낌표를 지정하면 양끝의 느낌표만 제거하고 가운데 문자는 남긴다.
4. 그 밖의 문자 함수도 교재에서 확인할 수 있으며, 강의자는 기본 원리를 바탕으로 읽어 보라고 안내한다.

3.3 숫자 함수와 날짜 함수

1. ROUND는 지정한 자릿수에서 반올림한다.
1. 소수 첫째 자리까지 남기려면 지정한 자릿수에 따라 그 자리에서 반올림한다.
2. 자릿수를 생략하거나 0으로 두면 소수 부분을 반올림해 정수로 만든다.
3. -1은 10의 자리에서 반올림한다. 예시에서는 결과가 20이 된다.
2. TRUNC는 지정한 자릿수 뒤의 값을 버린다.
1. 지정한 자리까지 남기고 그보다 작은 자릿수는 버린다.
2. 자릿수를 생략하거나 0으로 두면 소수 부분을 버려 정수로 만든다.
3. -1을 지정하면 10의 자리까지 남긴다.
3. FLOOR와 CEIL은 각각 바닥값과 천장값을 구한다.
1. 예를 들어 3.58의 바닥은 3이고, 천장은 4다.
4. 현재 날짜를 구하는 함수는 DBMS에 따라 다르다.
1. Oracle은 SYSDATE를 사용한다.
2. SQL Server는 GETDATE()를 사용한다.

3.4 변환 함수와 데이터 유형

1. 이 강의에서는 숫자형·문자형·날짜형을 주요 데이터 유형으로 다룬다.
2. 변환 함수는 한 유형의 데이터를 다른 유형으로 바꾼다.
1. 숫자형을 문자형으로 바꿀 때는 TO_CHAR를 사용한다.
2. 문자형을 날짜형으로 바꿀 때는 TO_DATE를 사용한다.
3. 날짜형을 문자형으로 바꿀 때도 TO_CHAR를 사용한다.
4. 문자형을 숫자형으로 바꿀 때는 TO_NUMBER를 사용한다.
3. 겉으로 같은 모양으로 보이더라도, 내부 데이터 유형이 다르면 가능한 연산도 다르다.
1. 문자열을 날짜형으로 변환하면 화면에 보이는 모양은 비슷해도 내부적으로는 날짜 데이터가 된다.
2. 날짜형에 1을 더하면 다음 날짜가 되고, 날짜끼리 앞뒤를 비교할 수도 있다.
3. 반면 문자열은 문자 그대로이므로 날짜처럼 더하거나 비교할 수 없다.

3.5 집계 함수와 NULL 처리

1. 집계 함수는 여러 행의 값을 모아 개수·합계·평균·최솟값·최댓값 등을 계산한다.
2. 예시에서는 임직원 테이블에서 인원수, 총급여, 평균 급여, 최고 급여, 최저 급여를 구한다.
1. COUNT로 행의 개수를 센다.
2. SUM, AVG, MAX, MIN으로 급여의 합계·평균·최댓값·최솟값을 구한다.
3. 집계 함수는 여러 행을 입력받아 결과 하나를 만드는 다중행 함수다.
4. 집계 함수는 기본적으로 NULL을 제외하고 계산한다.
1. 급여에 NULL이 있으면 합계·평균·최댓값·최솟값 계산에서 해당 값은 제외된다.
2. WHERE는 행마다 조건을 적용하는 절인 반면, 집계 함수는 여러 행을 함께 처리한다. 따라서 강의에서는 WHERE절에서 집계 함수를 사용할 수 없다고 강조한다.
5. COUNT(*), COUNT(1), COUNT(0)은 전체 행의 개수를 센다.
1. 이 예시에서는 급여가 NULL인 행이 있어도 다섯 행 모두 세므로 결과는 5다.
2. 반면 COUNT(급여)는 NULL을 제외하므로 결과가 4가 된다.

3.6 NULL 관련 함수

1. 강의에서는 대표적인 NULL 처리 함수 세 가지를 살펴본다.
2. NVL은 첫 번째 값이 NULL이면 대체값을 반환하고, NULL이 아니면 원래 값을 반환한다.
1. 예시에서는 성과급이 NULL일 때 0으로 바꾸어 출력한다.
2. 값이 100, 20, 30이면 각각 원래 값을 출력하고, NULL인 경우에만 0을 출력한다.
3. NULLIF는 두 값이 같으면 NULL, 다르면 첫 번째 값을 반환한다.
1. 예시에서는 두 값이 100과 같으면 NULL을 반환한다.
2. 같지 않으면 첫 번째 값인 20, NULL, 30을 반환한다.
4. COALESCE는 여러 값 가운데 가장 먼저 NULL이 아닌 값을 반환한다.
1. 전화번호·이메일·지역을 차례로 확인해 처음으로 NULL이 아닌 값을 선택하는 방식이다.
5. 함수와 문법을 익혀야 SQL 문장을 정확하게 해석할 수 있다.

4. CASE문과 WHERE 조건

4.1 CASE문과 DECODE 함수

1. CASE문은 조건에 따라 결과를 나누는 분기 처리 문법이다.
2. 과목 코드에 따라 과목명을 반환하는 예시를 통해 작동 방식을 설명한다.
1. 과목 코드가 201이면 수학, 202이면 과학, 203이면 컴퓨터를 반환한다.
2. 어느 조건에도 맞지 않으면 교양을 반환한다.
3. 결과 컬럼에는 과목명이라는 별칭을 붙인다.
3. 같은 기준값을 반복해서 쓰지 않는 형태로도 CASE문을 작성할 수 있으며, Oracle에서는 DECODE 함수로 더 짧게 표현할 수도 있다.

4.2 WHERE절과 비교 연산자

1. WHERE절은 특정 조건에 맞는 행을 조회한다.
2. 예시를 해석할 때도 SELECT문의 실행 순서인 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY를 따른다.
1. 먼저 학생 테이블을 읽는다.
2. 그다음 나이가 20살인 행을 WHERE로 추린다.
3. 마지막으로 이름과 나이 컬럼을 출력한다.
3. 조건을 표현하려면 비교 연산자를 사용한다.
1. 같지 않음을 나타내는 표현은 세 가지가 있다.
2. AND는 두 조건을 모두 만족해야 한다. 예를 들어 나이가 21 이상이고 22 미만인 사람을 찾을 수 있다.
3. OR는 여러 조건 중 하나만 만족해도 된다.
4. BETWEEN A AND B는 A 이상 B 이하의 범위를 뜻한다.
5. IN은 값 목록에 포함되는지 확인하며, 앞에 NOT을 붙이면 목록에서 제외된 값을 찾는다.
4. 날짜 데이터도 조건으로 조회할 수 있다.
1. 구매일이나 시스템 로그처럼 날짜가 기록되는 데이터는 날짜 범위 조회에 자주 쓰인다.
2. 2024년 12월 15일보다 이전을 찾을 때는 그 날짜보다 작은 값만 반환한다.
3. BETWEEN 2024년 12월 1일 AND 2024년 12월 31일은 양 끝 날짜를 포함하므로 12월 1일도 범위에 들어간다.

4.3 LIKE 와일드카드와 NULL 조건

1. LIKE는 문자열의 특정 패턴을 찾는 연산자이며, %와 _를 와일드카드로 사용한다.
1. %는 문자 0개 이상에 대응한다.
2. _는 정확히 한 문자에 대응한다.
2. 앞뒤에 %를 둔 패턴은 해당 문자열이 어디에 들어가든 찾는다.
1. 라면 테이블에서 이름이 %라면%에 맞으면 ‘라면’ 앞뒤에 어떤 문자도 0개 이상 올 수 있다.
2. 따라서 틈새라면, 진라면 순한맛, 라면 뽑기처럼 이름에 ‘라면’이 들어 있는 값을 찾을 수 있다.
3. 패턴의 끝이나 시작을 고정하면 결과가 달라진다.
1. %라면은 이름이 ‘라면’으로 끝나는 값을 찾는다. 예시에서는 틈새라면이 해당한다.
2. _라면%은 ‘라면’ 앞에 정확히 한 글자가 있어야 한다.
4. %나 _ 자체를 문자로 검색하려면 ESCAPE를 사용한다.
1. 와일드카드가 아니라 실제 데이터의 % 또는 _를 찾고 싶을 때 필요하다.
2. 강의 예시는 슬래시를 이스케이프 문자로 사용하지만, 어떤 문자를 사용할지는 설정에 따라 달라질 수 있다.
5. NULL 여부는 IS NULL 또는 IS NOT NULL로 검사한다.
1. IS NULL은 값이 NULL인 행을 찾는다. 예시에서는 직업이 NULL인 사람이 두 명이다.
2. IS NOT NULL은 값이 NULL이 아닌 행을 찾으며, 예시에서는 네 명이다.
3. NULL은 일반 비교 연산자로 비교할 수 없으므로 직업 = NULL과 같은 식은 오류가 된다.

4.4 연산 우선순위

  1. SQL 조건식에는 컴퓨터가 해석하는 연산 우선순위가 있다.
  1. 시험에서 연산 순서를 물을 수 있으므로, 제시된 우선순위에 따라 조건식을 해석한다.

5. GROUP BY, HAVING, ORDER BY

5.1 GROUP BY로 그룹별 집계하기

1. GROUP BY는 같은 값을 가진 행을 그룹으로 묶고, 집계 함수로 그룹별 결과를 계산한다.
2. 직원 테이블에서 부서를 기준으로 그룹화하는 예시를 순서대로 해석한다.
1. 직원 테이블을 읽는다.
2. GROUP BY 부서에 따라 인사·개발·기획 부서별로 행을 묶는다.
3. 각 그룹에서 부서와 평균 급여를 출력한다.
3. 그룹별 평균을 구하려면 집계 함수가 필요하다.

5.2 HAVING으로 그룹 조건 지정하기

1. 그룹을 만든 뒤 그룹 단위로 조건을 걸 때는 HAVING을 사용한다.
1. WHERE는 행 단위로 조건을 적용한다.
2. HAVING은 그룹 단위로 조건을 적용한다.
2. 부서별 평균 급여가 1,000보다 큰 그룹만 남기는 예시를 본다.
1. 직원 테이블을 읽고 부서별로 그룹화한다.
2. 평균 급여가 1,000을 초과하는 그룹을 HAVING으로 남긴다.
3. 예시에서는 개발과 기획 부서가 결과에 남는다.
3. WHERE와 HAVING의 실행 시점은 결과에 차이를 만든다.
1. 부서가 기획이 아닌 행을 먼저 WHERE로 제거하면 인사와 개발만 남는다.
2. 남은 행을 부서별로 그룹화하고 평균 급여가 1,000보다 큰 그룹을 찾으면 개발만 남는다.
3. 집계 함수는 WHERE에서 사용할 수 없지만 HAVING에서는 사용할 수 있다.
4. 성능을 고려하면, 먼저 걸러낼 수 있는 행은 WHERE에서 제거한 뒤 그룹화하는 편이 유리할 수 있다.
1. GROUP BY는 컴퓨터 자원을 많이 사용한다.
2. 따라서 필요 없는 행을 먼저 WHERE로 제거하면 이후 그룹화와 HAVING 처리 부담을 줄일 수 있다.

5.3 ORDER BY로 결과 정렬하기

1. ORDER BY는 결과를 정렬한다.
1. 기본 정렬은 오름차순이다.
2. 내림차순은 DESC를 붙인다.
2. ORDER BY는 컴퓨터의 해석 순서에서 가장 마지막에 실행된다.
1. 정렬은 컴퓨터 자원을 많이 사용하므로, 먼저 필터링과 그룹화를 마친 뒤 수행한다.
3. 정렬 기준은 한 개 이상 지정할 수 있다.
1. 급여를 기준으로 정렬할 때 별도 방향을 지정하지 않으면 오름차순으로 정렬한다.
2. 급여를 내림차순으로 정렬하고, 급여가 같으면 보너스를 오름차순으로 정렬할 수 있다.
3. SELECT에서 급여에 연봉이라는 별칭을 붙였다면 해당 별칭을 정렬에 사용할 수 있다.
4. 컬럼 이름 대신 결과 컬럼의 위치 번호를 기준으로 정렬할 수도 있다.
4. 그룹화된 결과도 정렬할 수 있다.
1. 부서별 평균 급여를 구한 뒤 평균 급여를 기준으로 내림차순 정렬할 수 있다.
5. ORDER BY에서는 SELECT의 별칭과 집계 함수를 사용할 수 있다.
1. ORDER BY는 SELECT보다 나중에 실행되므로, SELECT절에서 만든 별칭을 알아볼 수 있다.
2. GROUP BY보다도 나중에 실행되므로 집계 함수의 결과를 정렬에 사용할 수 있다.
6. 자료형과 DBMS에 따라 정렬 결과가 달라질 수 있다.
1. 숫자는 작은 값에서 큰 값으로, 문자는 사전 순으로, 날짜는 과거에서 미래 순으로 정렬된다.
2. NULL의 정렬 위치는 DBMS마다 다르다.
1. Oracle은 NULL을 최댓값으로 취급한다.
2. SQL Server는 NULL을 최솟값으로 취급한다.
3. 따라서 NULL이 포함된 결과를 오름차순 또는 내림차순으로 정렬할 때 두 DBMS의 결과가 달라질 수 있다.

6. 조인으로 여러 테이블 연결하기

6.1 조인의 의미와 기본 조인 방식

1. 조인(join)은 둘 이상의 테이블을 연결해 하나의 결과로 보여 주는 방법이다.
1. 정규화는 테이블을 분리하는 과정이다.
2. 분리된 테이블에서 필요한 정보를 함께 확인하려면 테이블을 연결해야 하며, 이를 조인이라고 한다.
2. 이퀄 조인(equi join)은 등호로 같은 값을 가진 행을 연결한다.
1. 직원 테이블의 부서 아이디와 부서 테이블의 부서 아이디가 같은 행을 찾는다.
2. 일치하는 행에서 직원 이름과 부서명을 함께 출력한다.
3. 논이퀄 조인(non-equi join)은 등호 이외의 비교 조건을 사용한다.
1. 예시에서는 학생 테이블에 별칭 S, 성적 기준 테이블에 별칭 G를 붙인다.
2. 학생 점수가 성적 기준의 최소 점수와 최대 점수 사이에 들어가는 행을 연결한다.
3. 이에 따라 85점은 B, 73점은 C, 59점은 F, 92점은 A에 대응한다.

6.2 표준 조인: INNER, NATURAL, CROSS

1. DBMS마다 조인 방식이 달라질 수 있으므로, 공통으로 사용할 수 있도록 정리한 표준 조인이 있다.
2. INNER JOIN은 조인 조건이 맞는 행만 반환한다.
1. 직원 테이블과 부서 테이블을 부서 아이디로 연결하면, 두 테이블에서 부서 아이디가 같은 행만 결과에 남는다.
2. 예를 들어 홍길동의 부서 아이디 10은 인사, 이순신의 부서 아이디 20은 개발과 연결된다.
3. USING과 ON은 조인 조건을 표현하는 방법이다.
1. USING은 양쪽 테이블에서 이름이 같은 컬럼을 기준으로 조인할 때 사용한다.
2. ON은 양쪽 컬럼의 이름이 달라도 조건을 지정할 수 있다.
3. JOIN만 쓰면 컴퓨터는 기본적으로 내부 조인으로 처리한다.
4. 예시에서는 NULL 값은 서로 같은 조인 값으로 연결되지 않는다.
4. NATURAL JOIN은 양쪽 테이블에서 이름이 같은 컬럼을 찾아 자동으로 조인한다.
1. ON이나 USING을 따로 적지 않아도 된다.
2. 직원 테이블과 부서 테이블에 공통 컬럼인 부서 아이디가 있으면, 이를 기준으로 연결한다.
5. CROSS JOIN은 두 테이블 행의 가능한 모든 조합을 반환한다.
1. 학생 두 명과 과목 세 개를 조합하면 총 여섯 행이 나온다.
2. 이 결과를 카르테시안 곱(Cartesian product)이라고 한다.

6.3 OUTER JOIN으로 일치하지 않는 행도 보존하기

1. OUTER JOIN은 조인 조건에 일치하는 값이 없는 행도 결과에 포함할 수 있다.
2. OUTER JOIN에는 LEFT, RIGHT, FULL 세 종류가 있다.
3. LEFT OUTER JOIN은 왼쪽 테이블을 기준으로 행을 보존한다.
1. 학생 테이블을 왼쪽에 두고 과목 테이블과 조인한다.
2. 양쪽에 일치하는 값이 있는 행은 연결한다.
3. 왼쪽 테이블의 행은 모두 남기고, 오른쪽 테이블에 대응 행이 없으면 오른쪽 컬럼은 NULL로 둔다.
4. OUTER라는 단어는 생략할 수 있다.
4. RIGHT OUTER JOIN은 오른쪽 테이블의 행을 기준으로 보존한다.
1. 오른쪽 테이블에 있는 과목은 모두 남기며, 연결되는 학생이 없으면 학생 쪽 값은 NULL로 표시한다.
5. FULL OUTER JOIN은 왼쪽과 오른쪽 테이블의 행을 모두 보존한다.

7. 서브쿼리, 뷰, 집합 연산자

7.1 서브쿼리의 구조와 결과 유형

1. 서브쿼리(subquery)는 하나의 SQL 문장 안에 또 다른 SQL 문장이 들어 있는 구조다.
1. 문장 안에 쿼리가 두 개 있어도, 각각을 차례로 해석하면 된다.
2. 단일행 서브쿼리는 결과값 하나를 반환한다.
1. 직원 테이블에서 연봉이 평균 연봉보다 높은 사람을 찾는 예시다.
2. 서브쿼리에서 평균 연봉 5,500을 계산하면, 바깥 쿼리는 연봉이 5,500보다 큰 사람을 찾는 것과 같다.
3. 예시에서는 김가장과 이부장이 반환된다.
3. 다중열 서브쿼리는 여러 컬럼 값을 묶어 반환한다.
1. 직원의 부서 아이디와 직무 아이디가 인사팀 업무 테이블의 부서 아이디·직무 아이디 조합에 포함되는지 확인한다.
2. 조건에 맞는 직원 세 명의 이름을 출력한다.
4. 서브쿼리는 형태가 복잡해 보여도, 쿼리 하나씩 차근차근 해석하면 된다.
5. 서브쿼리에는 IN 외에도 ANY, ALL, EXISTS를 사용할 수 있다.
6. 강의자는 개념적으로 중요한 인라인 뷰(inline view)를 별도로 설명한다.

7.2 인라인 뷰와 뷰의 장점

1. FROM절 안에 서브쿼리가 있으면 이를 인라인 뷰라고 한다.
1. 인라인 뷰는 쿼리 안에서 임시 테이블처럼 사용된다.
2. 먼저 FROM절의 서브쿼리를 해석해 그 결과를 만든다.
2. 예시에서는 직원 테이블과 서울 지역 부서 정보를 담은 인라인 뷰를 연결한다.
1. 직원 테이블에는 별칭 E를 붙인다.
2. 부서 테이블에서 지역이 서울인 부서 아이디와 부서명을 조회한다.
3. 그 결과에 별칭 D를 붙인 뒤, 직원과 부서 아이디가 같은 행의 이름과 부서명을 출력한다.
3. 인라인 뷰의 결과는 실제 테이블과 다르다.
1. 직원 테이블과 부서 테이블의 데이터는 실제로 디스크에 저장되어 있다.
2. 인라인 뷰는 기존 부서 테이블 중 조건에 맞는 일부만 논리적으로 보여 준다.
3. 따라서 실제 저장된 테이블이 아니라, 논리적으로 생성된 뷰(view)다.
4. 뷰를 사용하는 이유는 보안성·독립성·편의성이다.
1. 보안성: 전체 데이터를 노출하지 않고 필요한 부분만 보여 준다.
2. 독립성: 구조가 변경되더라도 일관성을 유지하는 데 도움이 된다.
3. 편의성: 뷰에 별칭을 붙여 이후 쿼리에서 편리하게 사용할 수 있다.
4. 뷰의 장점은 시험에서 다루며, 인라인 뷰는 개념적으로도 중요하다.

7.3 집합 연산자

1. 집합 연산자는 두 결과를 합집합·교집합·차집합으로 처리한다.
1. UNION ALL과 UNION은 합집합을 만든다.
2. INTERSECT는 교집합을 만든다.
3. MINUS는 차집합을 만든다.
2. UNION ALL은 중복을 유지하고, UNION은 중복을 제거한다.
1. 두 학생 테이블 결과에 같은 이름이 들어 있으면 UNION ALL은 겹치는 값을 그대로 출력한다.
2. UNION은 중복 값을 하나만 남긴다.
3. UNION은 중복 제거를 위해 내부적으로 정렬 등을 수행할 수 있다.
1. 내부 처리에서는 정렬이나 해시 자료 구조를 사용할 수 있다.
2. 그러므로 결과가 항상 특정한 오름차순으로 정렬된다고 보장되지는 않지만, UNION ALL과 달리 정렬이 수행될 가능성이 있다.

7.4 그룹 함수: ROLLUP, CUBE, GROUPING SETS

1. 그룹 함수는 GROUP BY에서 여러 행을 요약해 결과를 만드는 기능이다.
1. 앞에서는 집계 함수로 요약하는 방법을 배웠다.
2. 여기서는 ROLLUP, CUBE, GROUPING SETS를 살펴본다.
2. ROLLUP은 지정한 컬럼의 순서에 따라 단계별 소계와 전체 합계를 계산한다.
1. ROLLUP(컬럼1, 컬럼2)는 먼저 컬럼1과 컬럼2로 그룹화한다.
2. 그다음 컬럼1만으로 그룹화하고, 마지막에 전체 행을 합산한다.
3. 예를 들어 지역과 상품으로 먼저 그룹화한 뒤 지역별 결과와 전체 결과를 낸다.
4. 컬럼의 순서를 바꾸면 그룹화 단계와 결과도 달라진다.
5. 컬럼이 n개이면 결과 그룹은 n+1단계로 나온다. 두 컬럼을 사용한 예시에서는 세 단계다.
3. CUBE는 지정한 컬럼으로 만들 수 있는 조합을 모두 그룹화한다.
1. 두 컬럼을 사용하면 두 컬럼 조합, 첫 번째 컬럼만, 두 번째 컬럼만, 전체를 각각 계산한다.
2. 컬럼이 n개라면 가능한 조합은 (2^n)개다. 두 컬럼이면 네 가지다.
4. GROUPING SETS는 그룹화할 조합을 직접 지정한다.
1. 지역과 상품, 상품만, 전체처럼 필요한 그룹을 지정할 수 있다.
2. 비어 있는 괄호는 전체 결과를 그룹화하도록 지정한다.

8. 윈도우 함수와 상위 데이터 조회

🌐 외부 리서치
윈도우 함수 ROWS와 RANGE의 차이, 아주 쉽게 이해하기
#어려운 개념 #윈도우 함수

8.1 윈도우 함수의 기본 구조

1. GROUP BY는 그룹화로 결과 행 수를 줄이지만, 윈도우 함수는 행을 그룹화하지 않고 각 행에 계산 결과를 붙인다.
2. OVER가 붙은 문장은 윈도우 함수로 판단할 수 있다.
3. 순위 함수는 ROW_NUMBER, RANK, DENSE_RANK 등이다.
1. 순위를 중복 없이 매기거나, 같은 순위를 허용하는 방식이 있다.
2. 같은 순위가 있을 때 순위를 건너뛰는 방식과 건너뛰지 않는 방식이 다르다.
3. 그룹 함수는 행 수를 줄이지만, 윈도우 함수는 입력된 행마다 결과를 내므로 행 수가 유지된다.
4. 집계 함수도 OVER와 함께 사용하면 윈도우 함수로 동작한다.
1. 예시에서는 판매 테이블의 지역·직원·판매액과 함께 전체 판매액을 계산한다.
2. OVER() 안이 비어 있으면 전체 행을 대상으로 합계를 구한다.
3. 일반 집계 함수라면 결과 하나만 나오지만, 윈도우 함수는 전체 합계를 각 행에 함께 출력한다.
5. PARTITION BY는 데이터를 기준별로 나누어 계산한다.
1. PARTITION BY 지역은 지역 단위로 판매액을 합산한다.
2. 예시에서는 서울의 합계가 800, 경기의 합계가 350으로 계산된다.
3. 윈도우 함수 안의 계산 기준과 최종 출력 순서는 다르다. 원하는 순서로 보려면 별도로 ORDER BY를 사용한다.
4. OVER 안의 기준은 계산을 정할 뿐, 화면에 표시되는 행 순서를 보장하지 않는다.
6. GROUP BY는 결과 행 수를 줄이고, 윈도우 함수는 행 수를 유지한다.

8.2 행 사이의 값을 가져오는 함수

1. LAG는 정렬된 결과에서 이전 행의 값을 가져오고, LEAD는 다음 행의 값을 가져온다.
1. 예시에서는 직원별로 나눈 뒤 날짜순으로 정렬하고 이전 매출을 가져온다.
2. 직원이 바뀌면 새 구간에서 다시 계산하므로, 이전 값이 없는 첫 행에는 NULL이 들어간다.
3. LEAD는 다음 매출을 가져오며, 다음 값이 없는 마지막 행은 NULL이 된다.
2. FIRST_VALUE는 현재 계산 범위에서 첫 번째 값을 반환한다.
1. 예시에서는 처음 매출을 반환하며, 직원별 구간이 바뀌면 그 구간의 첫 매출을 가져온다.
3. LAST_VALUE를 쓸 때는 윈도우의 범위를 주의해야 한다.
1. 윈도우 함수는 현재 행까지를 범위로 처리하는 방식으로 작동할 수 있다.
2. 따라서 LAST_VALUE가 전체 구간의 마지막 값이 아니라 현재 행까지의 마지막 값을 반환할 수 있다.
3. 전체 범위의 마지막 값을 원하면 범위 지정 키워드로 미래 행까지 포함하도록 명시해야 한다.
4. 범위를 생략하면 기본적으로 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW와 같은 방식으로 동작할 수 있다.

8.3 윈도우 범위: ROWS와 RANGE

1. 윈도우 범위를 지정하면 현재 행을 기준으로 어느 범위까지 계산할지 정할 수 있다.
2. 앞뒤 한 행을 포함해 평균을 구하면 이동 평균이 된다.
3. UNBOUNDED PRECEDING부터 현재 행까지 합산하면 누적합을 구한다.
1. 예시에서는 매출액을 앞에서부터 차례로 누적한다.
4. ROWS와 RANGE는 같은 정렬값을 처리하는 방식에 차이가 있다.
1. ROWS는 행의 개수를 기준으로 계산하므로, 정렬값이 같아도 각 행을 개별적으로 처리한다.
2. RANGE는 정렬값이 같은 행을 같은 범위로 묶어 계산한다.
3. 예시에서는 같은 날짜의 매출 300과 150을 함께 처리해 450으로 계산하는 차이가 나타난다.
5. 범위를 처음부터 끝까지 지정하면 LAST_VALUE로 전체 범위의 마지막 매출을 가져올 수 있다.

8.4 비율 함수와 상위 N개 조회

1. 비율 함수는 결과의 비율이나 순위 구간을 계산한다.
2. NTILE(n)은 데이터를 n개 그룹으로 나눈다.
1. 다섯 행을 NTILE(3)으로 나누면 앞에서부터 두 개, 두 개, 한 개로 배분된다.
2. 정확히 나누어떨어지지 않으면 앞쪽 그룹에 먼저 행을 배분하고 나머지를 뒤쪽 그룹에 둔다.
3. 상위 N개 데이터를 뽑는 문법은 DBMS에 따라 다르다.
1. SQL Server에서는 TOP을 사용하고, Oracle에서는 ROWNUM을 사용한다.
2. LIMIT이나 FETCH FIRST 같은 방식도 있다.
3. 상위 N개를 뽑을 때 원하는 기준이 있다면 ORDER BY를 함께 써야 한다.
4. 정렬을 생략하면 원하는 기준의 상위 값이 아니라 임의의 다섯 행이 나올 수 있다.
5. SQL Server에서 동순위 행도 함께 출력하려면 WITH TIES를 사용한다.
4. Oracle의 ROWNUM 조건은 순차적으로 행에 번호를 부여하는 방식 때문에 주의가 필요하다.
1. ROWNUM은 조회 과정에서 가상 순번을 붙인다.
2. 행을 하나씩 처리하므로 ROWNUM = 2처럼 조건을 걸면 첫 행의 번호가 1이라 조건을 통과하지 못하고, 원하는 결과가 나오지 않을 수 있다.
3. 상위 두 행을 조회하려면 ROWNUM <= 2처럼 작거나 같다는 조건을 사용한다.
4. ROWNUM = 1은 첫 행이 조건을 만족하므로 한 행을 반환할 수 있다.

9. 계층형 질의, 셀프 조인, 피벗, 정규 표현식

9.1 계층형 질의

1. 계층형 질의는 자기 자신을 참조하는 계층형 구조의 데이터를 조회한다.
2. PRIOR의 위치에 따라 계층을 따라가는 방향이 달라진다.
1. PRIOR 부모 = 자식 형태는 부모에서 자식으로 내려가는 순방향이다.
2. PRIOR 자식 = 부모 형태는 자식에서 부모로 올라가는 역방향이다.
3. 예시에서는 직속 상관이 없는 사원부터 시작해 아래 계층으로 내려간다.
1. START WITH 직속상관 IS NULL은 직속 상관이 없는 사원을 시작점으로 지정한다.
2. CONNECT BY PRIOR 사원 이름 = 직속 상관은 상관과 사원의 관계를 연결한다.
3. 결과는 위에서 아래로 이어지는 계층 구조가 된다.
4. LEVEL은 현재 행의 계층 깊이를 반환한다.
5. 다른 예시에서는 특정 사원을 시작점으로 정해 위쪽 계층으로 올라간다.
1. 시작점을 민으로 지정하고 연결 방향을 반대로 두면 아래에서 위로 탐색한다.
6. SYS_CONNECT_BY_PATH를 사용하면 계층의 경로를 표시할 수 있다.

9.2 셀프 조인

  1. 셀프 조인(self join)은 같은 테이블을 자기 자신과 조인하는 방식이다.
  1. 같은 직원 테이블을 두 번 사용하되 서로 다른 별칭을 붙인다.
  1. 사원과 멘토의 값을 비교해 연결하면 각 사원에 대응하는 멘토를 출력할 수 있다.

9.3 PIVOT과 UNPIVOT

1. PIVOT은 행 방향 데이터를 열 방향으로 재구성한다.
1. 긴 형태의 데이터(long data)를 넓은 형태의 데이터(wide data)로 바꾼다.
2. 예를 들어 수학·과학 값이 각각 수학·과학 컬럼으로 바뀐다.
2. UNPIVOT은 열 방향 데이터를 행 방향으로 재구성한다.
1. 넓은 형태의 데이터를 긴 형태로 바꾼다.
2. 수학 컬럼과 과학 컬럼을 다시 과목명과 값의 행 형태로 바꾼다.

9.4 정규 표현식

1. 정규 표현식은 문자열의 특정 패턴을 검색하거나 일치 여부를 확인하는 기능이다.
1. 앞에서 배운 LIKE의 %, _와 비슷하게 패턴을 다루지만, 더 다양한 표현이 가능하다.
2. 정규 표현식과 관련 함수는 종류가 많으므로 교재를 읽어 학습한다.
3. 정규 표현식은 시험에 한두 문제 정도 나올 수 있으므로, 모든 표현을 깊게 파기보다 자주 출제되는 표현을 우선 익히는 편이 효율적이라는 것이 강의자의 설명이다.

10. 데이터 조작어와 트랜잭션 제어

10.1 DML: INSERT, UPDATE, DELETE, MERGE

1. DML(Data Manipulation Language)은 데이터를 조작하는 언어이며, 주요 문장은 INSERT, UPDATE, DELETE, MERGE다.
2. INSERT는 테이블에 새 데이터를 추가한다.
1. VALUES 뒤에 입력할 값을 컬럼 순서에 맞춰 적는다.
2. 입력할 컬럼을 직접 지정할 수도 있다.
3. 컬럼을 지정해 일부 값만 넣으면 지정하지 않은 컬럼은 NULL이 될 수 있다.
3. UPDATE는 기존 데이터를 수정한다.
1. 예시에서는 이름이 선영인 사람의 나이를 20으로 바꾼다.
2. WHERE를 빼면 조건 없이 모든 행이 수정되므로, 의도하지 않은 데이터 전체 변경을 막기 위해 주의해야 한다.
4. DELETE는 조건에 맞는 데이터를 삭제한다.
1. 예시에서는 이름이 특정 값인 행을 삭제한다.
5. MERGE는 두 테이블을 조건에 따라 합치면서 데이터를 삽입하거나 수정한다.
1. 학생 테이블과 최신 학생 테이블을 이름 기준으로 비교한다.
2. 이름이 같으면 기존 행을 업데이트한다.
3. 이름이 다르면 새 행을 삽입한다.
4. 예시에서는 민수의 나이가 20에서 22로 바뀌고, 기존에 없던 선우가 추가된다.

10.2 트랜잭션과 SAVEPOINT

1. 트랜잭션은 데이터베이스에서 하나의 논리적인 작업 단위다.
1. 앞 과목에서 트랜잭션의 기본 개념과 ACID 특성을 배웠다.
2. 트랜잭션 제어에는 COMMIT, ROLLBACK, SAVEPOINT 등이 쓰인다.
2. SAVEPOINT는 트랜잭션 중간에 되돌아갈 지점을 저장한다.
1. ROLLBACK은 변경 사항을 되돌리는 명령이다.
2. SAVEPOINT를 설정하면 해당 지점까지는 남기고 그 이후 변경을 취소할 수 있다.
3. 계좌 테이블 예시로 SAVEPOINT와 ROLLBACK의 결과를 확인한다.
1. 홍길동의 계좌에 5,000원, 임걱정의 계좌에 10,000원을 넣는다.
2. 홍길동 계좌에서 1,000원을 빼 4,000원으로 만든 뒤 저장점을 지정한다.
3. 임걱정 계좌에서 3,000원을 빼 7,000원으로 만든 뒤 다음 저장점을 지정한다.
4. 홍길동 계좌에서 다시 2,000원을 빼고 세 번째 저장점을 지정한다.
5. 두 번째 저장점으로 롤백하면 그 뒤의 변경은 취소되고, 홍길동 4,000원과 임걱정 7,000원이 남는다.

10.3 자동 커밋과 격리 수준

1. 트랜잭션 간 고립 수준에 따라 다른 문제가 발생할 수 있다.
1. 앞 과목에서 더티 리드, 논리피터블 리드, 팬텀 리드 등을 다뤘다.
2. 어느 정도로 트랜잭션을 고립시키는지에 따라 발생 가능한 문제가 달라진다.
2. 자동 커밋의 기본 동작은 DBMS마다 다르다.
1. Oracle은 기본적으로 자동 커밋이 꺼져 있으므로, 데이터베이스에 반영하려면 직접 COMMIT해야 한다.
2. SQL Server는 기본적으로 자동 커밋이 켜져 있어 쿼리를 실행하면 변경 사항이 데이터베이스에 반영된다.

11. DDL과 테이블 구조 관리

11.1 CREATE TABLE과 제약 조건

1. DDL(Data Definition Language)은 데이터 구조와 스키마, 즉 데이터베이스 설계 구조를 정의한다.
2. CREATE TABLE로 테이블을 만들고 각 컬럼의 자료형과 제약 조건을 정한다.
1. 예시에서는 학생 테이블을 만든다.
2. 학번은 기본 키(PK)로 지정한다.
3. 이름과 학과에는 NOT NULL을 설정해 NULL을 허용하지 않는다.
4. 입학일에는 날짜 자료형을 지정한다.
5. 주소에는 UNIQUE를 설정해 중복값을 허용하지 않는다.
6. 성별에는 CHECK를 설정해 M 또는 F만 입력되도록 한다.
7. 학과에는 외래 키를 설정해 학과 목록 테이블의 학과와 연결한다.
3. 기본 키와 UNIQUE 제약의 차이는 NULL 허용 여부다.
1. 기본 키는 NULL과 중복을 모두 허용하지 않는다.
2. UNIQUE는 중복을 허용하지 않지만 NULL은 허용할 수 있다.
4. 키 제약은 데이터 무결성을 지키는 데 사용된다.
1. 기본 키는 개체 무결성을 보장한다.
2. 외래 키는 참조 무결성을 보장한다.
3. 데이터 유형과 제약 조건을 함께 지정해 테이블의 데이터 구조를 정한다.

11.2 테이블과 컬럼 변경·삭제

1. 테이블 구조를 변경하는 명령에는 ADD, MODIFY, DROP, RENAME이 있다.
1. ADD는 컬럼을 추가한다.
2. MODIFY는 컬럼을 수정한다.
3. DROP은 컬럼을 삭제한다.
4. RENAME은 컬럼 이름을 변경한다.
2. DROP TABLE은 테이블을 삭제한다.
1. 다른 테이블이 해당 테이블을 외래 키로 참조하고 있으면 삭제할 수 없다.
2. CASCADE CONSTRAINTS를 사용하면 참조하는 외래 키 제약 조건을 제거해 테이블을 삭제할 수 있다.
3. TRUNCATE는 테이블 구조는 남겨 두고 데이터를 삭제한다.
1. 컬럼과 테이블 스키마는 유지되고, 저장된 데이터만 지운다.
2. DELETE와 달리, 강의에서는 데이터가 저장 장치에서 바로 삭제되어 롤백할 수 없다고 설명한다.

12. DCL과 사용자 권한 관리

12.1 GRANT와 REVOKE

1. DCL(Data Control Language)은 사용자의 권한을 관리한다.
1. GRANT는 사용자에게 권한을 부여한다.
2. REVOKE는 사용자에게서 권한을 회수한다.
2. WITH GRANT OPTION은 객체 권한을 다른 사용자에게 다시 부여할 수 있게 한다.
1. 예시에서는 User1에게 학생 테이블의 SELECT 권한을 부여한다.
2. User1이 User2에게 같은 권한을 넘긴 뒤 User1의 권한을 회수하면, User2의 권한도 함께 회수된다.
3. WITH ADMIN OPTION은 시스템 권한을 부여하는 옵션이다.
1. 테이블을 생성하거나 제거하는 등 데이터베이스 관리자 수준의 권한을 부여한다.
2. User1이 User2에게 권한을 부여한 뒤 User1의 권한을 회수해도, User2의 권한은 유지될 수 있다.
4. 두 옵션의 차이는 부여 대상과 권한 회수의 영향이다.
1. WITH GRANT OPTION은 객체 권한의 재부여와 연결되며, 원래 권한이 회수될 때 전달된 권한도 회수될 수 있다.
2. WITH ADMIN OPTION은 시스템 권한의 재부여와 연결되며, 상위 사용자의 권한이 회수되어도 전달받은 사용자의 권한은 유지될 수 있다.

12.2 강의 마무리

  1. 강의자는 이 과목을 마무리하며 강의를 들은 수강생에게 수고했다는 인사를 전한다.
공개 노트 모두 보기