Первая таблица: CREATE, INSERT, SELECT

Проходим базовый цикл работы с данными: создать таблицу, наполнить её и прочитать.

Таблица — это набор строк с одинаковыми столбцами; столбцы задают, какие данные хранятся, а строки — сами записи.

CREATE TABLE — описываем структуру

Любые данные в реляционной базе живут в таблицах, поэтому первый шаг — создать таблицу и описать её столбцы. Сделаем таблицу книг: у каждой книги есть номер, название, автор, год и число страниц.

CREATE TABLE books (
    id     INTEGER PRIMARY KEY,
    title  TEXT NOT NULL,
    author TEXT,
    year   INTEGER,
    pages  INTEGER
);

Разберём по частям. id INTEGER PRIMARY KEY — числовой первичный ключ, который однозначно определяет строку (и заодно автоматически нумеруется). title TEXT NOT NULL — название обязательно, пустым его оставить нельзя. Остальные столбцы могут быть пустыми (NULL). Этот блок сам по себе ничего не выводит — он просто создаёт структуру.

INSERT — добавляем строки

Теперь наполним таблицу. Команда INSERT добавляет строки. Перечисляем столбцы, в которые кладём данные, и затем значения. id не указываем — он проставится сам.

CREATE TABLE books (
    id     INTEGER PRIMARY KEY,
    title  TEXT NOT NULL,
    author TEXT,
    year   INTEGER,
    pages  INTEGER
);

INSERT INTO books (title, author, year, pages) VALUES
    ('Война и мир',              'Толстой',     1869, 1300),
    ('Преступление и наказание', 'Достоевский', 1866, 670),
    ('Мастер и Маргарита',       'Булгаков',    1967, 480);

SELECT * FROM books;

Вывод:

1|Война и мир|Толстой|1869|1300
2|Преступление и наказание|Достоевский|1866|670
3|Мастер и Маргарита|Булгаков|1967|480

За один INSERT мы добавили сразу три строки, разделив их запятыми. Столбец id заполнился значениями 1, 2, 3 автоматически.

SELECT — читаем данные

SELECT достаёт данные из таблицы. Звёздочка * означает «все столбцы». Чаще полезнее перечислить нужные столбцы и отфильтровать строки через WHERE. Найдём книги короче 700 страниц и отсортируем по году:

CREATE TABLE books (
    id     INTEGER PRIMARY KEY,
    title  TEXT NOT NULL,
    author TEXT,
    year   INTEGER,
    pages  INTEGER
);

INSERT INTO books (title, author, year, pages) VALUES
    ('Война и мир',              'Толстой',     1869, 1300),
    ('Преступление и наказание', 'Достоевский', 1866, 670),
    ('Мастер и Маргарита',       'Булгаков',    1967, 480);

SELECT title, year
FROM books
WHERE pages < 700
ORDER BY year;

Вывод:

Преступление и наказание|1866
Мастер и Маргарита|1967

Заметьте структуру запроса: SELECT (какие столбцы) → FROM (откуда) → WHERE (какие строки) → ORDER BY (в каком порядке). Этот порядок частей мы будем встречать постоянно.

Почему примеры самодостаточны

Каждый исполняемый блок в этом курсе начинается с CREATE TABLE и INSERT, а уже потом идёт SELECT. Так блок можно запустить с чистого листа и получить предсказуемый результат, ничего не настраивая заранее. Меняйте условия в WHERE и колонки в SELECT — это лучший способ закрепить материал.

Итог

  • CREATE TABLE описывает структуру: имена и типы столбцов, первичный ключ, ограничения.
  • INSERT INTO ... VALUES добавляет строки; за раз можно вставить несколько.
  • SELECT ... FROM ... WHERE ... ORDER BY читает и фильтрует данные в заданном порядке.
Проверьте себя
1. Что делает INTEGER PRIMARY KEY у столбца id в SQLite?
AЗапрещает вставку в эту таблицу
BДелает столбец уникальным ключом строки и включает автонумерацию
CХранит дату создания строки
DШифрует значение
2. Что произойдёт, если в INSERT не указать столбец id из примера?
AБудет ошибка — id обязателен
BSQLite сам подставит следующее число
CВ id запишется NULL и строка станет невидимой
DВсе строки получат id = 0
3. В каком порядке записываются части простого запроса?
AWHERE → SELECT → FROM → ORDER BY
BFROM → WHERE → SELECT → ORDER BY
CSELECT → FROM → WHERE → ORDER BY
DORDER BY → SELECT → FROM → WHERE
Поддержать проект