Псевдонимы

Модуль 4. Работа с БД
3 уровень , 1 лекция
Открыта

Меняем названия колонок

Также нам нужно разобраться с названиями колонок. А то у нас повторяются названия name и id, а ведь они содержат различные данные. С другой стороны, есть первая колонка id и колонка employee_id, которые содержат одни и те же данные.

Давай напишем запрос, где будут только нужные колонки, а также переименуем колонки с одинаковыми именами:

SELECT task.id AS task_id, task.name AS task_desc, task.deadline AS deadline, employee.id AS employee_id, employee.name AS emp_name, employee.occupation AS emp_occupation FROM employee, task WHERE employee.id = task.employee_id 

И результат такого запроса:

task_id task_desc deadline employee_id emp_name emp_occupation
1 Исправить багу на фронтенде 2022-06-01 1 Иванов Иван Программист
2 Исправить багу на бэкенде 2022-06-15 2 Петров Петр Программист
7 Наслаждаться жизнью (NULL) 4 Рабинович Мойша Директор
3 Купить кофе 2022-07-01 5 Кириенко Анастасия Офис-менеджер
4 Купить кофе 2022-08-01 5 Кириенко Анастасия Офис-менеджер
5 Купить кофе 2022-09-01 5 Кириенко Анастасия Офис-менеджер
8 Наслаждаться жизнью (NULL) 6 Васька кот

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

Алиасы таблиц

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

Общий вид алиасов (псевдонимов таблиц) такой:

FROM таблица1 псевдоним1, таблица2 псевдоним2 

Давай перепишем наш предыдущий запрос с использованием коротких псевдонимов:

SELECT t.id AS task_id, t.name AS task_desc, t.deadline AS deadline, e.id AS employee_id, e.name AS emp_name, e.occupation AS emp_occupation  FROM employee e, task t  WHERE e.id = t.employee_id 

Читабельность немного снизилось, но это потому, что названия таблиц изначально были простыми и понятными. Может ведь быть и так:

SELECT task.id AS task_id, task.name AS task_desc, task.deadline AS deadline, employee.id AS employee_id, employee.name AS emp_name, employee.occupation AS emp_occupation  FROM  Microsoft_it_department_employee employee, Year2022_priority_task task WHERE employee.id = task.employee_id 

А в этом случае алиасы уже полезны, да? ;)

Первичный ключ

И еще одна важная информация про таблицы. Помните, что у нас в таблице task была колонка employee_id? С ее помощью мы ссылались на ID сотрудника из таблицы employee.

Если мы хотим ссылаться из одной таблицы на строки другой таблицы, то таблица, на которую ссылаются, должна иметь колонку с ID, которую еще называют первичным ключом — PRIMARY KEY.

Чаще всего это специально добавленная колонка, тип значений которой — int. При добавлении записей в таблицу SQL автоматически устанавливает значение этой колонки.

На эти ключи потом много чего завязывается:

  • связывание разных таблиц друг с другом;
  • быстрый поиск и фильтрация по id;
  • целостность данных в базе данных (нет ссылок на несуществующие id);
  • удаление данных, на которые никто не ссылается;
  • и многое многое другое.

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

  • Порядок их прихода в компанию;
  • Налоговый номер;
  • Номер и серию паспорта.

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

Читали небось истории в интернете, когда на человека приставы вешают долги его полного тезки? Это как раз связано с понятием уникального ключа. Банкам и приставам очень удобно искать человека по ФИО и году рождения. И в 99% случаев этого достаточно для того, чтобы идентифицировать человека.

Но оставшийся <1% — это полные тезки, с одинаковым годом рождения. В жизни каждого из нас таких скорее всего нет, а вот в масштабах страны – есть. В общем если вы пишете софт или проектируйте БД, то полезно знать, что и так тоже может быть.

