Menu

SQL 명령어 정리: 자주 쓰는 SQL 문 목록과 예제

매일 쓰는 SQL 명령어를 하는 일에 따라 DDL, DML, DQL, TCL로 나누어 정리했습니다. 모든 명령어에 SQLite에서 바로 실행할 수 있는 예제가 있습니다.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

SQL 명령어 한눈에 보기

SQL 명령어는 하는 일에 따라 몇 개의 그룹으로 나뉩니다. 아래 표는 가장 자주 쓰는 명령어를 모은 것이고, 이어지는 각 섹션에서 하나씩 실행해 봅니다.

명령어그룹하는 일
CREATE TABLEDDL새 테이블과 그 컬럼을 정의합니다
ALTER TABLEDDL컬럼을 추가하거나 이름을 바꾸고, 테이블 이름을 바꿉니다
DROP TABLEDDL테이블을 모든 행과 함께 삭제합니다
INSERTDML새 행을 추가합니다
UPDATEDML기존 행의 값을 바꿉니다
DELETEDML행을 삭제합니다
SELECTDQL행을 읽습니다. WHERE로 거르고 ORDER BY로 정렬합니다
BEGIN, COMMIT, ROLLBACKTCL여러 변경을 묶어 모두 성공하거나 모두 실패하게 합니다

DDL은 데이터 정의어, DML은 데이터 조작어, DQL은 데이터 질의어, TCL은 트랜잭션 제어어입니다. 이름보다 중요한 것은 구분 방식입니다. DDL은 데이터베이스의 형태를 바꾸고, DML은 그 안에 든 데이터를 바꿉니다.

CREATE TABLE: 테이블 정의하기

CREATE TABLE은 테이블 이름을 정하고, 컬럼을 자료형과 규칙과 함께 나열합니다. 이 페이지의 다른 모든 명령어는 작업할 테이블이 있어야 합니다.

NOT NULL, UNIQUE, DEFAULT 같은 규칙은 CREATE TABLE 페이지에서 다룹니다.

INSERT: 행 추가하기

INSERT INTO는 행을 하나 또는 여러 개 추가합니다. 컬럼을 나열한 다음, 같은 순서로 값을 적습니다.

id 컬럼은 저절로 채워졌습니다. INTEGER PRIMARY KEY는 값을 생략하면 다음 번호를 받습니다. 자세한 내용은 INSERT에서 확인하세요.

SELECT: 행 읽기

SELECT는 가장 많이 쓰게 될 명령어입니다. 컬럼을 고르고, WHERE로 행을 거르고, ORDER BY로 정렬합니다.

WHERE 조건을 통과한 행만 점수가 높은 순서로 돌아옵니다. 자세한 내용은 SELECT 기본과 WHERE 절을 참고하세요.

UPDATE: 행 수정하기

UPDATE는 이미 있는 행에 새 값을 넣습니다. 어떤 행을 바꿀지는 WHERE 절이 정하며, 이 절을 빼면 모든 행이 바뀝니다.

WHERE 절이 어떤 행에 걸리는지 확실하지 않다면 먼저 SELECT로 실행해 보세요. 더 많은 패턴은 SQL UPDATE 문 페이지에 있습니다.

DELETE: 행 삭제하기

DELETE FROM은 WHERE 절에 맞는 행을 삭제합니다. UPDATE와 마찬가지로 이 절이 없으면 모든 행에 적용됩니다.

Chen의 행은 사라지고 나머지는 그대로입니다. DELETE를 참고하세요.

ALTER TABLE과 DROP TABLE: 테이블 변경하기와 삭제하기

ALTER TABLE은 기존 테이블의 행을 잃지 않고 테이블을 바꿉니다. DROP TABLE은 테이블을 완전히 삭제합니다.

새 컬럼은 값을 채우기 전까지 기존 행에서 NULL입니다. SQLite에서 허용하는 변경은 ALTER TABLE과 DROP TABLE에 정리되어 있습니다.

JOIN: 테이블 합치기

JOIN은 두 테이블에서 공통 컬럼을 기준으로 짝을 맞춰 행을 한꺼번에 읽습니다.

