type
status
date
slug
summary
tags
category
icon
password
sql语句的增、删、改、查
- 从表中选取数据
从表中选取符合条件的数据
比较下面两者输出结果的不同:
星号(*)代表全部列的意思。SQL中可以随意使用换行符,不影响语句执行(但不可插入空行)。设定汉语别名时需要使用双引号(")括起来。在SELECT语句中使用DISTINCT可以删除重复行。注释是SQL语句中用来标识说明或者注意事项的部分。分为: 1行注释"-- " 和多行注释两种"/* */"。
- 算术运算符和比较运算符 SQL语句中可以使用的四则运算的主要运算符如下:
含义 | 运算符 |
加法 | + |
减法 | - |
乘法 | * |
除法 | / |
示例:
SQL常见比较运算符如下:
运算符 | 含义 |
= | 和 ~ 相等 |
<> | 和 ~ 不相等 |
>= | 大于等于 ~ |
> | 大于 ~ |
<= | 小于等于 ~ |
< | 小于 ~ |
SELECT子句中可以使用常数或者表达式。使用比较运算符时一定要注意不等号和等号的位置。字符串类型的数据原则上按照字典顺序进行排序,不能与数字的大小顺序混淆。希望选取NULL记录时,需要在条件表达式中使用IS NULL运算符。希望选取不是NULL的记录时,需要在条件表达式中使用IS NOT NULL运算符。
- 逻辑运算符 NOT运算符
NOT sale_price >= 1000 与 sale_price < 1000 是等价的。虽然通过 NOT 运算符否定一个条件可以得到相反查询条件的结果,但是其可读性明显不如显式指定查询条件,因此,不可滥用该运算符
AND运算符和OR运算符
AND 相当于“并且”,类似数学中的取交集 OR 相当于“或者”,类似数学中的取并集
如果我要查询商品种类为办公用品”并且“登记日期是 2009 年 9 月 11 日或者 2009 年 9 月 20 日
以上查询结果是错误的--错误的原因是 AND 运算符优先于 OR 运算符 ,想要优先执行OR运算,可以使用
括号
:运算符优先级请参考下图
对表进行聚合查询
- 聚合函数
- SUM:计算表中某数值列中的合计值
- AVG:计算表中某数值列中的平均值
- MAX:计算表中任意列中数据的最大值,包括文本类型和数字类型
- MIN:计算表中任意列中数据的最小值,包括文本类型和数字类型
- COUNT:计算表中的记录条数(行数)
SQL中用于汇总的函数叫做聚合函数。以下五个是最常用的聚合函数
- 使用
DISTINCT
进行删除重复值的聚合运算 - COUNT 聚合函数运算结果与参数有关,COUNT(*) / COUNT(1) 得到包含 NULL 值的所有行,COUNT(<列名>) 得到不包含 NULL 值的所有行。
- 聚合函数不处理包含 NULL 值的行,但是 COUNT(*) 除外。
- MAX / MIN 函数适用于文本类型和数字类型的列,而 SUM / AVG 函数仅适用于数字类型的列。
- 在聚合函数的参数中使用 DISTINCT 关键字,可以得到删除重复值的聚合结果。
当对整表进行聚合运算时,表中可能存在多行相同的数据,比如商品类型(product_type 列)。
在某些场景下,就不能直接使用聚合函数进行聚合运算了,必须搭配 DISTINCT 函数使用。
比如:要计算总共有几种咖啡类型在售,该怎么计算呢?
如前所述,DISTINCT 函数用于删除重复数据,应用 COUNT 聚合函数之前,加上 DISTINCT 关键字就可以实现需求。
聚合函数应用法则
- 对表进行分组
- SELECT ➡️ 2. FROM ➡️ 3. WHERE ➡️ 4. GROUP BY 其中前三项用于筛选数据,GROUP BY对筛选出的数据进行处理
GROUP BY语句
当你想将进行分组汇总时(即:将现有的数据按照某列来汇总统计),GROUP BY可以帮助你:
GROUP BY的子句书写顺序有严格要求,不按要求会导致SQL无法正常执行,目前出现过的子句顺序为:
在WHERE子句中使用GROUP BY
- 为聚合结果指定条件
用 HAVING 得到特定分组
将表使用 GROUP BY 分组后,怎样才能只取出其中两组?这里 WHERE 不可行,因为,WHERE子句只能指定记录(行)的条件,而不能用来指定组的条件(例如,“数据行数为 2 行”或者“平均值为 500”等)。
值得注意的是:HAVING 子句必须与 GROUP BY 子句配合使用,且限定的是分组聚合结果,WHERE 子句是限定数据行(包括分组列),二者各司其职,不要混淆。
HAVING特点:
- 对查询结果进行排序
ORDER BY
在某些场景下,需要得到一个排序之后的结果,比如运动员在奥运赛场的得分,组委会用得分倒序结果来判定金银铜牌到底花落谁家。而 SQL 语句执行结果默认随机排列,想要按照顺序排序,需使用 ORDER BY 子句。
其中,参数 ASC 表示升序排列,DESC 表示降序排列,默认为升序,此时,参数 ASC 可以缺省。
示例:按照销售价格倒序排列
如果有多列排序需求,只需在 ORDER BY 子句中依次书写排序列 + 排序参数即可,详见如下代码:
需要特别说明的是:由于 NULL 无法使用比较运算符进行比较,也就是说,无法与文本类型,数字类型,日期类型等进行比较,当排序列存在 NULL 值时,NULL 结果会展示在查询结果的开头或者末尾。
- 作者:IMyself
- 链接:https://blog.lmyself.top//article/47075fca-cc34-4667-864a-c98548900ffb
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章