六、用通配符进行过滤
- LIKE操作符:指示其后利用通配符匹配
- 百分号(%)通配符:表示任何字符出现任意次数
– 根据DBMS的配置,其搜索可以是区分大小写的
– 可同时使用多个通配符
– 其也能匹配0个字符:LIKE '%FISH'
输出结果可能包括FISH
– 如果定义某列有50个字符,单词后面可能跟着很多空格,搜索以某个字符开头结尾的单词,如LIKE 'F%Y'
可能搜索不出来,这时可以在最后再加上一个百分号 - 下划线(_)通配符:只匹配单个字符
– 匹配单个字符,多一个少一个都不行 - 方括号([ ])通配符:指定字符集,指定位置的字符包含于字符集中
LIKE '[JM]%'
- 前缀字符(^):用于否定方括号通配符
LIKE '[^JM]%'
– 可用NOT代替,优点在于简化语法 - 使用通配符的注意事项:
– 不要过度使用,会耗费更长的处理时间
– 尽量不要用在搜索模式的开始处
七、创建计算字段
- 字段(field):与列(column)意思相同;计算字段在SELECT语句中创建
- 拼接字段:用加号(+)或两个竖杠(||)表示,其中可加入其它字符
SELECT [COL1] + '(' + [COL2] + ')' FROM [TABLE]
– MySQL和MariaDB使用的是 Concat()
– 以上所保存的结果可能有许多空格填充为列宽
– 用RTRIM()函数去除值后的空格SELECT RTRIM([COL1]) + '(' + RTRIM([COL2]) + ')' FROM [TABLE]
– TRIM()去除左右空格;LTRIM()去除左边空格
– 关键字AS:赋予别名/导出列 - 执行算术计算:可输出新的计算列
八、使用函数处理数据
- 可移植性:SQL函数不是可移植的,意味着为了特定的SQL实现所编写的代码可能在其他地方不正常
- 文本处理函数:
– 其中SOUNDE是将任何文本字符串转换为描述其语音表示的字母数字模式的算法,能够用来匹配语音相近的单词
SELECT [COL] FROM [TABLE] WHERE SOUNDEX([COL])=SOUNDEX([VAL])
- 日期和时间处理函数:各DBMS差异较大
– SQL SeverL里:WHERE DATEPART(yy, order_date) = 2012
– MySQL里:WHERE YEAR(order_date) = 2012
– SQLite里:WHERE strftime('%Y', order_date) = '2012'
- 数值处理函数:在主要DBMS中最一致
九、汇总数据
- 聚集函数:对某些行运行计算,并返回一个值
- AVG()函数:求平均
– 只能用于单个列;要获得多个列的平均值,则需要使用多个函数
– 可以用DISTINCT计算不重复值的平均数
– 自动忽略NULL值 - COUNT()函数:确定行的数目
– COUNT(*): 对行数计数,无论是否非空
– COUNT([COL]): 对具有值的行计数,忽略NULL值 - MAX()函数:返回列的最大值
– 必须指定列名
– 用于文本数据时,返回最后一行
– 忽略NULL值 - MIN()函数:返回列的最小值,用法同上
- SUM()函数:
– 可以计算单个列值,或者合计,如:SUM(price*quantity)
十、分组数据
- 创建分组:GROUP BY 子句
– 该子句可以包含多列进行分组
– 除了聚集计算语句外,SELECT语句中的每列都必须在GROUP BY子句中给出
– 如果分组列包含NULL值,将单独或多个NULL值的行归为一组
– 必须出现在ORDER BY子句前,WHERE之后 - 过滤分组:HAVING 子句
– WHERE在分组前过滤,HAVING在分组后过滤 - SELECT子句顺序总结: