SQL教學
SQL RDBMS概念
SQL簡介
SQL NOT NULL約束
SQL DEFAULT約束
SQL唯一約束
SQL主鍵
SQL外鍵
SQL CHECK約束
SQL示例數據庫
SQL索引約束
SQL NULL值
數據庫 - 第一範式(1NF)
數據庫 - 第二範式(2NF)
數據庫 - 第三範式(3NF)
SQL RDBMS數據庫
SQL語法
SQL數據類型
SQL操運算符
SQL算術運算符
SQL比較運算符
SQL邏輯運算符
SQL表達式
SQL創建數據庫(CREATE DATABASE)
SQL丟棄或刪除數據庫(DROP DATABASE)
SQL選擇數據庫(SELECT Database, USE語句)
SQL創建表(CREATE Table)
SQL從現有表創建表
SQL刪除表(DROP或DELETE Table)
SQL INSERT INTO插入查詢
SQL SELECT查詢語句
SQL WHERE子句
SQL AND和OR運算符
SQL UPDATE更新查詢
SQL DELETE刪除查詢
SQL LIKE子句
SQL TOP,LIMIT,ROWNUM子句
SQL ORDER BY排序子句
SQL GROUP BY(分組)
SQL Distinct關鍵字
SQL排序結果
SQL約束
SQL Join聯接
SQL INNER JOIN(內部連接)
SQL LEFT JOIN(左連接)
SQL RIGHT JOIN(右連接)
SQL FULL JOIN(全連接)
SQL自連接
SQL笛卡爾或交叉連接
SQL UNION子句/操作符
SQL INTERSECT子句
SQL EXCEPT子句
SQL別名語法
SQL索引
SQL ALTER TABLE(修改表)
SQL TRUNCATE TABLE(截斷表)
SQL View(視圖)
SQL Having子句
SQL事務
SQL通配符運算符
SQL日期函數
SQL ADDDATE()函數
SQL ADDTIME()函數
SQL CONVERT_TZ()函數
SQL CURDATE()函數
SQL CURRENT_DATE()函數
SQL CURTIME()函數
SQL CURRENT_TIME()函數
SQL CURRENT_TIMESTAMP()方法
SQL DATE(expr)函數
SQL DATEDIFF()方法
SQL DATE_ADD()和DATE_SUB()方法
SQL DATE_FORMAT()函數
SQL DATE_SUB()方法
SQL DAY()函數
SQL DAYNAME()函數
SQL DAYOFMONTH()函數
SQL DAYOFWEEK()函數
SQL DAYOFYEAR()函數
SQL EXTRACT()函數
SQL FROM_DAYS()函數
SQL FROM_UNIXTIME()函數
SQL HOUR()方法
SQL LAST_DAY()函數
SQL LOCALTIME和LOCALTIME()函數
SQL LOCALTIMESTAMP和LOCALTIMESTAMP()函數
SQL MAKEDATE()函數
SQL MAKETIME()函數
SQL MICROSECOND()函數
SQL MINUTE()函數
SQL MONTH()函數
SQL MONTHNAME()函數
SQL NOW()函數
SQL PERIOD_ADD()函數
SQL PERIOD_DIFF()函數
SQL QUARTER()函數
SQL SECOND()函數
SQL SEC_TO_TIME()函數
SQL STR_TO_DATE()函數
SQL SUBDATE()函數
SQL SUBTIME()函數
SQL SYSDATE()函數
SQL TIME()函數
SQL TIMEDIFF()函數
SQL TIMESTAMP()函數
SQL TIMESTAMPADD()函數
SQL TIMESTAMPDIFF()函數
SQL TIME_FORMAT()函數
SQL TIME_TO_SEC()函數
SQL TO_DAYS()函數
SQL UNIX_TIMESTAMP()函數
SQL UTC_DATE()函數
SQL UTC_TIME()函數
SQL UTC_TIMESTAMP()函數
SQL WEEK()函數
SQL WEEKDAY()函數
SQL WEEKOFYEAR()函數
SQL YEAR()函數
SQL YEARWEEK()函數
SQL臨時表
SQL克隆表
SQL子查詢
SQL使用序列(自動遞增)
SQL DISTINCT重複處理
SQL注入
SQL實用函數
SQL MAX()函數
SQL MIN()函數
SQL AVG()函數
SQL SUM()函數
SQL SQRT()函數
SQL RAND()函數
SQL CONCAT()函數
SQL數值函數
SQL ABS()函數
SQL ACOS()函數
SQL ASIN(X)函數
SQL ATAN(X)函數
SQL ATAN2()函數
SQL BIT_AND()函數
SQL BIT_COUNT()函數
SQL BIT_OR()函數
SQL CEIL()函數
SQL CONV()函數
SQL COS()函數
SQL COT()函數
SQL DEGREES()函數
SQL EXP(X)函數
SQL FLOOR(X)函數
SQL FORMAT(X,D)函數
SQL GREATEST()函數
SQL INTERVAL()函數
SQL LEAST()函數
SQL LOG()函數
SQL LOG10(X)函數
SQL MOD()函數
SQL OCT(N)函數
SQL PI()函數
SQL POW()函數
SQL RADIANS()函數
SQL ROUND()函數
SQL SIGN(X)函數
SQL SIN(X)函數
SQL SQRT(X)函數
SQL STD()函數
SQL TAN(X)函數
SQL TRUNCATE()函數
SQL字符串函數
SQL ASCII(str)函數
SQL BIN(N)函數
SQL BIT_LENGTH()函數
SQL CHAR()函數
SQL CHAR_LENGTH()函數
SQL CHARACTER_LENGTH()函數
SQL字符串CONCAT()函數
SQL CONCAT_WS()函數
SQL CONV(N,from_base,to_base)函數
SQL ELT()函數
SQL EXPORT_SET()函數
SQL FIELD()函數
SQL FIND_IN_SET()函數
SQL FORMAT()函數
SQL HEX()函數
SQL INSERT()函數
SQL INSTR()函數
SQL LCASE()函數
SQL LEFT()函數
SQL LENGTH()函數
SQL LOAD_FILE()函數
SQL LOCATE()函數
SQL LOWER()函數
SQL LPAD()函數
SQL LTRIM()函數
SQL MAKE_SET()函數
SQL MID()函數
SQL OCT()函數
SQL OCTET_LENGTH()函數
SQL ORD()函數
SQL POSITION()函數
SQL QUOTE()函數
SQL REGEXP模式
SQL REPEAT()函數
SQL REPLACE()函數
SQL REVERSE()函數
SQL RIGHT()函數
SQL RPAD()函數
SQL SOUNDEX()函數
SQL SPACE()函數
SQL STRCMP()函數
SQL SUBSTRING()函數
SQL SUBSTRING_INDEX()函數
SQL TRIM()函數
SQL UCASE()函數
SQL UNHEX()函數
SQL UPPER()函數

