← 개념서모바일 버전
2과목 · SQL 기본 및 활용·1

SQL 기본

SQL의 분류(DDL/DML/DCL/TCL), 문장 실행 순서, 데이터 타입과 기본 문법을 정리합니다.

1. SQL의 분류

관계형 DBMS와 대화하는 언어 SQL은 역할에 따라 네 부류로 나뉩니다.

분류 명령 역할
DDL (Data Definition) CREATE, ALTER, DROP, TRUNCATE, RENAME 객체 구조 정의
DML (Data Manipulation) SELECT, INSERT, UPDATE, DELETE, MERGE 데이터 조작
DCL (Data Control) GRANT, REVOKE 권한 제어
TCL (Transaction Control) COMMIT, ROLLBACK, SAVEPOINT 트랜잭션 제어

SELECT는 엄밀히 "DML 중 조회"지만, 분류상 DQL(Data Query Language)로 떼어 부르기도 합니다. SQLD에서는 DML에 포함해서 답하면 됩니다.

2. SELECT 문의 실행 순서

사용자가 작성한 순서와 실제 평가 순서는 다릅니다.

-- 작성 순서
SELECT   col, agg(col2)
FROM     tab
WHERE    filter1
GROUP BY col
HAVING   filter2
ORDER BY col;

평가 순서 (암기 필수):

  1. FROM — 대상 테이블 확보
  2. WHERE — 행 필터
  3. GROUP BY — 그룹화
  4. HAVING — 그룹 필터
  5. SELECT — 칼럼 선정
  6. ORDER BY — 정렬

WHERE는 행 단위, HAVING은 그룹 단위. 집계 함수는 WHERE에 쓸 수 없다.

3. 주요 데이터 타입

분류 Oracle PostgreSQL/ANSI
문자 고정 CHAR(n) CHAR(n)
문자 가변 VARCHAR2(n) VARCHAR(n) / TEXT
정수 NUMBER(p) INT / BIGINT
실수 NUMBER(p,s) NUMERIC(p,s)
날짜 DATE, TIMESTAMP DATE, TIMESTAMP
불린 (N/A, 1/0로 대체) BOOLEAN

4. 기본 CRUD

-- CREATE TABLE
CREATE TABLE emp (
  emp_id    INT PRIMARY KEY,
  name      VARCHAR(50) NOT NULL,
  dept_id   INT REFERENCES dept(dept_id),
  hired_at  DATE DEFAULT CURRENT_DATE,
  salary    NUMERIC(12,0) CHECK (salary >= 0)
);

-- INSERT
INSERT INTO emp (emp_id, name, dept_id, salary) VALUES (1, '김개발', 10, 3800000);

-- SELECT
SELECT name, salary FROM emp WHERE dept_id = 10 ORDER BY salary DESC;

-- UPDATE
UPDATE emp SET salary = salary + 100000 WHERE dept_id = 10;

-- DELETE
DELETE FROM emp WHERE hired_at < DATE '2020-01-01';

5. 식별자(객체 이름) 규칙

  • 영문자로 시작, 숫자·언더스코어 허용 (일반 식별자).
  • 예약어와 겹치지 않게 작명.
  • 큰따옴표로 감싸면 공백·대소문자 구분 식별자 가능하지만 유지보수에 불리.
CREATE TABLE "User Data" ("First Name" VARCHAR(50));  -- 비추천

6. 제약조건 (Constraint)

제약 의미
NOT NULL NULL 금지
UNIQUE 중복 금지
PRIMARY KEY NOT NULL + UNIQUE (대표 식별자)
FOREIGN KEY 참조 무결성
CHECK 조건식 만족
DEFAULT 값 생략 시 기본값

7. 자주 출제되는 포인트

  • SELECT 실행 순서: FROM → WHERE → GROUP → HAVING → SELECT → ORDER BY.
  • TRUNCATE는 DDL이라 롤백 불가, DELETE는 DML이라 롤백 가능.
  • WHERE엔 집계 함수 사용 불가, HAVING엔 가능.
  • NUMBER(p,s)의 p는 전체 자릿수, s는 소수 자릿수.
  • PK는 NOT NULL + UNIQUE 를 자동으로 만족.

8. 요약 체크리스트

  • DDL/DML/DCL/TCL의 명령을 각각 분류할 수 있다.
  • SELECT 문의 평가 순서를 암기했다.
  • TRUNCATE와 DELETE의 차이(DDL vs DML, 롤백 가능성)를 안다.
  • 6가지 기본 제약의 역할을 설명할 수 있다.