Mysql

如何命名在查詢的 FROM 部分中完成的事情?

  • December 28, 2020

所以,我最近開始研究 Uni、MySQL 中的數據庫。我正在用教授給我們的不同東西練習一些查詢。

我發現的問題之一如下:

顯示員工主管的姓名和工資以及他正在監管的員工的平均工資。按名稱和平均工資升序排列數據。(我正在使用附帶的本地主機伺服器開發最新版本的 MySQL Workbench)

只有一張表,員工表。具有引用作為主鍵的員工 ID 的外鍵主管 ID。

這是查詢的解決方案:

SELECT SUP.name, SUP.wage, AVG(EMP.wage) AS AVG_WAGE
FROM employee EMP, employee SUP
WHERE SUP.employee_ID = EMP.supervisor_ID
GROUP BY SUP.name
ORDER BY AVG(EMP.wage) ASC;

我想知道,他在他喜歡的地方使用的東西的名稱是什麼……為了查詢,將員工表拆分為 2 個虛擬表?

起初我不知道這是可能的,所以我這樣做了:

SELECT name, wage, AVG(wage) AS AVG_WAGE
FROM employee
WHERE emp_ID IN (SELECT sup_ID FROM employee)
GROUP BY name, wage, sup_ID IN (SELECT emp_ID FROM employee)
ORDER BY AVG(wage);

這顯示了主管及其工資,但不顯示每個主管監督的員工的平均工資,只是再次顯示主管的工資,最後有一堆零。

謝謝!

如果我的措辭不是很清楚,我很抱歉,因為我不是用英語學習數據庫,而且英語不是我的第一語言。因此,在Google上找到關於像這樣我不知道如何表達問題的一些具體事情的資訊並不容易。

我剛剛仔細閱讀了您的範例,現在更好地理解了您的問題。您正在執行的第二個範例使用子查詢,但您的教授正在執行的第一個範例稱為隱式內部連接FROM employee EMP INNER JOIN employee SUP ON SUP.employee_ID = EMP.supervisor_ID這只是@stickybit 評論的一種簡寫方式。

我想知道,他在他喜歡的地方使用的東西的名稱是什麼……為了查詢,將員工表拆分為 2 個虛擬表?

在這個查詢中,作者使用了源表的 2 個副本。2個絕對獨立的副本。他為每個副本提供了唯一的別名(臨時名稱)——這使我們能夠區分每列來自基表的哪個副本。

因此,在該WHERE子句中,他將從副本中獲取的匹配行附加到副本EMP中的行SUP(或向後 - 綁定是對稱的)。附加的行EMP不會影響來自的同一行-如果存在匹配的行SUP,它將連接到另一行。EMP

您可以想像,對於這個查詢,我們製作了源表的 2 個臨時副本(具有完全相同的結構和數據)並給它們命名EMPSUP,然後我們將它們連接到查詢中。

引用自:https://dba.stackexchange.com/questions/282227