Урок 1 из 8 · 15 мин · обновлено

База данных и первый запрос SELECT

Что такое база данных и СУБД, из чего состоит таблица, зачем нужен первичный ключ, как написать первый запрос SELECT и где тренироваться без установки программ.

Где живут данные

Интернет-магазин помнит каждого покупателя, каждый товар и каждый заказ. Всё это лежит в базе данных — хранилище, которое держит много записей, не теряет их и быстро находит нужные.

Управляет базой специальная программа — СУБД, система управления базами данных. Самые распространённые:

  • PostgreSQL — популярна в российских компаниях и стартапах;
  • MySQL — часто стоит за сайтами;
  • SQLite — маленькая база внутри одного файла, есть почти в каждом телефоне;
  • Microsoft SQL Server — встречается в крупных компаниях.

Разговаривают со всеми ними на одном языке — SQL. Основа у него общая, а отличия похожи на диалекты: в одном месте слово другое, в другом — лишняя возможность. Где это важно, в уроках сказано прямо.

Из чего состоит таблица

Данные в базе разложены по таблицам. В нашем учебном магазине их три: клиенты, книги и заказы. Вот таблица книг:

id title author genre price
1 Мастер и Маргарита Булгаков роман 590
2 Преступление и наказание Достоевский роман 450
3 Краткая история времени Хокинг наука 720
… … … … …
  • Строка — одна запись: одна книга.
  • Столбец — одно свойство всех записей: название, автор, жанр, цена.
  • У каждого столбца есть тип: в price лежат целые числа, в title — текст. Сложить два названия база не даст, а две цены — пожалуйста.

Первый столбец id особенный. Это первичный ключ — уникальный номер строки. Две книги могут называться одинаково, но id у них всегда разный. По этому номеру другие таблицы ссылаются на книгу: в заказе хранится не название, а book_id. Как такие ссылки работают, разберём в уроке 6.

Первый запрос

Чтобы получить данные, базе отправляют запрос. Самый частый начинается со слова SELECT — «выбрать»:

SQL
SELECT title, price FROM books;
Результат
title                             | price
Мастер и Маргарита                | 590
Преступление и наказание          | 450
Краткая история времени           | 720
Гарри Поттер и философский камень | 650
Хоббит                            | 540
Sapiens                           | 890
Идиот                             | 480
Чистый код                        | 1200

Разберём по словам:

  • SELECT title, price — какие столбцы показать, через запятую;
  • FROM books — из какой таблицы;
  • ; — конец запроса. Он нужен, когда запросов несколько подряд.

Чтобы увидеть все столбцы, вместо списка пишут звёздочку: SELECT * FROM books;. Это удобно, чтобы познакомиться с таблицей. В рабочих запросах столбцы перечисляют явно: так понятнее, что именно нужно, и база не тащит лишнее.

Слова SQL можно писать и маленькими буквами — select сработает так же. Большими их пишут по традиции, чтобы команды было видно среди названий таблиц.

Где тренироваться

Ставить ничего не нужно. Откройте sqliteonline.com — это бесплатная песочница с базой SQLite прямо в браузере. Слева — список таблиц, в центре — поле для запроса, кнопка Run выполняет его, а результат появляется снизу.

Учебные таблицы создаёт скрипт из задания ниже. Его достаточно запустить один раз. Если данные в песочнице испортились или страница перезагрузилась, просто запустите его снова: скрипт сам удалит старые таблицы и создаст их заново.

Попробуйте сами. Откройте sqliteonline.com, вставьте в поле запроса скрипт учебной базы и нажмите Run. Затем напишите запрос, который покажет имена и города всех клиентов.

Скрипт учебной базы и решение

Скрипт создаёт три таблицы — клиентов, книги и заказы — и заполняет их:

SQL
DROP TABLE IF EXISTS orders;
DROP TABLE IF EXISTS books;
DROP TABLE IF EXISTS customers;

CREATE TABLE customers (id INTEGER PRIMARY KEY, name TEXT, city TEXT, signup_date TEXT);
INSERT INTO customers VALUES
  (1, 'Анна', 'Москва', '2026-01-15'),
  (2, 'Борис', 'Казань', '2026-02-03'),
  (3, 'Вера', 'Москва', '2026-02-20'),
  (4, 'Глеб', 'Пермь', '2026-03-11'),
  (5, 'Дина', NULL, '2026-04-02'),
  (6, 'Егор', 'Казань', '2026-05-19');

CREATE TABLE books (id INTEGER PRIMARY KEY, title TEXT, author TEXT, genre TEXT, price INTEGER);
INSERT INTO books VALUES
  (1, 'Мастер и Маргарита', 'Булгаков', 'роман', 590),
  (2, 'Преступление и наказание', 'Достоевский', 'роман', 450),
  (3, 'Краткая история времени', 'Хокинг', 'наука', 720),
  (4, 'Гарри Поттер и философский камень', 'Роулинг', 'фэнтези', 650),
  (5, 'Хоббит', 'Толкин', 'фэнтези', 540),
  (6, 'Sapiens', 'Харари', 'наука', 890),
  (7, 'Идиот', 'Достоевский', 'роман', 480),
  (8, 'Чистый код', 'Мартин', 'IT', 1200);

CREATE TABLE orders (id INTEGER PRIMARY KEY, customer_id INTEGER, book_id INTEGER, order_date TEXT, amount INTEGER, status TEXT);
INSERT INTO orders VALUES
  (1, 1, 1, '2026-05-03', 590, 'доставлен'),
  (2, 1, 3, '2026-05-18', 720, 'доставлен'),
  (3, 2, 8, '2026-05-21', 1200, 'доставлен'),
  (4, 3, 4, '2026-06-02', 650, 'доставлен'),
  (5, 2, 6, '2026-06-09', 890, 'отменён'),
  (6, 4, 2, '2026-06-14', 450, 'доставлен'),
  (7, 2, 5, '2026-06-20', 540, 'в пути'),
  (8, 3, 7, '2026-06-25', 480, 'в пути'),
  (9, 5, 4, '2026-06-28', 650, 'доставлен');

Запрос к клиентам:

SQL
SELECT name, city FROM customers;
Результат
name  | city
Анна  | Москва
Борис | Казань
Вера  | Москва
Глеб  | Пермь
Дина  | NULL
Егор  | Казань

У Дины вместо города стоит NULL — так база показывает, что значение не заполнено. Это не ошибка: про пустые значения подробно поговорим в уроке 4.

Мини-тест: проверьте себя

Закрепите урок: несколько вопросов, разбор ответов — в конце.

  1. Что хранится в одной строке таблицы books?

  2. Зачем в таблице столбец id?

  3. Что вернёт запрос SELECT title FROM books;?

  4. Что такое СУБД?