Выбор столбцов и подводные камни псевдонимов
Узнайте, почему нельзя ссылаться на псевдоним SELECT в WHERE и как на собеседованиях проверяют область действия псевдонима.
«Выбор столбцов и подводные камни псевдонимов» — бесплатный урок SQL Interview Prep на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Interview Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Interview Prep содержит 4 уроков всего.
Проекция: выбор столбцов
Выбор столбцов, которые возвращает запрос, называется проекцией — именно это Вы делаете каждый раз, когда пишете SELECT. В рабочем коде явно указывайте столбцы, а SELECT * оставляйте для быстрого исследования данных.
SELECT id, first_name, email
FROM employees;Почему собеседующие не любят SELECT *
Почему собеседующие не любят SELECT * в коде приложения? Это ненадёжно (порядок столбцов может измениться), расходует пропускную способность, мешает эффективно использовать индексы и скрывает, какие данные Вам действительно нужны. Явно указывайте столбцы. 👍
Псевдоним столбца с помощью AS
Псевдоним переименовывает столбец в выводе. Используйте AS для ясности — особенно полезен этот приём для вычисляемых столбцов: он превращает громоздкие выражения вроде salary * 12 в понятный и читаемый заголовок.
SELECT first_name AS name,
salary * 12 AS annual_salary
FROM employees;Кавычки в псевдонимах с пробелами
Если псевдоним содержит пробелы или является зарезервированным словом, его необходимо заключить в кавычки. Переносимый стандартный способ — двойные кавычки. Совет: используйте имена в стиле snake_case и полностью откажитесь от кавычек.
SELECT salary AS "Annual Pay"
FROM employees;Главный подводный камень: область видимости псевдонима в WHERE
Вот ловушка, которую проверяют чаще всего: Вы определяете псевдоним в SELECT, а затем фильтруете по нему в WHERE, и запрос завершается ошибкой. WHERE выполняется до SELECT, поэтому в этот момент псевдонима ещё не существует.
-- This raises an error
SELECT salary * 12 AS annual_salary
FROM employees
WHERE annual_salary > 100000;Причина: логический порядок выполнения
Решение — знать логический порядок предложений: FROM, WHERE, GROUP BY, HAVING, SELECT, затем ORDER BY. SELECT находится почти в конце, поэтому более ранние предложения не могут видеть его псевдонимы.
Исправление 1: повторите выражение
Самое переносимое исправление простое: просто повторите выражение в WHERE вместо псевдонима. Это немного многословно, зато всегда работает в любой базе данных.
SELECT salary * 12 AS annual_salary
FROM employees
WHERE salary * 12 > 100000;Исправление 2: оберните во вложенный запрос или CTE
Если повторение длинного выражения выглядит некрасиво, сначала вычислите его во вложенном запросе или CTE. Там псевдоним становится настоящим столбцом, поэтому внешний WHERE может фильтровать по нему.
SELECT *
FROM (
SELECT first_name, salary * 12 AS annual_salary
FROM employees
) t
WHERE annual_salary > 100000;Где разрешены псевдонимы ARE: ORDER BY
Хорошая новость: ORDER BY может использовать псевдоним SELECT, поскольку выполняется после SELECT. Поэтому WHERE, GROUP BY и HAVING не видят псевдонимы, а ORDER BY видит.
SELECT first_name, salary * 12 AS annual_salary
FROM employees
ORDER BY annual_salary DESC;Различия диалектов, которые стоит упомянуть
Стоит упомянуть важную деталь: MySQL допускает псевдонимы в GROUP BY и HAVING, тогда как Postgres и SQL Server придерживаются стандарта. Рассуждайте, исходя из логического порядка, а затем отмечайте это исключение.
Псевдонимы таблиц и столбцов
Не путайте их. Псевдоним таблицы сокращает имя таблицы и доступен везде, даже в WHERE. Псевдоним столбца переименовывает результат и недоступен — всё наоборот.
SELECT e.first_name, e.salary AS pay
FROM employees AS e
WHERE e.salary > 50000;Быстрая проверка
Проверьте основную ловушку.
Итоги
Итак: предпочитайте явные столбцы вместо SELECT * и задавайте псевдонимы с помощью AS. Псевдоним SELECT невидим в WHERE/GROUP BY/HAVING, но работает в ORDER BY. Исправить это можно, повторив выражение или использовав CTE.
Часто задаваемые вопросы
Урок «Выбор столбцов и подводные камни псевдонимов» бесплатный?
Да — полный текст урока «Выбор столбцов и подводные камни псевдонимов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Interview Prep, подпишись на CoddyKit PRO. Курс SQL Interview Prep содержит 4 уроков всего.
Чему я научусь в уроке «Выбор столбцов и подводные камни псевдонимов»?
Узнайте, почему нельзя ссылаться на псевдоним SELECT в WHERE и как на собеседованиях проверяют область действия псевдонима. Ты практикуешь SQL Interview Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Interview Prep?
Предыдущий опыт не требуется. SQL Interview Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Выбор столбцов и подводные камни псевдонимов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Interview Prep?
Да. Каждый урок SQL Interview Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Выбор столбцов и подводные камни псевдонимов
- Вычисляемые столбцы и приоритет выражений
- DISTINCT и GROUP BY для уникальности
- Выражения CASE в SELECT