更改列名稱
我們還需要處理列名。否則,我們重複名稱 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