Урок курса
Первый запрос: SELECT и FROM
SQL с нуля: бесплатный курс с практикойВ прошлом уроке мы разобрали, как таблица организует строки-записи и столбцы-атрибуты. Чтобы получить из таблицы нужные столбцы, SQL использует SELECT и FROM.
SELECT и FROM: роль каждой части в запросе к таблице
В простом запросе к таблице нужно указать, что вернуть и откуда взять данные. FROM называет таблицу-источник, а SELECT перечисляет нужные столбцы этой таблицы.
SELECT order_id, date, amount
FROM orders;
Здесь orders — имя таблицы, а order_id, date и amount — имена её столбцов. База данных читает строки из orders и для результата берёт указанные поля.
Порядок имён после SELECT имеет значение: он становится порядком столбцов результата. Если написать
SELECT amount, order_id
FROM orders;
первым будет amount, вторым — order_id, даже если в схеме таблицы они объявлены иначе. Запрос управляет представлением результата, не перестраивая исходную таблицу.
Такое разделение ролей относится именно к запросу, который читает таблицу: FROM задаёт источник строк, а SELECT — выражения и столбцы результата. Ниже мы увидим допустимый SELECT без таблицы, поэтому FROM не является обязательной частью любой конструкции SELECT.
Результат SELECT: табличная структура и неизменность источника
Допустим, в orders есть две условные строки:
| order_id | date | amount |
|---|---|---|
| 1 | 2024-01-10 | 2500 |
| 2 | 2024-01-12 | 800 |
Запрос
SELECT order_id, date, amount
FROM orders;
вернёт две строки и три столбца. Каждая исходная запись даёт одну строку ответа, а список после SELECT определяет состав и порядок столбцов. Если выбрать только order_id и amount, строк останется две, но столбцов станет два.
Результат запроса — отдельная табличная выдача, а не изменение orders. SELECT читает значения и формирует ответ; сами строки таблицы после выполнения остаются прежними. Повторный запуск того же запроса снова прочитает источник, но ничего в нём не перезапишет и не удалит.
Здесь проходит важная граница: одни SQL-команды читают данные, другие их изменяют. В этом курсе мы начинаем с чтения, поэтому можно менять список выбранных столбцов, сравнивать результаты и повторять запросы, не меняя содержимое orders.
Ошибки no such table и no such column при опечатке в имени
SQLite не угадывает намерения — он ищет точное совпадение имени таблицы или столбца. Стоит допустить опечатку, и выполнение немедленно прерывается с конкретным сообщением.
Два варианта ошибки:
-- Опечатка в имени таблицы
SELECT order_id FROM ordres;
-- Error: no such table: ordres
-- Опечатка в имени столбца
SELECT order_id, amountt FROM orders;
-- Error: no such column: amountt
Сообщения разные, и это важно: no such table говорит, что база данных не нашла таблицу с таким именем — в простом запросе проверяйте имя после FROM. no such column означает, что SQLite не нашёл указанное имя столбца или выражения; здесь опечатка находится в списке SELECT, а в более сложном запросе проверять нужно весь текст.
Отдельный случай — SELECT без FROM. SQLite допускает такую форму для вычисления выражений:
SELECT 1 + 1;
Этот запрос вернёт одну строку со значением 2. Здесь нет ни таблицы, ни столбца — просто арифметика. Ни no such table, ни no such column здесь возникнуть не могут: базу данных никто не просил что-то искать.
Практический вывод: когда видите одну из этих ошибок, первым делом сверьте написание с реальным именем таблицы или столбца — регистр в именах SQLite не различает, но буквенный состав должен совпадать точно.
Попробуйте решить
Что вернёт выполнение запроса SELECT order_id, amount FROM orders;?
Продолжить с проверкой и прогрессом
Откройте интерактивный раннер с заданиями урока.
