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

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

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

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

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

task_id task_desc deadline emploee_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 emploee_id,  
    e.name AS emp_name,  
    e.occupation AS emp_occupation 
    FROM employee e, task t 
WHERE e.id = t.emploee_id

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

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

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

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

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

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

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

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

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

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

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

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

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

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

undefined
1
Задача
Модуль 4. Работа с БД, 3 уровень, 1 лекция
Недоступна
task0310
Требуется выбрать колонки location из таблиц gyms и customers, но заменив при этом их названия с location на city для таблицы gyms, и с location на address для таблицы customers.
undefined
1
Задача
Модуль 4. Работа с БД, 3 уровень, 1 лекция
Недоступна
task0311
Требуется выбрать колонки name и hq_location из таблицы top_retailers, но временно заменив обращение к колонке top_retailers.name на retailer, а к колонке top_retailers.hq_location на retailer_hq. Также следует выбрать колонку country из таблицы suppliers, временно заменив название на supplier_count
undefined
1
Задача
Модуль 4. Работа с БД, 3 уровень, 1 лекция
Недоступна
task0312
Требуется выбрать колонки rank и name из таблицы top_retailers, но временно заменив обращение к колонке top_retailers.rank на company_rank, а к колонке top_retailers.name на company_name. Также следует выбрать колонку annual_revenue_billions из таблицы suppliers, временно заменив название на supplie
undefined
1
Задача
Модуль 4. Работа с БД, 3 уровень, 1 лекция
Недоступна
task0313
Требуется выбрать колонку name из таблицы top_retailers, но временно заменив обращение к колонке на ret_name. Также следует выбрать колонки name и country из таблицы suppliers, временно заменив name на sup_name, а country на sup_country. Также следует временно заменить названия таблиц с top_retailer
undefined
1
Задача
Модуль 4. Работа с БД, 3 уровень, 1 лекция
Недоступна
task0314
Требуется выбрать колонки name и annual_revenue_billions из таблицы top_retailers, но временно заменив обращение к колонке name на ret_name, а к колонке annual_revenue_billions на ret_revenue. Также следует выбрать колонку name из таблицы suppliers, временно заменив name на sup_name. Также следует в
undefined
1
Задача
Модуль 4. Работа с БД, 3 уровень, 1 лекция
Недоступна
task0315
В этой задаче тебе потребуется: 1. Выбрать колонку hq_location из таблицы top_retailers, временно заменив имя колонки на ret_location. 2. Выбрать колонку annual_revenue_billions из таблицы suppliers, временно заменив имя колонки на sup_revenue. 3. Временно заменить названия таблиц с top_retailers на
undefined
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