首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《SQL必知必会》简要摘录(二)

第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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180812A0DKX000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券