Boris는 수강 기록이 없어서 INNER JOIN 결과에서 빠집니다. LEFT JOIN을 쓰면 과목이 빈 채로 Boris도 남습니다.

GROUP BY: 행 요약하기

GROUP BY는 같은 값을 가진 행을 한 행으로 묶고, COUNT나 AVG 같은 집계 함수가 각 그룹을 요약합니다.

더 자세한 내용은 SQL 집계 함수와 GROUP BY와 HAVING에서 다룹니다.

BEGIN, COMMIT, ROLLBACK: 변경 묶기

트랜잭션은 여러 변경을 하나처럼 처리합니다. COMMIT은 변경을 모두 유지하고, ROLLBACK은 모두 취소합니다.

송금은 커밋되었고 두 번째 변경은 롤백되었으므로, Ada는 70, Boris는 80으로 끝납니다. 언제 트랜잭션을 써야 하는지는 트랜잭션에서 설명합니다.

SQLite가 다른 점

이 페이지의 명령어는 표준 SQL이므로 여기서 배운 내용은 MySQL과 PostgreSQL에서도 쓸 수 있습니다. 다만 실행 가능한 예제는 SQLite용으로 작성되었고, 더 큰 데이터베이스에서는 세 가지가 달라집니다.

  • 테이블 목록 보기. 예제는 SQLite 고유의 스키마 테이블인 sqlite_master를 읽습니다. MySQL은 SHOW TABLES를, PostgreSQL은 information_schema.tables 뷰(또는 psql의 \dt)를 사용합니다.
  • 자동 증가 id. SQLite에서는 INTEGER PRIMARY KEY로 선언한 열이 새 행에 번호를 자동으로 붙입니다. INSERT 예제에서 id를 생략한 이유입니다. MySQL에서는 열에 AUTO_INCREMENT가, PostgreSQL에서는 IDENTITY 열(GENERATED BY DEFAULT AS IDENTITY)이나 SERIAL이 필요합니다.
  • 권한과 스키마 변경. SQLite 데이터베이스는 사용자 계정이 없는 파일 하나이므로 GRANT와 REVOKE가 없고, ALTER TABLE로 열의 타입을 바꿀 수도 없습니다.

자주 묻는 질문

SQL 기본 명령어에는 무엇이 있나요?

평소 작업은 대부분 다섯 가지로 해결됩니다. 테이블을 정의하는 CREATE TABLE, 행을 추가하는 INSERT, 행을 읽는 SELECT, 행을 수정하는 UPDATE, 행을 삭제하는 DELETE입니다. 그다음으로 ALTER TABLE, DROP TABLE, JOIN, GROUP BY, 그리고 트랜잭션 명령어 BEGIN, COMMIT, ROLLBACK을 자주 씁니다.

DDL과 DML은 어떻게 다른가요?

DDL(데이터 정의어)은 데이터베이스의 구조를 바꾸며, CREATE, ALTER, DROP이 여기에 속합니다. DML(데이터 조작어)은 테이블 안의 행을 바꾸며, INSERT, UPDATE, DELETE가 여기에 속합니다. SELECT는 읽기만 하므로 DQL로 따로 분류하는 경우가 많습니다.

SQL 명령어는 대소문자를 구분하나요?

아닙니다. SELECT, select, Select 모두 동작합니다. 키워드를 대문자로 쓰는 것은 테이블 이름, 컬럼 이름과 구별하기 쉽게 하려는 관례입니다. 다만 따옴표 안의 텍스트는 그대로 비교되므로, 대소문자를 구분하지 않는 비교를 따로 지정하지 않으면 SQLite에서 'Ada'와 'ada'는 다른 문자열입니다.

이 명령어들은 MySQL과 PostgreSQL에서도 똑같이 동작하나요?

이 문들은 표준 SQL이라 세 데이터베이스에서 모두 같은 뜻이고, 여기서 배운 내용은 그대로 쓸 수 있습니다. 다만 실행 가능한 예제는 SQLite용으로 작성되었습니다. 테이블 목록은 여기서 sqlite_master를 읽고, 자동 증가 id는 MySQL에서는 AUTO_INCREMENT, PostgreSQL에서는 IDENTITY 열이 필요하며, SQLite에는 GRANT와 REVOKE가 없습니다.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기