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 BA와 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?