Урок курса

Первый запрос: 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;?

Продолжить с проверкой и прогрессом

Откройте интерактивный раннер с заданиями урока.

Перейти к интерактивному уроку