Меняем названия колонок
Также нам нужно разобраться с названиями колонок. А то у нас повторяются названия 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% — это полные тезки, с одинаковым годом рождения. В жизни каждого из нас таких скорее всего нет, а вот в масштабах страны – есть. В общем если вы пишете софт или проектируйте БД, то полезно знать, что и так тоже может быть.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