Navicat 博客

使用数据库别名 2023 年 7 月 10 日,由 Robert Gravelle 撰写

SQL 支持使用别名为表或列指定临时名称。别名不仅可以减少输入量,还可以使查询更易于阅读和理解。在今天的文章中,我们将学习如何在使用 Navicat Premium 16.2 在查询中使用别名。

SQL 别名概述

如介绍中所述,表名和列名均可使用别名。下面是每个别名的语法:

列别名语法

SELECT 
  column_name [AS] alias_name,
  column_name AS 'Alias Name' -- for names with spaces
FROM table_name;

表别名语法

SELECT column_name(s)
FROM table_name [AS] alias_name;

关于使用别名,有两点需要考虑:

  • 别名通常使用 AS 关键字指定,但是可以选择省略。
  • 别名仅存在于该查询时间内。

在 JOIN 查询中的表别名

以下是针对 Sakila 示例数据库的查询,以获取有关特定电影的所有副本的信息:

SELECT *
FROM film f 
  INNER JOIN inventory i ON i.film_id = f.film_id
WHERE i.store_id = 1 AND f.title = "Academy Dinosaur";

在上述查询中,由于 film 和 inventory 表都包含 film_id 列,因此名称必须是完全限定的,即在列名前加上表名。在这种情况下,就可以使用别名来缩短语句。

以下是在 Navicat 中的查询及其结果:

film_query (80K)

列别名

在列名方面,设计数据库表时通常会使用缩写来简化列名。例如:

  • "so_no" 代表 "sales order number"。
  • "qty" 代表 "quantity"。

在这种情况下,可以使用列别名来使列内容更加直观易懂。以下是一个例子:

SELECT
	inv_no AS invoice_no,
	amount,
	due_date AS 'Due date',
	cust_no 'Customer No'
FROM
	invoices;

当然,你也可以为表达式指定列别名,如下图所示:

expression_alias (113K)

上述查询选择了产品当前的价格和涨价后的价格。

列别名的限制

由于列别名是在 SELECT 子句中指定的,因此你只能在 SELECT 子句之后评估的子句中引用列别名。因此,你不能在 WHERE 子句中使用别名,否则会引发错误:

alias_error (42K)

这是因为数据库在评估 SELECT 子句之前评估 WHERE 子句。因此,在评估 WHERE 子句时,数据库没有 NewPrice 列别名的信息。

但是,在 ORDER BY 子句中使用列别名是可以的,因为它是在 SELECT 子句之后评估的:

alias_in_order_by (113K)

数据库按以下顺序评估查询的子句:

FROM > SELECT > ORDER BY

表别名与 Navicat

在 Navicat 中,一旦定义了表别名,它将出现在自动补全列表中。

alias_in_navicat (65K)

因此,使用别名就更加省时方便!

关于使用数据库别名的结语

在今天的文章中,我们学习了如何在使用 Navicat Premium 16.2 在查询中使用别名。它是一种可使查询更加易读和易懂的简单方法,这是很重要的,因为代码不仅是用于执行,还是一种沟通机制。

Navicat 文章
频道条目
分享
文章归档