1
Задача
Модуль 4. Работа с БД, 3 уровень, 1 лекция
Недоступна
task0310
Требуется выбрать колонки location из таблиц gyms и customers, но заменив при этом их названия с location на city для таблицы gyms, и с location на address для таблицы customers.
1
Задача
Модуль 4. Работа с БД, 3 уровень, 1 лекция
Недоступна
task0311
Требуется выбрать колонки name и hq_location из таблицы top_retailers, но временно заменив обращение к колонке top_retailers.name на retailer, а к колонке top_retailers.hq_location на retailer_hq. Также следует выбрать колонку country из таблицы suppliers, временно заменив название на supplier_count
1
Задача
Модуль 4. Работа с БД, 3 уровень, 1 лекция
Недоступна
task0312
Требуется выбрать колонки rank и name из таблицы top_retailers, но временно заменив обращение к колонке top_retailers.rank на company_rank, а к колонке top_retailers.name на company_name. Также следует выбрать колонку annual_revenue_billions из таблицы suppliers, временно заменив название на supplie
1
Задача
Модуль 4. Работа с БД, 3 уровень, 1 лекция
Недоступна
task0313
Требуется выбрать колонку name из таблицы top_retailers, но временно заменив обращение к колонке на ret_name. Также следует выбрать колонки name и country из таблицы suppliers, временно заменив name на sup_name, а country на sup_country. Также следует временно заменить названия таблиц с top_retailer
1
Задача
Модуль 4. Работа с БД, 3 уровень, 1 лекция
Недоступна
task0314
Требуется выбрать колонки name и annual_revenue_billions из таблицы top_retailers, но временно заменив обращение к колонке name на ret_name, а к колонке annual_revenue_billions на ret_revenue. Также следует выбрать колонку name из таблицы suppliers, временно заменив name на sup_name. Также следует в
1
Задача
Модуль 4. Работа с БД, 3 уровень, 1 лекция
Недоступна
task0315
В этой задаче тебе потребуется: 1. Выбрать колонку hq_location из таблицы top_retailers, временно заменив имя колонки на ret_location. 2. Выбрать колонку annual_revenue_billions из таблицы suppliers, временно заменив имя колонки на sup_revenue. 3. Временно заменить названия таблиц с top_retailers на
1
Задача
Модуль 4. Работа с БД, 3 уровень, 1 лекция
Недоступна
task0316
В этой задаче тебе потребуется: 1. Выбрать колонки name и hq_location из таблицы top_retailers, временно заменив name на ret_name, а hq_location на ret_location. 2. Выбрать колонку name из таблицы suppliers, временно заменив имя колонки на sup_name. 3. Временно заменить названия таблиц с top_retaile
Комментарии (25)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Никита Уровень 109
16 ноября 2024
.. suppliers.annual_revenue_billions as supplier_revenue from top_retailers,suppliers

where 
suppliers.annual_revenue_billions > 25
почему при использовании алиаса код не работает?

 where 
supplier_revenue > 25
Aliransa Уровень 109
26 января 2025
В SQL выражение supplier_revenue не может использоваться в условии WHERE, потому что это псевдоним, назначенный в секции SELECT. Псевдонимы, созданные в SELECT, недоступны для использования в WHERE, поскольку эта секция выполняется до SELECT. но при этом псевдоним, назначенный в секции FROM уже можно использовать
Артем Уровень 72
29 октября 2024
почему в предпоследней задаче нельзя написать IS NOT 'USA'?
Олег Уровень 106 Expert
19 сентября 2024
Немного занудно, но щёлкнул
Ольга Николенко Уровень 109 Expert
17 мая 2024
Если не подгружается скрипт инициализации таблиц из некоторых задач (из идеи) - там в качестве названия поля использовано ключевое слово "rank", используйте его везде в кавычках `rank` и скрипт загрузится (или поле переименовать можно, но в решении правильное поставить не забыть)
Олег Уровень 79 Expert
10 февраля 2024
Цель задач, как мне показалось, запутать студента поменяв название колонок, таблиц и всего чего можно..... Ну или привить внимательность и психологическую устойчивость к тупым условиям)))
Stroka Уровень 1
30 ноября 2023
вы тут шутите в коментах а там по таблице кот Васька исправляет баг на фронтенде:))))
Yauheni K Уровень 1
17 октября 2023
emploee - опечатались
Иван Уровень 92 Expert
22 сентября 2023
🙃
Дарья Уровень 109
6 июня 2023
Во вкладке init_data.sql можно посмотреть все данные по таблицам, в том числе названия колонок. Эти задачи надо решать на сайте, а не в Идеи.
Яков Стойков Уровень 18
21 мая 2023
Я б сказал, что лучше UUID использовать как ключ.