JavaRush /Курсы /SQL SELF /Выбор конкретных столбцов: извлечение данных по именам ст...

Выбор конкретных столбцов: извлечение данных по именам столбцов

SQL SELF
2 уровень , 0 лекция
Открыта

Когда мы извлекаем данные из базы, нас редко интересуют абсолютно все столбцы. Например, в таблице сотрудников employees может быть 15 столбцов: имя, фамилия, дата рождения, должность, зарплата, дата найма и так далее. А вам нужно всего лишь узнать их имена и должности. Логично, что тянуть все данные — это бесполезно и неэффективно. Вот тут и вступает в игру искусство выборки конкретных столбцов.

Если проводить аналогию, то это как если бы вам нужно было из общей корзины с апельсинами, яблоками и бананами вытащить только яблоки. Классно же? Вот этим мы и займёмся!

Синтаксис

Напоминаем, SQL спроектировали максимально user-friendly.

Во-первых, регистр текста запроса не играет значения. Ты можешь написать SELECT, Select, или select и все будет работать. Во-вторых, перенос строк никак не учитывается. СУБД все равно превратит запрос в одну длинную строку, так что можешь писать ее как тебе будет угодно.

Как ты уже, наверное, догадываешься, ключевыми словами SELECT и FROM дело не ограничивается. Иначе бы не было столько разговоров вокруг SQL. Расширенный вид SQL запроса имеет вид:

SELECT колонки
FROM таблица
WHERE условие
GROUP BY колонки
HAVING колонки
ORDER BY сортировка

Где:

  • колонки — это названия столбцов, которые вы хотите получить.
  • таблица — название таблицы, из которой извлекаются данные.
  • условие — условие для фильтрации строк.
  • сортировка — строки и порядок сортировки.

Звучит легко? Давайте разберём это на реальном примере. Но предлагаю начать с примеров попроще.

Пример базового запроса

Предположим, у нас есть таблица students, где лежат данные о студентах. Вот как может выглядеть структура таблицы:

id first_name last_name age grade
1 Alex Lin 20 A
2 Anna Song 22 B
3 Otto Art 19 A

Теперь мы хотим узнать только фамилии last_name и оценки grade всех студентов.

Запрос будет выглядеть так:

SELECT last_name, grade
FROM students;

Результат выполнения:

last_name grade
Lin A
Song B
Art A

Поздравляю, вы только что сэкономили ресурсы базы данных и сделали результат более читабельным!

Склеивание строк

Просто выбирать данные вы уже умеете, давайте попробуем что-нибудь поинтереснее. В нашей таблице имя и фамилия разделены по разным колонкам. Давайте напишем запрос, где будет колонка с полным именем студента.

Для того, чтобы склеить две строки в PostgreSQL используется оператор ||. Выглядеть наш SELECT-запрос будет так:

SELECT first_name || last_name, grade
FROM students;

Результат выполнения:

first_name || last_name grade
AlexLin A
AnnaSong B
OttoArt A

Гм. Кажется тут чего-то нехватает. Например пробела между именем и фамлией! Давайте это исправим.

SELECT first_name || ' ' || last_name, grade
FROM students;

Результат выполнения:

first_name || ' ' || last_name grade
Alex Lin A
Anna Song B
Otto Art A

Красота. Содержимое таблицы-результата мне нравится, но что стало с заголовком? Хотелось бы видеть там full name, ну или просто name, но не first_name || ' ' || last_name. Так не красиво и не практично. Но и для этого есть решение.

Выборка с использованием псевдонимов (алиасов)

SQL-запросы можно сделать более удобочитаемыми с помощью псевдонимов. Это просто способ дать столбцу новое имя в рамках запроса. Алиасы используют ключевое слово AS (хотя формально его можно опустить, но для читаемости лучше не делать этого).

Посмотрим пример:

SELECT first_name AS "Имя", last_name AS "Фамилия", grade AS "Оценка"
FROM students;

Результат выполнения:

Имя Фамилия Оценка
Alex Lin A
Anna Song B
Otto Art A

Здесь мы:

  1. Переименовали столбцы, чтобы их имена стали более понятными на русском.
  2. Применили алиасы в запросе, используя AS.

Если вашему начальнику или клиенту нужно вывести данные с пользователями и не дать ему поседеть при просмотре таблицы - алиасы ваш друг.

Теперь давайте немного улучшим наш запрос на получение полного имени.

SELECT first_name || ' ' || last_name  AS "Полное имя", grade  AS "Оценка"
FROM students;

Результат выполнения:

Полное имя Оценка
Alex Lin A
Anna Song B
Otto Art A

Отлично. Как мы и хотели.

Зачем выбирать только некоторые столбцы?

  1. Производительность

Представьте, что вы работаете с огромной таблицей на миллионы строк и сотни столбцов. Извлечение всех данных SELECT * может занять минуты или даже часы, и потребовать много ресурсов сервера. А так вы получаете только то, что нужно.

  1. Читаемость

Когда вы извлекаете только нужные столбцы, результат становится намного легче для понимания. Иначе ваш результат будет выглядеть, как попытка прочесть длинную ленту новостей в пятницу вечером.

  1. Минимизация ошибок

Чем меньше данных вы обрабатываете в запросе, тем меньше вероятность получить что-то неправильное. Особенно, если вы работаете дальше с этими данными.

О чём стоит помнить?

Псевдонимы таблиц

Другой способ справиться с длинными названиями таблиц — это использовать алиасы таблиц. Они должны напоминать исходное название таблицы или быть логично связанными с ее содержимым.

SELECT sa05.first_name, sa05.course_id
FROM students_archive_2005 AS sa05

Этот метод особенно полезен, если у вас длинные названия таблиц вроде university_students_enrollments_records можно использовать usr или us

Типичные ошибки при выборе конкретных столбцов

  1. Ошибки в именах столбцов. Если вы напишете название столбца с ошибкой, получите сообщение об ошибке вроде: ERROR: column "lastname" does not exist. Проверьте правильность написания имен столбцов.

  2. Конфликтующие имена. Когда в запросе участвуют несколько таблиц, обязательно указывайте, к какой таблице относится поле. Например, students.first_name.

  3. Использование SELECT * — это ловушка для новичков. Да, это работает и очень удобно, но в больших проектах это плохая практика! Всегда выбирайте только те столбцы, которые вам действительно нужны.

2
Задача
SQL SELF, 2 уровень, 0 лекция
Недоступна
Извлечение данных с использованием алиасов
Извлечение данных с использованием алиасов
2
Задача
SQL SELF, 2 уровень, 0 лекция
Недоступна
Формирование нового столбца с использованием данных из других столбцов
Формирование нового столбца с использованием данных из других столбцов
Комментарии (3)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Ra Уровень 35 Student
25 августа 2025
Надо знать порядок выполнения команд, чем раньше, тем лучше 🎯 Запомнить просто: 1. Сначала получаем данные: FROM → JOIN → WHERE 2. Затем группируем: GROUP BY → HAVING 3. Потом вычисляем: SELECT (агрегаты и оконные функции) 4. Дальше уникализируем: DISTINCT 5. Потом сортируем: ORDER BY 6. В самом конце ограничиваем: LIMIT/FETCH/OFFSET
Slevin Уровень 64
28 августа 2025
Спасибо. Полезно
Anemon Уровень 13 Expert
24 июля 2025
🤓