📊 Урок 2.1 — SELECT * FROM
Модуль 2: Первые запросы
🎯 Что мы будем делать
В этом уроке мы научимся читать данные из таблиц. Это самое важное умение в SQL. 90% всех SQL-запросов, которые ты будешь писать в реальной жизни — это SELECT. Поэтому отнесись к этому уроку максимально внимательно.
Мы разберём всего три вещи:
- Как показать все данные из таблицы (SELECT *)
- Как показать только нужные столбцы (SELECT конкретные столбцы)
- Как дать столбцу временное имя (AS — псевдонимы)
И ещё одна маленькая, но важная тема — комментарии в SQL.
Никакого WHERE, никакой сортировки — только SELECT и FROM. Чистое чтение данных.
У нас есть учебная база данных с тремя таблицами: employees (сотрудники), products (товары), customers (клиенты). Если ты её ещё не создал — вернись к уроку 1.1 и сделай это. Все примеры ниже используют именно эту базу.
🔍 SELECT * FROM — покажи ВСЁ
Давай начнём с самой простой команды. Она показывает все строки и все столбцы из таблицы:
SELECT * FROM employees; Выполни этот запрос. Ты увидишь всех 10 сотрудников со всеми столбцами.
Разбор по частям:
SELECT— команда "покажи данные". С этого слова начинается любой запрос на чтение.*— символ звёздочки означает "все столбцы". Это сокращение, чтобы не перечислять их по одному.FROM employees— указывает, из какой таблицы брать данные.;— конец команды. Как точка в предложении.
Прочитай эту команду по-русски: "Выбери все столбцы из таблицы employees". То есть "покажи мне всё, что есть в таблице employees".
В реальной работе SELECT * используют редко (обычно указывают конкретные столбцы), но для быстрого просмотра данных это незаменимая вещь.
Попробуй выполнить SELECT * для других таблиц:
SELECT * FROM products;
SELECT * FROM customers; Видишь разницу? Каждая таблица возвращает свою структуру. В employees — информация о людях. В products — о товарах. В customers — о клиентах.
Если ты забудешь точку с запятой — SQLite выполнит запрос (он не строгий), но другие СУБД выдадут ошибку. Привыкай ставить ; всегда. Это как пристёгиваться в машине — даже если можно не пристёгиваться, лучше пристегнуться.
🎯 SELECT конкретные столбцы
Звёздочка — это удобно, но чаще всего тебе не нужны ВСЕ столбцы. Представь, что в таблице 50 столбцов, а тебе нужно только имя и зарплата. Зачем тащить лишние данные?
Вместо звёздочки можно перечислить названия нужных столбцов через запятую:
SELECT name, salary FROM employees; Этот запрос покажет только два столбца: name и salary. Все остальные столбцы (id, position, department, age) не попадут в результат.
Результат будет выглядеть примерно так:
name salary
--------------- ----------
Иван Петров 80000
Мария Иванова 95000
Сергей Смирнов 70000
Анна Кузнецова 65000
Дмитрий Новиков 55000
Елена Попова 60000
Алексей Волков 100000
Ольга Соколова 58000
Николай Морозов 75000
Татьяна Белова 72000 Обрати внимание: столбцы идут в том порядке, в котором ты их перечислил в SELECT. Если поменять местами — порядок в результате поменяется:
SELECT salary, name FROM employees; Теперь сначала идёт зарплата, потом имя. Порядок столбцов в запросе = порядок в результате.
Можно перечислить не два, а любое количество столбцов. Хоть один, хоть пять:
-- Только имена сотрудников
SELECT name FROM employees; -- Только должности и отделы
SELECT position, department FROM employees; -- Три столбца из таблицы товаров
SELECT name, price, quantity FROM products; Заметь: можно указывать столбцы в любом порядке. Необязательно так, как они идут в таблице.
В реальной работе почти всегда указывай конкретные столбцы вместо *. Во-первых, это быстрее (база не тащит лишние данные). Во-вторых, твой код становится понятнее — читающий сразу видит, какие данные ты хочешь получить. И в-третьих, если кто-то добавит новый столбец в таблицу, SELECT * внезапно начнёт возвращать больше данных, чем нужно, и это может сломать программу.
✏️ AS — даём столбцам псевдонимы
Иногда название столбца в таблице не очень удобное. Например, оно на английском, а отчёт нужно сделать на русском. Или название слишком длинное. Или в результате вычислений столбец не имеет имени (мы научимся вычислять в следующих уроках).
В таких случаях используется ключевое слово AS. Оно даёт столбцу временное имя (псевдоним) только в результатах запроса. Сама таблица при этом не меняется.
SELECT name AS "Имя сотрудника", salary AS "Зарплата" FROM employees; Теперь в результатах вместо name и salary будет написано Имя сотрудника и Зарплата.
Пару важных моментов про AS:
- Слово
ASможно опускать:SELECT name "Имя" FROM employees— тоже сработает. Но с AS читается понятнее, поэтому я рекомендую его писать. - Если псевдоним состоит из одного слова без пробелов, кавычки не обязательны:
SELECT name AS Имя FROM employees. - Если псевдоним содержит пробелы или русские буквы — кавычки нужны:
SELECT name AS "Имя сотрудника". - В SQLite можно использовать как двойные кавычки ("), так и одинарные ('), но по стандарту SQL для псевдонимов используются двойные.
Давай посмотрим ещё примеры:
-- Простой псевдоним без кавычек
SELECT name AS name_russian FROM employees; -- Псевдоним с пробелом (нужны кавычки)
SELECT name AS "Имя работника", position AS Должность FROM employees; -- Псевдонимы для товаров
SELECT name AS Товар, price AS Цена FROM products; -- Псевдоним для клиентов
SELECT name AS "Имя клиента", city AS "Город" FROM customers; Важно понимать: AS не меняет название столбца в таблице. Он только меняет заголовок в результатах запроса. Если после этого выполнить SELECT * FROM employees;, ты снова увидишь оригинальные названия столбцов. AS действует только в рамках одного запроса.
Псевдонимы особенно полезны, когда ты делаешь отчёт для коллег, которые не знают английский. Или когда название столбца слишком техническое (например, empl_hr_supervisor_id), и ты хочешь показать его как "Руководитель". Также псевдонимы необходимы при вычислениях — но это тема отдельного урока.
💬 Комментарии в SQL
Комментарии — это текст, который SQL игнорирует. Он нужен только для людей, чтобы объяснить, что делает запрос. Комментарии — признак хорошего тона. В сложных запросах они спасают жизнь (и время).
В SQL есть два вида комментариев:
Однострочный комментарий: --
Всё, что написано после -- до конца строки, игнорируется:
-- Это комментарий. SQL его проигнорирует.
SELECT name, salary FROM employees; -- Это тоже комментарий -- А вот полезный комментарий:
-- Показываем имена и зарплаты всех сотрудников
SELECT name, salary FROM employees; Многострочный комментарий: /* */
Всё, что между /* и */, игнорируется. Можно писать на нескольких строках:
/* Этот запрос показывает имена и зарплаты сотрудников. Написан 25 июня 2026 года. Автор: студент курса SQL.
*/
SELECT name, salary FROM employees; /* Можно и в одну строку */ SELECT * FROM products; Комментарии особенно полезны, когда ты сохраняешь запросы в файл. Через месяц ты откроешь файл и сразу вспомнишь, что делает этот запрос. Без комментариев придётся вчитываться и вспоминать.
Всегда пиши комментарий к запросу, если он делает что-то нетривиальное. Ты удивишься, как часто через месяц ты сам не понимаешь свой же код без комментариев. Но не переусердствуй — комментировать SELECT * FROM employees нет смысла, это и так понятно.
📐 Форматирование SQL-запросов
SQL не обращает внимания на пробелы, переносы строк и табуляцию. Ты можешь написать весь запрос в одну строку или разбить на 10 строк — результат будет одинаковым. Но для людей разница огромная.
Вот два запроса, которые делают одно и то же:
-- Плохо: всё в одну строку, тяжело читать
SELECT name, position, salary, department, age FROM employees; -- Хорошо: каждое ключевое слово на новой строке, легко читать
SELECT name, position, salary, department, age
FROM employees; Второй вариант читается намного легче. Глаз сразу видит: SELECT — вот какие столбцы, FROM — вот из какой таблицы. Когда у нас появится WHERE, ORDER BY и LIMIT, форматирование станет ещё важнее.
Вот несколько простых правил форматирования:
- Ключевые слова SQL (SELECT, FROM, WHERE, ORDER BY, LIMIT) пиши с начала строки ЗАГЛАВНЫМИ буквами
- Названия таблиц и столбцов — маленькими буквами
- Каждое ключевое слово — на новой строке
- Если столбцов много — можно каждый на новой строке с отступом
-- Пример хорошего форматирования (заглядывая в будущее)
SELECT name, position, salary
FROM employees
WHERE department = 'IT'
ORDER BY salary DESC
LIMIT 5; В этом курсе все примеры отформатированы аккуратно. Старайся писать так же. Хорошее форматирование — признак профессионала. Когда ты через месяц вернёшься к своему запросу, ты скажешь себе "спасибо" за аккуратный код.
В SQLite в командной строке неудобно писать многострочные запросы. Но если нажать Enter без точки с запятой, SQLite поймёт, что запрос продолжается на следующей строке, и покажет символ продолжения (...>). Это позволяет писать аккуратные многострочные запросы даже в терминале.
🔬 Подробный разбор: как работает SELECT
Давай разберём SELECT на примерах, чтобы закрепить понимание. Выполняй каждый запрос и смотри, что получается.
Пример 1: все столбцы, все строки из таблицы товаров:
SELECT * FROM products;
Результат: 10 строк, 5 столбцов (id, name, price, category, quantity).
Пример 2: только названия товаров:
SELECT name FROM products;
Результат: 10 строк, 1 столбец (name). Видишь только названия.
Пример 3: названия и цены, с псевдонимами на русском:
SELECT name AS "Название товара", price AS "Цена (руб)" FROM products;
Результат: заголовки столбцов теперь на русском. Обрати внимание на пробел в "Цена (руб)" — нужны кавычки.
Пример 4: столбцы в другом порядке:
SELECT price, quantity, name FROM products;
Результат: столбцы идут в порядке price, quantity, name — не как в таблице. Ты управляешь порядком.
Пример 5: только имена клиентов из таблицы customers:
SELECT name FROM customers;
Результат: 10 имён клиентов.
Пример 6: города клиентов:
SELECT city FROM customers;
Результат: 10 городов. Заметь, что Москва повторяется несколько раз — в таблице есть несколько клиентов из Москвы. Это нормально. (Если нужно показать только уникальные города, используется DISTINCT — но это тема другого урока.)
Пример 7: несколько столбцов из customers:
SELECT id, name, city FROM customers;
Результат: три столбца — id, имя и город.
Пример 8: столбец можно указать несколько раз (бессмысленно, но возможно):
SELECT name, name, name FROM employees;
Результат: три одинаковых столбца с именем. Зачем так делать? Низачем. Просто чтобы ты знал, что такое возможно. Но не делай так в реальной жизни — это выглядит странно.
Попробуй выполнить SELECT * FROM not_exist; (несуществующая таблица). Что произойдёт? Правильно — ошибка: "no such table: not_exist". SQLite честно говорит, что такой таблицы нет. Не бойся ошибок — читай их внимательно. Ошибки SQL обычно очень понятные и сразу говорят, что пошло не так.
🧪 Разница между SELECT * и SELECT столбцы
Давай наглядно сравним.
Запрос 1 — все столбцы:
SELECT * FROM employees;
Результат: id, name, position, salary, department, age — 6 столбцов.
Запрос 2 — только нужные:
SELECT name, department FROM employees;
Результат: name, department — только 2 столбца.
Какой запрос быстрее? Второй. Даже в такой маленькой таблице разница незаметна, но в таблице с миллионом строк и сотней столбцов разница в скорости будет колоссальной. Представь: тебе нужно только имя, а база тащит все 100 столбцов — это как заказывать одну пиццу, а получить целый грузовик еды.
В реальных проектах:
SELECT *используют только для быстрого просмотра данных (например, чтобы посмотреть, что вообще есть в таблице).- В рабочем коде, в отчётах, в приложениях всегда перечисляют конкретные столбцы.
Запомни правило: если ты пишешь SELECT * в коде, который будет работать "на продакшене" (в реальной эксплуатации), к тебе придёт злой тимлид и скажет: "А давай-ка перепишем с конкретными столбцами".
🧪 Частые вопросы и ошибки
В: Что будет, если я напишу SELECT без FROM?
В SQLite можно: SELECT 1 + 1; — вернёт 2. Это используется для вычислений. Но в реальной работе SELECT без FROM бывает редко. В PostgreSQL, например, нужно писать SELECT 1 + 1; — тоже работает. В MySQL — аналогично.
В: Что делать, если я не помню названия столбцов в таблице?
Выполни SELECT * FROM имя_таблицы LIMIT 1; — увидишь названия столбцов в заголовках. Или используй .schema имя_таблицы в локальном SQLite. В онлайн-редакторах обычно есть панель со структурой таблицы.
В: Можно ли использовать русские названия столбцов в таблице?
Технически — да, но не нужно. В реальных проектах все названия — на английском. Имена столбцов вроде employee_name, salary_amount — это стандарт. Привыкай к этому с самого начала.
В: AS меняет название столбца навсегда?
Нет! AS работает только в рамках одного запроса. После выполнения запроса таблица остаётся без изменений. AS — это как наклейка с временным именем, которую ты приклеиваешь на результат запроса.
В: Что делать, если я получил ошибку "syntax error"?
Проверь:
- Нет ли лишней запятой перед FROM?
- Не пропустил ли запятую между названиями столбцов?
- Не поставил ли точку с запятой в середине запроса?
- Правильно ли написано название таблицы?
Запятая перед FROM: SELECT name, salary, FROM employees; — лишняя запятая после salary. SQLite выдаст ошибку "near FROM: syntax error". Просто убери запятую. Запятая нужна ТОЛЬКО между названиями столбцов, но не перед FROM.
🎯 Практические задания
Теперь твоя очередь. Выполни эти задания в SQLite или онлайн-редакторе. Не пропускай — именно практика превращает теорию в навык.
Задание 1: Напиши запрос, который показывает все данные из таблицы customers.
Задание 2: Напиши запрос, который показывает только имена и зарплаты сотрудников. Назови столбец с зарплатой "Зарплата (руб)".
-- Подсказка:
SELECT name, salary AS "Зарплата (руб)" FROM employees; Задание 3: Выведи названия товаров (name) и их количество на складе (quantity) из таблицы products. Используй псевдонимы: "Товар" и "Остаток".
Задание 4: Выведи имена клиентов (name) и их бонусы (bonus) из таблицы customers. Бонус назови "Баллы".
Задание 5: Напиши запрос, который показывает только должности (position) сотрудников. Что ты видишь? Есть ли повторяющиеся значения?
Задание 6: Выведи все столбцы из таблицы products, но в порядке: quantity, name, price, category, id. Добавь комментарий к запросу, который объясняет, что он делает.
Задание 7: Напиши запрос, который показывает имена сотрудников и их отделы (department). Отдел назови "Работает в отделе".
Задание 8 (сложное): Выведи три столбца: name (название), price (цена), price (снова цена, но с псевдонимом "Цена с НДС"). Пока без вычислений — просто два раза цена. Скоро мы научимся делать расчёты прямо в SELECT.
Задание 9: Выведи все столбцы таблицы employees, но с псевдонимами на русском языке: id → "Номер", name → "ФИО", position → "Должность", salary → "Оклад", department → "Отдел", age → "Лет".
Если ты забыл названия столбцов в таблице, выполни SELECT * FROM имя_таблицы; — увидишь заголовки всех столбцов. Или используй .schema имя_таблицы (в локальном SQLite).
📝 Что мы узнали в этом уроке
Подведём итоги урока 2.1:
- SELECT * FROM таблица — показывает все строки и все столбцы из таблицы. Быстрый способ посмотреть данные.
- SELECT столбец1, столбец2 FROM таблица — показывает только указанные столбцы. Используется в 90% случаев.
- Столбцы перечисляются через запятую. Порядок столбцов в запросе = порядок в результате.
- AS — даёт столбцу временное имя (псевдоним). Не меняет таблицу. Если в псевдониме есть пробелы — нужны кавычки.
- Комментарии:
--для одной строки,/* */для нескольких строк. SQL игнорирует комментарии, их пишут для людей. - Точка с запятой
;завершает команду. Ставь её всегда. - В реальной работе избегай
SELECT *— перечисляй конкретные столбцы. Это быстрее и понятнее.
Поздравляю! Ты освоил базу чтения данных. Теперь ты можешь открыть любую таблицу и посмотреть, что в ней лежит. В следующем уроке мы научимся фильтровать данные — показывать не все строки, а только те, которые соответствуют условию.
Увидимся в уроке 2.2! 👋
ТЕСТ — Урок 2.1: SELECT * FROM
5 вопросов