alt

데이터베이스 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
1989SQL‑89
1992SQL‑92
1999SQL‑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에서는 조건을 명확히 지정해 원치 않는 데이터 변경을 방지한다.

데이터베이스 3/31 | Alt