6.计算字段
6.1 计算字段
- 计算字段并不实际存在于数据库表中,它是运行时在 SELECT 语句内创建的。
- 字段与列的意思相同,不过数据库列一般称为列,而术语字段通常与字段一起使用
6.2 拼接字段
select concat(vend_name, '(', vend_country,')') as vend_title --使用别名
from vendors
order by vend_name;
6.2 执行算数计算
加(+)、减(-)、乘(*)、除(/)
7.使用函数处理数据
7.1 函数
- SQL函数大部分不可移植(即同一功能在不同数据库中的实现形式不一样)。
- 若决定使用函数,应做好代码诠释。
7.2 使用函数
7.2.1 文本处理函数
表7.1 常用的文本处理函数
函数 | 说明 |
---|---|
left() | 返回字符串左边的字符 |
length() | 返回字符串的长度 |
lower() | 将字符串变为小写 |
ltrim() | 去掉字符串左边的空格 |
right() | 返回字符串右边的字符 |
rtrim() | 去掉字符串右边的空格 |
soundex() | 返回字符串的soundex值 |
upper() | 将字符串转换为大小写 |
注:soundex 是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。
7.2.2 日期和时间处理函数
select order_num
from orders
where year(order_date) = 2012;
7.2.3 数值处理函数
如abs()、cos()、exp()、pi()、sin()、sqrt()、tan()等
8 汇总数据
8.1 聚集函数
如avg()、count()、max()、min()、sum()等
- avg() 只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个avg()。
- count(*) 对表中所有行进行计算,不管表列中包含的是空值还是非空值。
- count(column) 对特定列中具有值的行进行计数。
- max()函数用于文本数据时返回该列排序后的最后一行;忽略NULL。
- 如果指定列名,distinct()只能用于count()
- distinct 不能用于count(*)
9 分组数据
9.1 group by
- group by 子句中每一列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在 select 中使用表达式,则必须在 group by 中使用相同的表达式,不能使用别名。
- group by 子句必须出现在 where 子句之后,order by 子句之前。
- 如果分组内中包含具有 null 的值,则将 null 作为一个分组返回。
- 大多数 SQL 实现 不允许 group by 带有长度可变的数据类型(如文本或备注型字段)。
9.2 having VS where
- where 过滤行,having 过滤分组
- where 在数据分组前进行过滤,having 在数据分组后进行过滤
9.3 group by & order by
- 用 group by 分组的数据经常以分组顺序输出,但并不总是这样。
- 一般在使用 group by 时,应该也给出 order by 子句
10 利用子查询
- 子查询
- 利用子查询进行过滤
- 作为计算字段使用子查询
11 联结表
- 笛卡尔积 & where 的重要性
- 等值联结 = 内联结