Learning Platform
Глоссарий Troubleshooting
Урок 02.02 · 18 мин
Начальный
sqlddldmlintroduction

Минимальный SQL: четыре команды для курса

В прошлом уроке мы рисовали чертёж данных на бумаге. Но чтобы дальше в курсе проверять чертежи руками — создавать таблицы и смотреть, как они себя ведут — нужен язык, на котором с базой данных разговаривают. Этот язык называется SQL (читается «эс-кью-эль» или «сиквел»). Полный SQL большой, но для нашего курса хватит ровно четырёх команд. Этот урок — про них и больше ни про что. Если ты уже знаешь SQL, можешь пробежать его по диагонали.

Все примеры ниже можно выполнить в любой бесплатной базе данных (например, SQLite или онлайн-песочнице SQL). Но даже просто прочитать и понять их — уже достаточно, чтобы идти дальше.

Как база хранит данные: таблица

Данные в базе лежат в таблицах. Таблица — это та же сетка из строк и столбцов, что мы рисовали на бумаге. Столбцы задают, какие у записи поля (например, имя и цена), а каждая строка — это одна запись. Прежде чем что-то записать, надо объяснить базе, какая будет таблица. Это делает первая команда.

Команда 1: CREATE TABLE — создать таблицу

CREATE TABLE создаёт новую таблицу. Мы перечисляем столбцы и для каждого говорим, какого типа в нём данные: целое число (INTEGER) или текст (TEXT).

CREATE TABLE products (
    id    INTEGER,
    name  TEXT,
    price INTEGER
);

Читается так: «создай таблицу products с тремя столбцами — id (целое число), name (текст) и price (целое число)». После этой команды таблица существует, но она пустая — в ней ноль строк. Мы только начертили сетку, данных пока нет.

NOTE

INTEGER и TEXT называются типами данных. Тип говорит базе, что ожидать в столбце: число, текст, дату и так далее. Для нашего курса хватит этих двух. Точка с запятой в конце команды означает «команда закончилась».

Команда 2: INSERT — добавить строки

INSERT добавляет в таблицу новые строки. Мы указываем таблицу и перечисляем значения в том же порядке, в каком шли столбцы при создании.

INSERT INTO products VALUES
    (1, 'Чайник', 2000),
    (2, 'Кружка', 500),
    (3, 'Ложка',  100);

Читается так: «вставь в products три строки». Первая строка — id = 1, name = ‘Чайник’, price = 2000, и так далее. Обрати внимание: текст берётся в одинарные кавычки ('Чайник'), а числа — нет. Теперь в таблице три строки.

Команда 3: SELECT — посмотреть данные

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

SELECT * FROM products;

Звёздочка * означает «все столбцы». Читается: «покажи все столбцы всех строк таблицы products». Вывод:

id | name   | price
---+--------+------
1  | Чайник | 2000
2  | Кружка | 500
3  | Ложка  | 100

Часто нам не нужны все строки — нужны только подходящие под условие. Для этого добавляют WHERE — «где». Например, покажем только товары дороже 400:

SELECT name, price FROM products WHERE price > 400;

Здесь мы попросили не все столбцы, а только name и price, и только те строки, где цена больше 400. Вывод:

name   | price
-------+------
Чайник | 2000
Кружка | 500

Ложка с ценой 100 не подошла под условие и не попала в вывод. WHERE — это фильтр: остаются только строки, для которых условие истинно.

Что делает каждая команда
CREATE TABLEСоздаёт пустую таблицу: задаёт столбцы и их типы. Данных пока нет.
INSERTДобавляет новые строки с данными в существующую таблицу.
SELECTЧитает и показывает данные. WHERE фильтрует строки по условию.
UPDATE ... WHEREМеняет значения в уже существующих строках, но только в тех, что подходят под условие WHERE.

Команда 4: UPDATE … WHERE — изменить строки

UPDATE меняет значения в строках, которые уже есть. Самое важное здесь — WHERE: оно говорит, какие именно строки менять. Допустим, кружка подорожала до 600:

UPDATE products SET price = 600 WHERE id = 2;

Читается: «в таблице products поставь price = 600, но только там, где id = 2». Проверим результат через SELECT:

SELECT * FROM products;

Вывод:

id | name   | price
---+--------+------
1  | Чайник | 2000
2  | Кружка | 600
3  | Ложка  | 100

Цена кружки изменилась, остальные строки не тронуты — потому что WHERE id = 2 отобрало ровно одну строку.

DANGER

WHERE в UPDATE — не украшение, а защита. Если его забыть и написать UPDATE products SET price = 600;, база поменяет цену во ВСЕХ строках сразу: и чайник, и кружка, и ложка станут по 600. База не переспросит и не предупредит — выполнит молча. Поэтому при UPDATE всегда мысленно проверяй: какие строки отберёт мой WHERE?

Это весь SQL, который нужен курсу

Четыре команды — и всё. CREATE TABLE чертит таблицу, INSERT наполняет её строками, SELECT показывает данные (с WHERE как фильтром), UPDATE ... WHERE меняет нужные строки. Этого достаточно, чтобы выполнять практику дальше в курсе: создавать таблицы по своим чертежам, наполнять их и проверять, как они себя ведут.

Не пытайся заучить синтаксис наизусть — к этим командам ты будешь возвращаться, и они запомнятся сами. Важно понять смысл каждой: что она делает с таблицей. Когда дальше встретится незнакомая часть SQL, мы будем разбирать её по месту.

SQL с нуля и подробно

Попробуй сам

Открой любую бесплатную SQL-песочницу в браузере (поищи ‘online SQL sandbox’ или ‘SQLite online’). Своими руками повтори весь урок: командой CREATE TABLE создай таблицу products с тремя столбцами, командой INSERT добавь три-четыре своих товара, и командой SELECT * FROM products; посмотри, что получилось. Затем поэкспериментируй с WHERE: выбери только товары дороже какой-то цены. Наконец, измени цену одного товара через UPDATE ... WHERE и снова сделай SELECT, чтобы убедиться, что поменялась ровно одна строка. В конце нарочно выполни UPDATE без WHERE (на учебной таблице это безопасно) и посмотри SELECT — убедись, что изменились все строки. Это лучший способ навсегда запомнить, зачем нужен WHERE.


Проверка знанийKnowledge check
В таблице products есть строки с id 1, 2 и 3. Чем по результату отличаются команды UPDATE products SET price = 600 WHERE id = 2; и UPDATE products SET price = 600; и почему WHERE в UPDATE называют защитой?
ОтветAnswer
Первая команда содержит WHERE id = 2, то есть отбирает ровно одну строку с id = 2 и меняет цену только в ней; остальные строки (id 1 и 3) остаются нетронутыми. Вторая команда не содержит WHERE вообще, поэтому условие на строки отсутствует и под изменение попадают ВСЕ строки таблицы сразу — у всех трёх товаров цена станет 600. База не переспросит и не предупредит, она просто молча выполнит то, что написано. Именно поэтому WHERE в UPDATE называют защитой: он ограничивает изменение нужными строками, а его отсутствие приводит к массовой и обычно нежелательной правке всех записей. Практическое правило: перед каждым UPDATE надо мысленно проверить, какие именно строки отберёт WHERE, и не запускать UPDATE без WHERE, если не имеешь в виду буквально все строки.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 3. Что делает команда CREATE TABLE products (id INTEGER, name TEXT, price INTEGER); сразу после выполнения?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 3