Урок 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 — «выбрать»:
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. Затем напишите запрос, который покажет имена и города всех клиентов.
Скрипт учебной базы и решение
Скрипт создаёт три таблицы — клиентов, книги и заказы — и заполняет их:
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, 'доставлен');
Запрос к клиентам:
SELECT name, city FROM customers;
name | city
Анна | Москва
Борис | Казань
Вера | Москва
Глеб | Пермь
Дина | NULL
Егор | Казань
У Дины вместо города стоит NULL — так база показывает, что значение не заполнено. Это не ошибка: про пустые значения подробно поговорим в уроке 4.
Мини-тест: проверьте себя
Закрепите урок: несколько вопросов, разбор ответов — в конце.
-
Что хранится в одной строке таблицы books?
Строка — одна запись: здесь одна книга. Её свойства — название, автор, жанр, цена — лежат в столбцах.
-
Зачем в таблице столбец id?
Две книги могут называться одинаково, а id у них всегда разный. Поэтому другие таблицы ссылаются на запись именно по id.
-
Что вернёт запрос SELECT title FROM books;?
SELECT перечисляет столбцы, которые нужно показать, FROM — таблицу. Строки возвращаются все.
-
Что такое СУБД?
SQL — язык, а СУБД — программа, которая его понимает: PostgreSQL, MySQL, SQLite и другие.