| SQL 분류 | DDL | 데이터베이스 구조 정의 | CREATE, ALTER, DROP, TRUNCATE | 테이블 만들기/수정/삭제는 DDL |
| SQL 분류 | DML | 실제 데이터 조작 | SELECT, INSERT, UPDATE, DELETE | 조회/삽입/수정/삭제는 DML |
| SQL 분류 | DCL | 권한 제어 | GRANT, REVOKE | 권한 주기/회수는 DCL |
| SQL 분류 | TCL | 트랜잭션 제어 | COMMIT, ROLLBACK | 작업 확정/취소 |
| DDL | CREATE | 테이블 생성 | CREATE TABLE student (id INT PRIMARY KEY, name VARCHAR(20)); | 괄호 안에 컬럼명 + 자료형 + 제약조건 |
| DDL | ALTER | 테이블 구조 변경 | ALTER TABLE student ADD phone VARCHAR(20); | 기존 테이블에 컬럼/조건 추가 |
| DDL | ALTER ADD | 컬럼 추가 | ALTER TABLE student ADD age INT; | ADD 컬럼명 자료형 |
| DDL | ALTER DROP COLUMN | 컬럼 삭제 | ALTER TABLE student DROP COLUMN phone; | 테이블 삭제가 아니라 컬럼 삭제 |
| DDL | ALTER CHECK | 조건 추가 | ALTER TABLE student ADD CONSTRAINT chk_age CHECK (age >= 0); | 조건은 CHECK (조건식) 안에 씀 |
| DDL | DROP | 테이블 자체 삭제 | DROP TABLE student; | 구조 + 데이터 전부 삭제 |
| DDL | TRUNCATE | 테이블 비우기 | TRUNCATE TABLE student; | 구조는 남고 데이터만 전체 삭제 |
| DML | SELECT | 데이터 조회 | SELECT name, age FROM student; | 원하는 컬럼 조회 |
| DML | INSERT | 데이터 삽입 | INSERT INTO student (id, name) VALUES (1, '철수'); | 앞 괄호는 컬럼명, 뒤 괄호는 값 |
| DML | UPDATE | 데이터 수정 | UPDATE student SET age = 18 WHERE name = '철수'; | WHERE 없으면 전체 수정 |
| DML | DELETE | 행 삭제 | DELETE FROM student WHERE id = 1; | WHERE 없으면 전체 데이터 삭제 |
| DCL | GRANT | 권한 부여 | GRANT SELECT ON student TO user1; | GRANT 권한 ON 테이블 TO 사용자 |
| DCL | REVOKE | 권한 회수 | REVOKE SELECT ON student FROM user1; | REVOKE 권한 ON 테이블 FROM 사용자 |
| DCL | GRANT UPDATE() | 특정 컬럼 수정 권한 | GRANT UPDATE(name, age) ON student TO user1; | 괄호 안에는 컬럼명 |
| DCL | ALL | 모든 권한 | GRANT ALL ON student TO user1; | ALL은 전체 권한 |
| SELECT | DISTINCT | 중복 제거 | SELECT DISTINCT grade FROM student; | 같은 값은 한 번만 출력 |
| SELECT | WHERE | 일반 조건 | SELECT * FROM student WHERE age >= 17; | 그룹 묶기 전 조건 |
| SELECT | GROUP BY | 같은 값끼리 그룹화 | SELECT dept, COUNT(*) FROM student GROUP BY dept; | 집계함수랑 자주 같이 나옴 |
| SELECT | HAVING | 그룹 조건 | HAVING COUNT(*) >= 3 | 그룹 묶은 뒤 조건 |
| SELECT | ORDER BY | 정렬 | ORDER BY age DESC; | ASC 오름차순, DESC 내림차순 |
| 함수 | COALESCE | NULL 아닌 첫 번째 값 반환 | COALESCE(tlno, 'NONE') | NULL이면 다음 값으로 넘어감 |
| 함수 | IFNULL | NULL 대체 | IFNULL(tlno, 'NONE') | MySQL에서 자주 씀 |
| 함수 | COUNT | 개수 | COUNT(*) | 행 개수 셈 |
| 함수 | SUM | 합계 | SUM(price) | 숫자 합계 |
| 함수 | AVG | 평균 | AVG(price) | 평균값 |
| 함수 | MAX | 최댓값 | MAX(price) | 가장 큰 값 |
| 함수 | MIN | 최솟값 | MIN(price) | 가장 작은 값 |
| 제약조건 | PRIMARY KEY | 기본키 | id INT PRIMARY KEY | 중복 X, NULL X |
| 제약조건 | FOREIGN KEY | 외래키 | FOREIGN KEY (dept_id) REFERENCES dept(dept_id) | 다른 테이블의 기본키 참조 |
| 제약조건 | NOT NULL | NULL 금지 | name VARCHAR(20) NOT NULL | 반드시 값 있어야 함 |
| 제약조건 | UNIQUE | 중복 금지 | email VARCHAR(50) UNIQUE | 중복 X, NULL은 DB마다 다를 수 있음 |
| 제약조건 | CHECK | 조건 제한 | CHECK (age >= 0) | 조건식 만족해야 입력 가능 |
| 제약조건 | DEFAULT | 기본값 | grade INT DEFAULT 1 | 값 안 넣으면 기본값 입력 |
| 외래키 옵션 | RESTRICT | 참조 중이면 삭제/수정 막음 | ON DELETE RESTRICT | “누가 참조 중이면 건드리지 마” |
| 외래키 옵션 | CASCADE | 부모 변경/삭제 시 자식도 같이 변경/삭제 | ON DELETE CASCADE | 같이 삭제/변경 |
| 외래키 옵션 | SET NULL | 부모 삭제 시 자식 외래키를 NULL로 변경 | ON DELETE SET NULL | 연결 끊고 NULL 처리 |
| 비교 | DELETE vs DROP | 데이터 삭제 vs 테이블 삭제 | DELETE FROM student; / DROP TABLE student; | DELETE는 DML, DROP은 DDL |
| 비교 | DELETE vs TRUNCATE | 조건 삭제 vs 전체 비우기 | DELETE WHERE 조건 / TRUNCATE TABLE | TRUNCATE는 구조 유지 |
| 비교 | WHERE vs HAVING | 일반 조건 vs 그룹 조건 | WHERE age >= 17 / HAVING COUNT(*) >= 3 | HAVING은 GROUP BY 뒤 |
| 비교 | DISTINCT vs GROUP BY | 중복 제거 vs 그룹 집계 | DISTINCT dept / GROUP BY dept | 개수/합계 구할 땐 GROUP BY |
| 문법 순서 | SELECT문 순서 | 조회문 작성 순서 | SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY | 이 순서로 외우기 |
| 문법 순서 | UPDATE문 순서 | 수정문 작성 순서 | UPDATE 테이블 SET 컬럼=값 WHERE 조건 | SET 먼저, 조건은 WHERE |
| 문법 순서 | DELETE문 순서 | 삭제문 작성 순서 | DELETE FROM 테이블 WHERE 조건 | FROM 빠지면 안 됨 |
| 문법 순서 | GRANT문 순서 | 권한 부여 순서 | GRANT 권한 ON 테이블 TO 사용자 | 부여는 TO |
| 문법 순서 | REVOKE문 순서 | 권한 회수 순서 | REVOKE 권한 ON 테이블 FROM 사용자 | 회수는 FROM |
| 발음 | DISTINCT | 디스팅트 | 중복 제거 | 문제에서 중복 제거 나오면 DISTINCT |
| 발음 | RESTRICT | 리스트릭트 | 제한하다 | 참조 중이면 막는 옵션 |
| 발음 | COALESCE | 코얼레스 | NULL 아닌 첫 값 | NULL 처리 함수 |