第6课 用通配符进行过滤
通配符本身是SQL的WHERE子句中有特殊含义的字符,SQL支持几种通配符。为了在搜索子句中使用通配符,必须用LIKE操作符。
通配符搜索只能用于文本字段(字符串)。
%通配符表示任意字符出现任意次数(包括0次)。
%不匹配NULL。
如:
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE 'Fish%';
输出:
BNBG01 Fish bean bag toy
_匹配单个字符,一次。
SQLite不支持[]通配符,所以不在此特意记录。
注意事项:
不可过度使用通配符;
把通配符置于开始处,搜索起来最慢;
仔细注意通配符的位置。
第7课 创建计算字段
计算字段
计算字段
为何需要计算字段:
因为存储在数据库表中的数据一般不是应用程序所需要的格式。
需要显示公司名,同时显示公司地址,但两个信息放在不同表列中。
城市、邮编存储在不同列中,但程序要把它们一起检索出来。
物品订单要打印总价格,但是表中不存储。
有时需要平均数,总数,而表中原先不存储这些。
将数据从表列中检索出来,转换成我们要的形式,这一切都在数据库中完成。
也可以在客户端完成,但是那样影响客户端性能。
计算字段是运行时在SELECT语句内创建的,实际上不存在于数据库表中。
只有数据库知道SELECT语句中哪些列是实际的表列,哪些是计算字段;但对客户端(应用程序)来说,都一样。
拼接字段
将一个值附加到另一个值构成单个值,这就叫“拼接”。
用||来拼接字段(我用SQLite,就是如此,其他数据库可能不同)。
SELECTvend_name|| '(' ||vend_country|| ')' --三个斜体被拼接到一起
FROM Vendors
ORDER BY vend_name;
结果就是:
Bear Emporium (USA) --后面还有几行,就不写了。
听书上说,结果应该是这样的:
Bear Emporium (USA) --中间空了很多行(书上如此),我想应该是我用的SQLite版本更新,所以不必再多做处理了。
如果发现有很多空格,而自己不想要这些空格,可以用RTRIM(),它可以去掉字符串右边的空格。
SELECT RTRIM(vend_name) || ' (' +RTRIM(vend_country) || ')'
以上得出的结果是我们想要的,但是无法用到客户端中,因为它没有名字。于是,“别名”派上用场了。
“别名”是一个字段或值的替换名,别名用关键字AS赋予。
SELECT RTRIM(vend_name) || ' (' +RTRIM(vend_country) || ')'AS vend_title
执行算术计算
+-*/四个都支持
第8课 使用函数处理数据
各种DBMS支持的函数有很多不同,SQL函数是不可移植的。
如果一定要用函数,记得写清楚注释,假如将来要移植的话也能有个参考。
文本处理函数
如RTRIM()或UPPER()
SELECT vend_name, UPPER(vend_name) AS vend_name_upcase
FROM Vendors
ORDER BY vend_name;
左边显示供应商名,右边显示大写的供应商名
日期和时间处理函数
可移植性最差,具体使用看具体文档。
数值处理函数
可移植性最好,但是常常用不到。如返回一个数的正弦、余弦等。
第9课 汇总数据
聚集函数
想要汇总数据,而不是数据本身,如:
找出表列(或所有行或某些特定行)的最大值、最小值、平均值;
获得表中某些行的和;
确定表中行数(或满足某个条件或包含某个特定值的行数)。
前一课是数据处理函数,这一课是聚集函数(它的可移植性很好)。
共五个:
AVG() 返回某列的平均值 SELECTAVG(prod_price) AS avg_price FROM Products WHERE vend_id='DLL01';
COUNT() 返回某列的行数 SELECT COUNT(cust_email) AS num_cust FROM Customers;--计算有邮件的客户数
MAX() 返回某列的最大值SELECT MAX(prod_price) AS max_price FROM Products;
MIN() 返回某列的最小值
SUM() 返回某列之和 --计算总和
聚集不同值
如果不指定DISTINCT,则默认是ALL。前者只包含不同的值。
SELECT AVG(DISTINCT prod_price) AS avg_price FROM Products WHERE vend_id='DLL01';
若有三个数:3,3,6,则平均值为(3+3+6)/3,结果为4;
若指定DISTINCT,则平均值为(3+6)/2,结果为4.5。
组合聚集函数
SELECT语句可包含多个聚集函数
SELECT COUNT(*) AS num_items,
MIN(prod_price) AS price_min,
MAX(prod_price) AS price_max,
AVG(prod_price) AS price_avg
FROM Products;
num_items price_min price_max price_avg
9 3.49 11.99 6.823333
领取专属 10元无门槛券
私享最新 技术干货