SQL 入门笔记(七)创建计算字段
什么是计算字段
很多时候,我们所需要的并不直接是表中的数据
例如,表中存储着每种物品的价格和数量,但是实际需要的是每种物品的总价格
诚然,你可以新建一个字段(列)保存总价,每次手动计算保存,但是很明显有更好的方法
那就是在输出的时候虚拟出一个总价字段,值是价格乘以数量,这就是计算字段
字段(field)
基本上与列(column)的意思相同,经常互换使用,不过数据库列一般称为列,而字段这个术语通常在计算字段这种场合下使用
需要注意的是,只有数据库知道SELECT语句中哪些列是实际的表列,哪些是虚拟的计算字段。从客户端(如应用程序)来看,计算字段与其他列是一模一样的
当然,你也可以在客户端服务器上计算总价,但是在数据库服务器上完成这些工作一般要快得多
拼接字段
Vendors
表包含供应商名(vend_name)
和地址信息(vend_country)
,现在需要做一个报表,在一列中返回这两个信息,并且要把地址用括号括起来
解决方法是把两个列拼接起来,在 SQL Server
中,应该使用操作符加号(+
),在 DB2
、 Oracle
、 PostgreSQL
和 SQLite
中,应该使用两个竖杠(||
),而在 MySQL
和 MariaDB
中,必须使用函数Concat()
1 | SELECT Concat(vend_name ,'(' , vend_country , ')') |
使用别名
从前面的输出可以看见,SELECT
语句可以很好地拼接字段,但是这个新列的名字是什么呢?实际上并没有名字,它只是一个值。所以我们现在需要为它指定别名(alias)
,这需要用到 AS
关键字
1 | SELECT Concat(vend_name ,'(' , vend_country , ')') AS vend_title |
这样,客户端就可以直接引用 vend_title
这个名字,就像一个实际的表列一样
说明:AS 通常可选
在很多 DBMS 中,AS
关键字是可选的,不过最好使用它,这被视为一条最佳实践
提示:别名的其他用途
别名还有其他用途,常见的用途包括在实践的表列名包含不合法的字符(如空格)时重新命名它,在原来的名字含混或容易误解时扩充它
注意:别名
别名可以是一个单词,也可以是一个字符串。如果是后者,字符串应该扩在引号中 。当你去别名的时候,不应该使用表中实际的列名 ,虽然这样也合法,但是许多 DBMS 实现不支持,可能会产生模糊的错误信息
说明:导出列
别名有时候也会称为导出列(derived column)
,不管怎么叫,它们所代表的是相同的东西
执行算术计算
计算字段的另一常见用途是对检索出的数据进行算术计算
例如, Orders
表包含收到的所有订单,OrderItems
表包含每个订单中的各项物品,下面的语句检索订单号 20008 中的所有物品
1 | SELECT prod_id , quantity , item_price |
表中包含货物的数量和单价,我们可以利用公式算出总价
1 | SELECT prod_id , quantity , item_price , quantity * item_price AS expanded_price |
和大多数编程语言一样,SQL
支持加减乘除和括号