Урок курса

Первый запрос: 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 не различает, но буквенный состав должен совпадать точно.


Освойте SQL для работы и собеседований

Посчитать выручку, найти клиентов, которые перестали покупать, разобраться с дублями после JOIN — для таких задач и стоит изучать SQL.

Выберите, в чём хотите разобраться:

Оба курса платные. Нужна база SQL — вы изучаете её здесь.

Посмотреть задачи продвинутого SQL →

Выбрать другое направление в каталоге Latorn →

Задача 1

Что вернёт выполнение запроса SELECT order_id, amount FROM orders;?

Выберите один вариант
Без регистрации · результат не сохраняется

Задача 2

Запрос SELECT order_id, amount FROM ordres; завершился ошибкой «no such table». В схеме есть таблица orders. Что нужно исправить?

Выберите один вариант
Без регистрации · результат не сохраняется

Задача 3

Результат запроса содержит столбцы order_id, date, amount и строку 2 | 2024-01-12 | 800. Как её правильно прочитать?

Выберите один вариант
Без регистрации · результат не сохраняется

Задача 4

Какой запрос получает из таблицы products столбцы title и price?

Выберите один вариант
Без регистрации · результат не сохраняется

Задача 5

Что вернёт SQLite при выполнении запроса SELECT 1;?

Выберите один вариант
Без регистрации · результат не сохраняется

Задача 6

Карточка заказа

Таблица orders содержит внутренний статус заказа, но для карточки нужны только идентификатор, дата и сумма. Верните столбцы order_id, order_date и amount именно в таком порядке. В каждой проверке таблица содержит одну строку, поэтому сортировка не требуется.

РешениеSQL · SQLite

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Задачи к уроку

  • SQL no such table: найдите ошибку в SELECT

    Разберите запрос SELECT, который не находит таблицу. В условии указана существующая схема: сравните её с обращением в запросе.

Все задачи курса →

Продолжить с сохранением прогресса

Перейдите к уроку в учебном кабинете.

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