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;
평가 순서 (암기 필수):
FROM— 대상 테이블 확보WHERE— 행 필터GROUP BY— 그룹화HAVING— 그룹 필터SELECT— 칼럼 선정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가지 기본 제약의 역할을 설명할 수 있다.