확인한 환경과 범위

Windows · SQLite 3.45.3. 본문의 첫 예제를 실행하여 표준 출력과 예상 결과가 일치함을 확인했습니다. 연습문제의 모든 입력을 검증한 것은 아닙니다.

이 글의 순서 5개 단락

할 일을 저장하려면 먼저 각 할 일의 번호, 내용, 상태를 담을 테이블이 필요합니다. SQLite에서 테이블을 만들고 두 행을 추가한 뒤 저장된 값을 조회해 보겠습니다.

테이블과 열 정의하기

CREATE TABLE은 테이블의 이름과 열을 정의합니다. 각 열에는 이름과 자료형을 지정합니다. 이 예제에서 INTEGER는 정수, TEXT는 문자열을 나타냅니다. SQLite의 일반 테이블에서는 자료형 선언이 모든 값의 자료형을 엄격하게 제한하지는 않습니다.

id의 PRIMARY KEY는 각 행을 구별하는 기본 키입니다. 같은 번호를 두 행에 넣을 수 없습니다. title의 NOT NULL은 할 일 내용에 NULL을 저장하지 못하도록 하는 제약입니다.

할 일 두 개를 저장하고 조회하기

실습 환경은 SQLite입니다. todos 테이블이 없는 새 데이터베이스에서 아래 문장 전체를 순서대로 입력합니다. 입력 데이터는 번호 1과 2인 할 일 두 개입니다.

CREATE TABLE todos (
    id INTEGER PRIMARY KEY,
    title TEXT NOT NULL,
    status TEXT
);

INSERT INTO todos (id, title, status)
VALUES
    (1, 'SQL 복습하기', '대기'),
    (2, '산책하기', '완료');

SELECT id, title, status
FROM todos
ORDER BY id;

테이블 만들고 행 추가하기 — 첫 예제의 실제 실행 결과

마지막 SELECT의 예상 결과는 다음과 같습니다. 구분선이나 열 너비는 사용하는 SQLite 실행 환경에 따라 달라질 수 있습니다.

id | title        | status
1  | SQL 복습하기 | 대기
2  | 산책하기     | 완료

코드가 동작하는 순서

먼저 CREATE TABLE이 세 열을 가진 빈 todos 테이블을 만듭니다. 이어서 INSERT INTO todos (id, title, status)가 값을 넣을 열을 지정하고, VALUES 뒤의 각 괄호가 추가할 행 하나를 나타냅니다. 각 괄호 안의 값은 지정한 열 순서에 맞춰 들어갑니다. 예를 들어 첫 행의 1은 id, 'SQL 복습하기'는 title, '대기'는 status에 저장됩니다.

마지막 조회는 세 열을 보여 주고 ORDER BY id로 번호가 작은 행부터 정렬합니다. 문자열은 작은따옴표로 감싸고 정수는 따옴표 없이 적습니다.

흔한 실수와 경계 조건

  • 열 목록과 각 행의 값 개수가 다르면 삽입할 수 없습니다. 개수가 같더라도 순서가 잘못되면 의도와 다른 열에 값이 들어갈 수 있으므로 함께 확인하세요.
  • 이미 존재하는 id를 다시 넣거나 title에 NULL을 넣으면 각각 기본 키 또는 NOT NULL 제약을 위반합니다.
  • status에는 NOT NULL을 지정하지 않았습니다. 이 열을 삽입 열 목록에서 빼면 별도의 기본값이 없으므로 NULL이 저장됩니다. 빈 문자열 ''은 NULL과 다릅니다.
  • 같은 데이터베이스에서 예제 전체를 다시 실행하면 이미 todos가 있으므로 CREATE TABLE에서 오류가 납니다. 처음부터 다시 연습하려면 새 빈 데이터베이스를 사용하세요.

연습과 풀이

기존 todos 테이블에 번호가 3이고 내용이 책 읽기인 할 일을 추가하세요. 상태는 아직 정하지 않았으므로 생략한 뒤, 번호순으로 조회해 보세요.

INSERT INTO todos (id, title)
VALUES (3, '책 읽기');

SELECT id, title, status
FROM todos
ORDER BY id;

status를 열 목록에서 생략했으므로 새 행의 상태는 NULL입니다. 결과에는 기존 두 행 다음에 번호 3인 행이 나타납니다. NULL의 표시 방식은 실행 환경에 따라 다를 수 있습니다.

CHECK THE SOURCE

참고한 공식 문서

기능 설명은 위 문서를 참고했으며, 예제의 입력·결과와 한계는 본문에 따로 기록했습니다.

한 줄씩 이해하고, 차곡차곡 기록합니다.이 글의 오류 제보하기 ↗