DDL/DCL/DML
데이터 정의어/제어어/조작어
May 15, 2026
DDL 데이터 정의어
# CREATE CREATE TABLE 학생 ( 학생번호 INT PRIMARY KEY, 이름 VARCHAR(20) NOT NULL ); # ALTER (ADD, MODIFY, DROP) ALTER TABLE 학생 ADD 연락처 VARCHAR(15); # TRUNCATE 구조 유지 내용만 삭제 TRUNCATE TABLE 학생; # DROP 테이블자체 삭제(복구 불가) DROP TABLE 학생;
DCL 데이터 제어어
객체 권한 (특정 테이블을 다룰 수 있는 권한).
SELECT: 조회 권한
INSERT: 삽입 권한
UPDATE: 수정 권한
DELETE: 삭제 권한
ALL: 위의 모든 권한을 한 번에 다 주는 권한
GRANT
GRANT [권한종류] ON [테이블명] TO [사용자명];
GRANT SELECT, INSERT ON 학생 TO HONG;
REVOKE
REVOKE [권한종류] ON [테이블명] FROM [사용자명];
REVOKE INSERT ON 학생 FROM HONG;
DML 데이터 조작어
INSERT, UPDATE, DELETE
INSERT ➡️ INTO 테이블명 VALUES (값...) UPDATE ➡️ 테이블명 SET 컬럼=값 WHERE 조건 DELETE ➡️ FROM 테이블명 WHERE condition
# INSERT (데이터 삽입) INSERT INTO 학생 (학생번호, 이름, 연락처) VALUES (10, '홍길동', '010-1111'); # UPDATE (데이터 수정) UPDATE 학생 SET 연락처 = '010-2222' WHERE 이름 = '홍길동'; # DELETE (데이터 삭제) DELETE FROM 학생 WHERE 이름 = '홍길동';
SELECT
작성 순서
SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY
실행 순서
FROM (테이블을 먼저 열고)
WHERE (조건에 맞는 행을 거르고)
GROUP BY (그룹으로 묶은 뒤)
HAVING (그룹 조건으로 또 거르고)
SELECT (보여줄 컬럼을 선택하고)
ORDER BY (최종 정렬한다)
WHERE절 비교 연산자
WHERE 절에서는 개별 행을 필터링하기 위해 다양한 연산자를 사용
| 연산자 종류 | 의미 | 예시 구문 | 설명 |
|---|---|---|---|
= | 같다 | WHERE 부서 = '개발부' | 부서가 개발부인 행만 선택 |
!= 또는 <> | 같지 않다 | WHERE 부서 != '영업부' | 영업부가 아닌 부서만 선택 |
>=, <= | 크거나 같다, 작거나 같다 | WHERE 급여 >= 300 | 급여가 300 이상인 행만 선택 |
BETWEEN A AND B | A와 B 사이 (A, B 포함) | WHERE 급여 BETWEEN 200 AND 400 | 급여가 200 이상 400 이하인 행 선택 |
IN (A, B, C) | A, B, C 중 하나라도 일치 | WHERE 부서 IN ('개발부', '기획부') | 개발부이거나 기획부인 행 선택 |
LIKE | 패턴 매칭 (와일드카드) | WHERE 이름 LIKE '김%' | 성이 '김' 씨로 시작하는 모든 행 선택 |
IS NULL | 값이 비어있음 | WHERE 연락처 IS NULL | 연락처가 입력되지 않은 행 선택 |
GROUP BY / HAVING절
데이터를 특정 컬럼 기준으로 그룹화하고, 그 그룹 전체에 조건을 걸 때 사용
SELECT 부서, AVG(급여) FROM 직원 GROUP BY 부서 HAVING AVG(급여) >= 350;
ORDER BY
앞에 쓴 기준이 먼저 적용되고 동점자가 있을 때 뒤의 기준으로 정렬
SELECT 이름, 부서, 급여 FROM 직원 ORDER BY 부서 ASC, 급여 DESC;
집계 함수
SELECT COUNT(*) AS 총직원수, #NULL 포함 SUM(급여) AS 급여총액, #NULL 제외 AVG(급여) AS 평균급여, MAX(급여) AS 최고급여, MIN(급여) AS 최저급여 FROM 직원;
집합 연산자
# UNION (합집합 - 중복 제거) SELECT 이름 FROM 본사직원 UNION SELECT 이름 FROM 지사직원; # UNION ALL (합집합 - 중복 포함) SELECT 이름 FROM 본사직원 UNION ALL SELECT 이름 FROM 지사직원; # INTERSECT (교집합) SELECT 이름 FROM 본사직원 INTERSECT SELECT 이름 FROM 지사직원; # EXCEPT (차집합, Oracle에서는 MINUS) SELECT 이름 FROM 본사직원 EXCEPT SELECT 이름 FROM 지사직원;
Go toor?