SQL別名

在本教程中,您將瞭解SQL別名,包括表和列別名,以使查詢更短,更易理解。

1. SQL別名簡介

SQL別名用於在執行查詢期間爲表或列分配臨時名稱。 有兩種類型的別名:表別名和列別名。
幾乎所有關係數據庫管理系統都支持列別名和表別名。
SQL別名

1.1. 列別名

當我們設計表時,經常將列名稱保持簡短或另起新名稱,例如,銷售訂單號爲:so_no,發票號碼爲:inv_no。在使用SELECT語句從表中查詢數據返回輸出時不具有描述性。

要在查詢中爲列指定新名稱,請使用列別名。 列別名只是執行查詢期間列的臨時名稱。

請參閱以下查詢:

SELECT
    inv_no AS invoice_no,
    amount,
    due_date AS '截止日期',
    cust_no '客戶編號'
FROM
    invoices;
  • invoice_noinv_no列的別名
  • 'Due date'due_date列的列別名。 因爲別名包含空格,所以必須使用單引號(')或雙引號(")來包圍別名。
  • 'Customer no'cust_no列的別名。注意這裏沒有使用AS關鍵字。AS關鍵字是可選的,因此可以省略它。

我們經常對選擇列表中的表達式使用列別名。 例如,以下查詢使用headcount作爲返回僱員數量的表達式的列別名:

SELECT
    count(employee_id) headcount
FROM
    employees;

執行上面示例代碼,得到以下結果 -

mysql> SELECT
    count(employee_id) headcount
FROM
    employees;
+-----------+
| headcount |
+-----------+
|        40 |
+-----------+
1 row in set

可以在SELECT子句之後評估的任何子句中使用列別名,例如HAVING子句。 請參閱以下示例:

SELECT
    department_id,
    count(employee_id) headcount
FROM
    employees
GROUP BY
    department_id
HAVING
    headcount >= 5;

執行上面示例代碼,得到以下結果 -

SQL別名

HAVING子句中,我們不是引用表達式count(employee_id),而是引用列別名headcount

1.2. 表別名

SELECT語句中臨時爲表分配一個不同的名稱。這個表的新名稱稱爲表別名。 表別名也稱爲相關名稱。

請注意,分配別名實際上並不重命名錶。 它只是在執行查詢時爲表提供另一個名稱。

在實踐中,我們保持表別名簡短且易於理解。 例如,e代表員工,d代表部門,j代表職位,l代表位置。

那麼爲什麼必須使用表別名呢?

第一個原因:使用表別名的是節省輸入冗長名稱的時間並使查詢更容易理解。 請參閱以下查詢:

SELECT 
    d.department_name
FROM
    departments AS d

ddepartments表的表別名。 AS關鍵字是可選的,因此可以省略它。

departments表具有別名d時,您可以使用別名d來引用該表。

例如,d.department_name引用departments表的department_name字段。 如果不使用表別名,則必須使用departments.department_name來引用更長的department_name字段。

第二個原因:使用表別名,希望在單個查詢中多次引用同一個表。例如經常在內聯接,左聯接和自聯接中找到此類查詢。

以下查詢使用inner join子句從employeesdepartments表中選擇數據。

SELECT
    employee_id,
    first_name,
    last_name,
    department_name
FROM
    employees
INNER JOIN departments ON department_id = department_id
ORDER BY
    first_name;

執行上面查詢語句後,數據庫系統將發出錯誤:

Column 'department_id' in on clause is ambiguous

要避免這個錯誤,需要使用表名限定列,如下所示:

SELECT
    employee_id,
    first_name,
    last_name,
    employees.department_id,
    department_name
FROM
    employees
INNER JOIN departments ON departments.department_id = employees.department_id
ORDER BY
    first_name;

要使查詢更短,可以使用表別名,例如,e表示employees表,d表示departments表,如下面的查詢:

SELECT
    employee_id,
    first_name,
    last_name,
    e.department_id,
    department_name
FROM
    employees e
INNER JOIN departments d ON d.department_id = e.department_id
ORDER BY
    first_name;

以下查詢使用self-joinemployee表自聯接。

SELECT
    e.first_name AS employee,
    m.first_name AS manager
FROM
    employees e
LEFT JOIN employees m ON m.employee_id = e.manager_id
ORDER BY
    manager;

因爲employees表在查詢中出現兩次,所以需要使用兩個表別名:em; e代表員工,而m代表經理。

在本教程中,您學習瞭如何使用SQL別名(包括列別名和表別名)來使查詢更短,更易理解。