【SQL系列学习(三)】

学习目标

计算字段(calculated field)

关键字: AS

使用计算字段,我们可以做如下的事情:

  • 选择特定的单词或者数值;
  • 对单个或多个列进行计算;
  • 把列和特定的单词或数值组合在一起。
    接下来,我们来看一些示例,这些示例都来自于如下的Sales表:
SalesIDFirstNameLastNameQuantityPurchasedPricePerItem
1AndrewLi42.50
2CarolWhite101.25
3JamesCarpenter54.00

内容结构

三、计算字段和别名

3.1 字面值

选择一个特定的值作为一个列,这个值和表中的数据没有任何关系,这种类型的表达式叫做字面值(literal value)。示例如下:

SELECT 
'First Name:',
FirstName
FROM Sales

这条语句返回的数据如下所示:

no column nameFirstName
First Name:Andrew
First Name:Carol
First Name:James

在这条语句中,选择了两个数据项。首先是字面值’First Name:',单引号用来表示这是一个字符字面值,第2个数据项是FirstName列。

注意:(1)字面值’First Name:'在每一行都会重复出现,(2)第1列没有表头信息。当在Microsoft SQL Server中运行时 ,列的表头显示为“(no column name)”,因为计算字段没有和盖淑菊相关的列名。

数据库的差异:MySQL和Oracle
MySQL和Oracle都会在表头针对字面值返回一个值。
(1)在MySQL中,上述示例的第1列的表头会显示为:First Name:
(2)在Oracle中,上述示例的第1列的表头会显示为:‘FIRSTNAME:’

补充:
(1)表头是一种有意义的标签,别名是为列提供表头的一种方法。
(2)字面值是数字时,不需要加引号

3.2 算术运算

算术运算可以对表中一个或多个列进行计算,例如:

SELECT 
SalesID,
QuantityPurchased,
PricePerItem,
QuantityPurchased * PricePerItem
FROM Sales

将返回如下数据:

SalesIDQuantityPurchasedPricePerItem(no column name)
142.5010.00
2101.2512.50
354.0020.00

和字面值一样,第4列也没有表头,因为它并不是派生自一个单独的列。

下面是一些最常用的算术运算符:

算术运算符含义
+相加
-相减
*乘法
/除法

数据库的差异:Oracle
与SQL Server和MySQL不用,Oracle提供求幂运算的数学运算符,用两个星号(**)表示。

3.3 连接字段

连接(Concatenation)表示把字符数据组合或连接到一起。
就像算术运算符能够处理数字数据一样,字符数据也可以组合或连接到一起。如下是Microsoft SQL Server中的示例:

SELECT 
SalesID,
FirstName,
LastName + ' ' + FirstName
FROM Sales

检索到的数据如下所示:

SalesIDFirstNameLastName(no column name)
1AndrewLiAndrew Li
2CarolWhiteCarol White
3JamesCarpenterJames Carpenter

第4列从SQL语句中如下的表达式派生而来:

LastName + ' ' + FirstName

数据库的差异:MySQL和Oracle

(1)MySQL不用符号(诸如+)来表示连接,而是调用一个名为CONCAT的函数进行连接,如下所示:

CONCAT(LastName, ' ', FirstName)

CONCAT将括号中的3部分合并成一个表达式。

(2)Oracle使用两根竖线(||)而不是加号(+)来表示连接,等价语句如下所示:

LastName || ' ' || FirstName

3.4 列的别名

为没有描述性表头的列指定一个具有描述性的表头,解决方法是使用列的别名。
**别名(data)**本意是指替代名称,如下所示:

SELECT 
SalesID,
FirstName,
LastName + ' ' + FirstName AS 'Name'
FROM Sales

注意:列的别名要用单引号括起来。输出结果如下:

SalesIDFirstNameLastNameName
1AndrewLiAndrew Li
2CarolWhiteCarol White
3JamesCarpenterJames Carpenter

假设表有一个名为“Qty”的列,可以使用如下语句,把该列显示为“Quantity Purchased”:

SELECT
Qty AS 'Quantity Purchased'
FROM table

数据库的差异:Oracle

Oracle使用双引号来表示列的别名。

示例如下:

LastName + ' ' + FirstName AS "Name"

3.5 表的别名

使用相同的关键字AS来为表指定别名。

使用表的别名一般有3个原因:

(1)针对不好理解或复杂的表名;

(2)使用表的别名作为表中任何选中列的前缀;

假设有一个名为Sales123的表,给它一个Sales作为别名,并且添加Sales作为LastName列的前缀,使用点来分隔前缀和列名。示例如下:

SELECT
Sales.LastName
FROM Sales123 AS Sales

(3)和在子查询中使用表有关,这部分内容在第14节介绍。

数据库的差异:Oracle

在Oracle中,关键字AS可以用于列的别名,但在指定表的别名时,不允许使用关键字AS。语法如下:

SELECT
Sales.LastName
FROM Sales123 Orders

3.6 小结

在本节中,我们学习了在SELECT语句中创建计算字段的3种主要方法
(1)首先,用字面值来选择具体的单词或值。
(2)其次,在一个单个的表达式中,可以对多列执行算术运算。
(3)最后,用连接把列和字面值组合在一起。

我们还介绍了和列的别名相关的主题,当使用计算字段时,经常会用到列的别名。

接下来的第4节,我将给大家介绍函数这个主题,它提供了更加复杂和更加有趣的方法来执行计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_43226448

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值