在本教程中,您將學(xué)習(xí)如何在SQL語(yǔ)句中為表或表列指定簡(jiǎn)短的別名。
當(dāng)多個(gè)表被加入在一個(gè)單一的查詢,你需要每一列的名字前面加上所屬的表的名稱,像employees.dept id, departments.dept id等,以避免混亂和模糊列錯(cuò)誤情況下不同表中的列有相同的名稱。但是,如果表名很長(zhǎng),并且多次出現(xiàn)在查詢中,那么編寫查詢將成為一項(xiàng)困難和惱人的任務(wù)。
因此,為了節(jié)省時(shí)間并避免編寫完整的表名,可以為每個(gè)表提供一個(gè)簡(jiǎn)短的別名,并在查詢中使用該別名來(lái)引用其列。
為了清楚地理解這一點(diǎn),讓我們來(lái)看看下面employees和departments表。
+--------+--------------+------------+---------+ | emp_id | emp_name | hire_date | dept_id | +--------+--------------+------------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 4 | | 2 | Tony Montana | 2002-07-15 | 1 | | 3 | Sarah Connor | 2005-10-18 | 5 | | 4 | Rick Deckard | 2007-01-03 | 3 | | 5 | Martin Blank | 2008-06-24 | NULL | +--------+--------------+------------+---------+ | +---------+------------------+ | dept_id | dept_name | +---------+------------------+ | 1 | Administration | | 2 | Customer Service | | 3 | Finance | | 4 | Human Resources | | 5 | Sales | +---------+------------------+ | |
表: employees | 表: departments |
下面是一個(gè)查詢,通過(guò)使用公共的dept id字段將雇員和部門表連接在一起,來(lái)檢索雇員的id、名稱和他們的部門名稱。
SELECT employees.emp_id, employees.emp_name, departments.dept_name FROM employees LEFT JOIN departments ON employees.dept_id = departments.dept_id ORDER BY emp_id;
這是上一個(gè)使用表別名的查詢的壓縮版本:
SELECT t1.emp_id, t1.emp_name, t2.dept_name FROM employees AS t1 LEFT JOIN departments AS t2 ON t1.dept_id = t2.dept_id ORDER BY emp_id;
如果執(zhí)行這些語(yǔ)句中的任何一條,將得到相同的輸出,如下所示:
+--------+-----------------+--------------------+ | emp_id | emp_name | dept_name | +--------+-----------------+--------------------+ | 1 | Ethan Hunt | Human Resources | | 2 | Tony Montana | Administration | | 3 | Sarah Connor | Sales | | 4 | Rick Deckard | Finance | | 5 | Martin Blank | NULL | +--------+-----------------+--------------------+
正如您看到的,使用表別名可以節(jié)省多少打字工作。
查看“ SQL JOINS”部分,以了解有關(guān)表聯(lián)接的更多信息。
在MySQL中,當(dāng)您使用SQL函數(shù)生成自定義輸出時(shí),輸出列的名稱可能難以理解或難以理解。在這種情況下,您可以使用別名為輸出列臨時(shí)命名。
考慮以下查詢,在該查詢中我們使用表達(dá)式重新格式化了hire_date列中的日期以生成自定義輸出:
-- MySQL數(shù)據(jù)庫(kù)的語(yǔ)法 SELECT emp_name, DATE_FORMAT(hire_date, '%M %e, %Y') FROM employees;
如果執(zhí)行上面的語(yǔ)句,您將獲得如下輸出:
+--------------+-------------------------------------+ | emp_name | DATE_FORMAT(hire_date, '%M %e, %Y') | +--------------+-------------------------------------+ | Ethan Hunt | May 1, 2001 | | Tony Montana | July 15, 2002 | | Sarah Connor | October 18, 2005 | | Rick Deckard | January 3, 2007 | | Martin Blank | June 24, 2008 | +--------------+-------------------------------------+
正如您看到的,輸出中最后一列的標(biāo)簽很長(zhǎng)而且很笨拙。我們可以使用列別名來(lái)解決此問題,如下所示:
-- MySQL數(shù)據(jù)庫(kù)的語(yǔ)法 SELECT emp_name, DATE_FORMAT(hire_date, '%M %e, %Y') AS hire_date FROM employees;
如果執(zhí)行上面的語(yǔ)句,您將獲得更具可讀性的輸出,如下所示:
+--------------+------------------+ | emp_name | hire_date | +--------------+------------------+ | Ethan Hunt | May 1, 2001 | | Tony Montana | July 15, 2002 | | Sarah Connor | October 18, 2005 | | Rick Deckard | January 3, 2007 | | Martin Blank | June 24, 2008 | +--------------+------------------+