Урок курса
Первый запрос: 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.
Выберите, в чём хотите разобраться:
- Сложные запросы и тестовые задания. Сессии, интервалы, retention и рекурсивные CTE.
Продвинутый SQL: сложные запросы и задачи для собеседований - Аналитические проекты. Исследования продаж, клиентов и рекламы, дашборд и выводы по данным.
Практическая аналитика данных
Оба курса платные. Нужна база SQL — вы изучаете её здесь.
Задача 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 no such table: найдите ошибку в SELECT
Разберите запрос SELECT, который не находит таблицу. В условии указана существующая схема: сравните её с обращением в запросе.
Продолжить с сохранением прогресса
Перейдите к уроку в учебном кабинете.
