데이터베이스 3/31
Shared on April 18, 2026
SQL 기초 강의 요약
개요
본 강의는 관계형 데이터베이스에서 사용되는 SQL(Structured Query Language) 의 개념, 구조, 주요 문법을 소개한다. 강의는 SQL의 역사, 표준 버전, 데이터 정의(DDL), 데이터 조작(DML), 집계, 정렬, 문자열 연산, 집합 연산 등 핵심 주제를 다루며, 실제 예시와 함께 DBMS와 애플리케이션 간 상호작용 방식을 설명한다.
핵심 개념
| 주제 | 주요 내용 |
|---|---|
| SQL의 역사 | IBM의 System R → SQL 표준화 (ANSI/ISO). 버전 86, 89, 92, 99 등. 대부분의 RDBMS는 86–99 버전 지원. |
| SQL 문법 구조 | 4가지 영역: DDL(데이터 정의), DML(데이터 조작), DCL(데이터 제어), TCL(트랜잭션 제어). |
| 데이터 정의 | CREATE TABLE, ALTER TABLE, DROP TABLE. 컬럼 타입(CHAR, VARCHAR, INT, NUMERIC, DATE 등)과 제약조건(PRIMARY KEY, FOREIGN KEY, NOT NULL, UNIQUE 등). |
| 데이터 조작 | INSERT, UPDATE, DELETE. SELECT(프로젝션, 셀렉션, 조인). |
| 조인 | 자연 조인(NATURAL JOIN), 내부 조인(JOIN … ON), 외부 조인(LEFT/RIGHT OUTER JOIN). |
| 집계 함수 | COUNT, SUM, AVG, MIN, MAX. GROUP BY, HAVING. |
| 정렬 | ORDER BY(ASC/DESC). |
| 문자열 연산 | LIKE, %(부분 문자열), _(한 글자), ESCAPE. |
| 집합 연산 | UNION, UNION ALL, INTERSECT, EXCEPT(Oracle: MINUS). |
| 트랜잭션 | COMMIT, ROLLBACK, SAVEPOINT. |
| 서브쿼리 | SELECT 내에서 SELECT. |
| SQL 표준 vs 벤더 확장 | 벤더마다 추가 기능(예: MySQL의 AUTO_INCREMENT, PostgreSQL의 SERIAL 등). 표준을 벗어나지 않는 범위에서 사용 권장. |
상세 내용
1. SQL 이란?
- Structured Query Language: 관계형 데이터베이스에 질의, 정의, 제어 명령을 제공.
- ANSI/ISO 표준을 기반으로 하며, 1970년대 IBM System R에서 시작.
2. SQL 표준 버전
| 버전 | 주요 특징 | 지원 범위 |
|---|---|---|
| 1986 | 최초 표준화 (SQL‑89) | 대부분 RDBMS |
| 1989 | SQL‑89 | |
| 1992 | SQL‑92 | |
| 1999 | SQL‑2003 | |
| 2003 이후 | SQL‑2006, SQL‑2008, SQL‑2011 등 | 최신 RDBMS 지원 제한적 |
3. 데이터 정의(DDL)
- 테이블 생성:
CREATE TABLE 테이블명 (컬럼명 타입 제약조건, …);- 예:
CREATE TABLE Instructor (InstructorID CHAR(5) PRIMARY KEY, Name VARCHAR(20) NOT NULL, DeptNo CHAR(3), Salary NUMERIC(8,2));
- 예:
- 제약조건:
PRIMARY KEY,FOREIGN KEY REFERENCES,NOT NULL,UNIQUE,CHECK. - 스키마: 데이터베이스 객체의 구조 정의.
4. 데이터 조작(DML)
- 삽입:
INSERT INTO 테이블명 (컬럼1, 컬럼2, …) VALUES (값1, 값2, …); - 수정:
UPDATE 테이블명 SET 컬럼=값 WHERE 조건; - 삭제:
DELETE FROM 테이블명 WHERE 조건;(조건 없으면 전체 삭제). - 조회:
SELECT 컬럼1, 컬럼2, … FROM 테이블명 [WHERE 조건] [GROUP BY 컬럼] [HAVING 조건] [ORDER BY 컬럼 [ASC|DESC]];
예시: Instructor 테이블에서 모든 이름 조회
SELECT Name FROM Instructor;
예시: 특정 부서의 인스트럭터 조회
SELECT * FROM Instructor
WHERE DeptNo = 'CS';
5. 조인
- 내부 조인: 두 테이블 간 일치하는 행만 반환.
SELECT I.Name, C.CourseTitle FROM Instructor I JOIN Course C ON I.InstructorID = C.InstructorID; - 외부 조인: 한쪽 테이블의 모든 행과 일치하는 행 반환 (NULL로 채움).
SELECT I.Name, C.CourseTitle FROM Instructor I LEFT OUTER JOIN Course C ON I.InstructorID = C.InstructorID;
6. 집계 함수 및 그룹화
- 집계:
COUNT(*),SUM(Salary),AVG(Salary),MIN(Salary),MAX(Salary). - 그룹화:
GROUP BY뒤에 집계 적용.SELECT DeptNo, AVG(Salary) AS AvgSalary FROM Instructor GROUP BY DeptNo; - HAVING: 그룹화 후 조건 지정.
SELECT DeptNo, COUNT(*) AS NumInstructors FROM Instructor GROUP BY DeptNo HAVING COUNT(*) > 5;
7. 정렬 및 한정
- ORDER BY: 결과 행 정렬.
SELECT Name FROM Instructor ORDER BY Name DESC; - LIMIT / TOP: 결과 수 제한 (DBMS마다 문법 차이).
8. 문자열 연산
- LIKE: 패턴 매칭.
%: 0개 이상의 문자_: 1개 문자
SELECT Name FROM Instructor WHERE Name LIKE '%kim%'; - ESCAPE: 패턴에서 특수문자 이스케이프.
9. 집합 연산
- UNION: 중복 제거
- UNION ALL: 중복 허용
- INTERSECT: 교집합
- EXCEPT / MINUS: 차집합
10. 트랜잭션
BEGIN TRAN;COMMIT;ROLLBACK;SAVEPOINT name;
11. 서브쿼리와 연관된 사용
- 스칼라 서브쿼리: 하나의 값 반환.
- 다중 행 서브쿼리:
IN,ANY,ALL등과 함께 사용.
12. 벤더별 확장
- MySQL:
AUTO_INCREMENT,ENGINE=InnoDB. - PostgreSQL:
SERIAL,RETURNING. - Oracle:
ROWNUM,ROW_NUMBER() OVER. - SQL Server:
IDENTITY,TOP.
마무리
- SQL은 선언적 언어로, 무엇을 원하는지를 명시하고 DBMS가 어떻게 수행할지 결정한다.
- 표준 문법을 우선 사용하고, 필요 시 벤더 확장 활용하되 이식성을 고려한다.
- 데이터 정의 시 제약조건을 철저히 설정해 데이터 무결성을 확보한다.
- DML에서는 조건을 명확히 지정해 원치 않는 데이터 변경을 방지한다.