目录
1 计算字段
字段:与 列 意思相同,经常互换使用。数据库的列一般称为列,“字段”一词汇则在计算字段时使用。
- 字段不实际存在在数据库表里,而是在运行select语句内创建
- 计算字段的数据与其他列的数据返回的方式相同
2 拼接字段 + ||
- 拼接:将值联结在一起,将一个值附加到另一个值上,构成单个值。
- 拼接的操作符:加号 + 或者两个竖杠 ||
e.g. 将vendors的vend_name 和 vend_country 拼接到同一个单元格,并将vend_country这列的内容用括号加在后面。
SELECT vend_name + ' ( ' + vend_country + ' ) '
FROM Vendors; --用 + 拼接
SELECT vend_name || ' ( ' || vend_country || ' ) '
FROM Vendors; --用 || 拼接
PS 可再加入去除右边空格的函数RTRIM( ) ,与excel的除空格函数作用相同,更好地清洗拼接后的文本内容。
- 去除字符串右边空格的函数 RTRIM( )
- 去除字符串左边空格的函数 LTRIM( )
- 去除字符串左右两边空格的函数 TRIM( )
SELECT RTRIM(vend_name) + ' (' + RTRIM (vend_country) + ')'
FROM Vendors ; -- 去空格函数&运用加号拼接
SELECT RTRIM(vend_name) || ' (' || RTRIM (vend_country) || ')'
FROM Vendors ; -- 去空格函数&运用俩竖行符拼接
3 赋值拼接字段的别名 AS
- 背景:一个未命名的列不能被引用的话,就无法运用于客户端,所以需要赋予别名。
- 别名可以是一个单词,也可以是一个字符串。如果使用字符串作为别名,字符串应该放在引号里
- 别名用 AS 关键词赋予
- AS 要放在计算字段后面,即FROM前面
- 也可以省略AS 用空格隔开新名称即可
e.g.1 AS简单用法 +可省略
select son as '学号'
from T;
select son '学号'
from T;
e.g2. 将vendors的vend_name 和 vend_country 拼接到同一个字符串之后,将其赋名为vend_title
SELECT RTRIM( vend_name) + '('+ RTRIM (vend_country) +')'
AS vend_title
FROM vendors;
SELECT RTRIM( vend_name) || '('|| RTRIM (vend_country) ||')'
AS vend_title
FROM vendors;
e.g3. 用concat拼接函数,将vendors的vend_name 和 vend_country 拼接到同一个字符串之后,将其赋名为vend_title
SELECT CONCAT( RTRIM (vend_name), '(', RTIRM (vend_country), ')' )
AS vend_title
FROM vendors;
4 执行算术计算
- 计算字段可用于对检索出的数据进行算术计算
- SQL算术操作符列表:
操作符 | 说明 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 除余 |
e.g1. 在orders表中,检索订单号为20008中的所有物品的id、数量和价信息。并添加每个id的汇总金额(单价*数量)。即expanded_price为计算字段
SELECT prod_id,prod_price,quantity,
quantity * prod_price
AS expanded_price
FROM orders
WHERE order_num = 20008;
e.g2. 表Employees如下,现需计算每个雇员的奖金。如雇员的id是奇数且名字不以'M'开头,那么他的奖金是他工资的100%,否则奖金为0。
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| employee_id | int |
| name | varchar |
| salary | int |
+-------------+---------+
select employee_id,
case when employee_id % 2 =1 and
name not like 'M%'
then salary
else 0
end
as bonus
from emploees;