更改列名
我们还需要处理列名。否则,我们重复名称 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_desc | 最后期限 | emploee_id | 雇员名称 | emp_occupation |
---|---|---|---|---|---|
1个 | 修复一个前端bug | 2022-06-01 | 1个 | 伊万诺夫伊万 | 程序员 |
2个 | 修复后端的一个bug | 2022-06-15 | 2个 | 彼得罗夫彼得 | 程序员 |
7 | 享受生活 | (无效的) | 4个 | 拉比诺维奇·莫伊沙 | 导演 |
3个 | 买咖啡 | 2022-07-01 | 5个 | 基连科阿纳斯塔西娅 | 办公室主管 |
4个 | 买咖啡 | 2022-08-01 | 5个 | 基连科阿纳斯塔西娅 | 办公室主管 |
5个 | 买咖啡 | 2022-09-01 | 5个 | 基连科阿纳斯塔西娅 | 办公室主管 |
8个 | 享受生活 | (无效的) | 6个 | 瓦斯卡 | 猫 |
太好了,成功解决了列名看不懂的问题。查询变得有点长,但结果表中的一切都很清楚。并且没有额外的列。
表别名
有时表名太长,会在查询中占用大量空间。因此,SQL 的创建者为了提高可读性,就像在列的情况下一样,提供了指定表别名的能力。
别名(表别名)的一般形式如下:
FROM table1 alias1, table2 alias2
让我们用短别名重写我们之前的查询:
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
在这种情况下,别名已经很有用了,对吧?;)
首要的关键
还有一个关于表格的重要信息。还记得我们在任务表中有一个 employee_id 列吗?有了它,我们从员工表中引用了员工 ID。
如果我们要从一个表引用另一个表的行,那么被引用的表必须有一个带有ID的列,也称为主键- PRIMARY KEY。
大多数情况下,这是一个特别添加的列,其值类型为int。向表中添加记录时,SQL 会自动设置此列的值。
然后很多东西都与这些键相关联:
- 将不同的表相互链接;
- 通过 id 快速搜索和过滤;
- 数据库中的数据完整性(不引用不存在的 ID);
- 删除无人提及的数据;
- 和许多其他人。
顺便说一句,有些情况下表有一个所谓的自然键。这是当有一列的内容暗示唯一性时。例如,我们决定在员工表中添加:
- 他们到达公司的顺序;
- 税号;
- 护照号码和系列。
有时数据库设计者使用自然键作为主键,但大多数情况下它们是单独使用的。毕竟,记录可以删除、更改等。
我想你在互联网上读过法警将与他同名的人的债务挂在一个人身上的故事吗?这只是与唯一密钥的概念有关。银行和法警通过全名和出生年份搜索一个人非常方便。在 99% 的情况下,这足以识别一个人。
但剩下的 <1% 是全名,出生年份相同。在我们每个人的生活中,很可能没有这样的人,但在全国范围内,却有。一般来说,如果您正在编写软件或设计数据库,那么了解情况也是很有用的。
GO TO FULL VERSION