一、SELECT语句
Select子句:指定要显示的列或表达式
From子句:指定查询数据来源的表或视图,可以指定一个表,也可以指定多个表
Where子句:指定选择行的条件
Group by子句:指定分组表达式
Having子句:制定满足分组的条件
Order by子句:指定行的升序或降序排序
Limit子句:指定查询结果集包含的行数
二、投影查询
1、投影指定的列
使用select语句可选择表中的一个列或多个列,若为多个列用逗号隔开
2、投影全部列
在select子句指定列的位置上使用 * 号时,则为查询表中所有的列
3、修改查询结果的列
在列名后使用AS<列别名>
4、计算列值
使用select子句对列进行查询时,可以对数字类型的列进行计算,可以使用加(+),减(-),乘(×),除(/)等算术运算符
5、去掉重复行
用distinct关键字去掉结果集中的重复行
三、选择查询
1、表达式比较
比较运算符用于比较两个表达式的值
2、指定范围
Between、not between、in是用于指定范围的三个关键词
3、空值判断
判断一个表达式的值是否为空值可用IS NULL关键字
4、使用LIKE关键字的字符串匹配查询
%:代表0或多个字符
_:代表一个字符
LIKE匹配中使用通配符的查询也称模糊查询
5、使用正则表达式进行查询
正则表达书通常用来检索或替换符合某个模式的文本内容,根据指定的匹配模式匹配文本中符合要求的特殊字符串。正则表达式的查询能力比通配符的查询能力更强大、更灵活、可以应用于非常复杂的查询中。
正则表达式常用的字符匹配选项
<字符串>:匹配包含指定的字符串的文本
[ ] :匹配在[ ]中的任何一个字符
[^] :匹配不在[ ]中的任何一个字符
^ :匹配文本的开始字符
$ :匹配文本的结束字符
. :匹配任何 单个字符
* :匹配零个或多个 * 前面的字符
+ :匹配+前面的字符1次或多次
{n} :匹配前面的字符串至少n次
四、分组查询和统计计算
1、聚合函数
聚合函数实现数据的统计计算,用于计算表中的数据,返回单个计算结果
1.1 COUNT()函数
计算组中满足条件的行数或总行数
1.2 SUM()、AVG()函数(两个函数只能用于数值类型的数据)
SUM():求出一组数据的总和
AVG():求出一组数据的平均值
1.3 MAX()、MN()函数(两个函数可用于任意类型的数据)
MAX():求出一组数据最大值
MIN():求出一组数据最小值
2、GROUP BY子句
用于指定需要分组的列
注:若select子句的列名表包含聚合函数,则该列名表只能包含聚合函数指定的列名和group by子句指定的列名。聚合函数常与group by子句一起使用
3、HAVING子句
用于对分组按指定条件进一步进行筛选,过滤出满足指定条件的分组
注:HAVING子句可以使用聚合函数,WHERE子句不可以使用聚合函数
当WHERE子句、GROUP BY子句、HAVING子句、ORDER BY子句在一个SELECT语句中时,执行顺序
1、执行WHERE子句,在表中选择行
2、执行GROUP BY子句,对选择行进行分组
3、执行聚合函数
4、执行HAVING子句,筛选满足条件的分组
5、执行ORDER BY子句,进行排序
五、排序查询和限制查询结果的数量
1、排序查询
ORDER BY子句可用于对查询结果进行排序(可对数值、日期、字符三种数据类型使用,在整个SELECT语句最后)
ASC:升序排序
DESC:降序排序
2、限制查询结果数量
LIMIT子句用于限制SELECT语句返回的行数
(1)Offset:位置偏移量,指示从哪一行开始显示,第1行的位置偏移量是0,第2行的位置偏移量是1,以此类推,若不指定位置偏移量,系统从表第1行开始显示
(2)row_count:返回的行数
(3)LIMIT子句两种语法格式,eg:显示表中第2~4行
A.LIMIT 1,3
B.LIMIT 3 OFFSET 1
六、连接查询
1、交叉连接(CROSS JOIN)
又称笛卡尔积,由第一个表的每行与第二个表的每行连接起来后形成的表,返回的结果集的行数等于所连接的两个表行数的乘积
2、内连接(INNER JOIN)
只有满足查询条件得到记录才能出现在结果集中,使用比较运算符进行表中某些字段值的比较操作,并将与连接条件相匹配的数据行组成新记录,以消除交叉连接中没有意义的数据行
有以下两种连接方式
INNER JOIN 显示语法结构
使用WHERE子句定义连接条件的隐式语法结构
2.1、等值连接与非等值连接
使用“=”连接起来的为等值连接,其他运算符连接为非等值连接
2.2、自然连接
在FROM子句中使用关键字NATURAL JOIN,自然连接在目标列中去除相同的字段名
2.3、自连接
将某个表与自身进行连接,为自表连接或自身连接,使用自连接需要为表指定多个别名,且对所有查询字段的引用必须使用表别名限定
3、外连接
只有满足查询条件得到记录才能最为结果输出,外连接的结果不但包含满足连接条件的行,还包括相应表中的所有行
左外连接:结果表中除了包含满足连接条件的行外,还包含左表的所有行,当左表有记录而在右表中没有匹配记录时,右表对应列被设置为NULL
右外连接:结果表中除了包含满足连接条件的行外,还包含右表的所有行,当右表有记录而在左表中没有匹配记录时,左表对应列被设置为NULL
七、子查询
可以用一系列简单的查询构成复杂的查询,在SQL语句中SELECT…FROM…WHERE语句为一个查询块,在WHERE子句或HAVING子句所指定的条件中,可以使用另一个查询块嵌套查询
- IN子查询
子查询和父查询的连接(先执行子查询,子查询的结果为父查询的查询条件)
- 比较子查询
子查询和父查询之间用比较运算符进行关联
ALL:表达式要与子查询结果集中每个值进行比较
SOME、AND:表达式只要与子查询结果集中某个值满足比较关系
- EXISTS子查询
只用于测试子查询是否返回行,若子查询返回一个或多个行,EXISTS返回TRUE,否则返回FALSE,NOT EXISTS返回值与EXISTS相反
八、联合查询
将两个或多个SQL语句的查询结果集合并起来,利用联合进行查询处理以完成特定的任务
(1)在构成联合查询的各个单独的查询中,列数和列的顺序必须匹配,数据类型必须兼容
(2)ORDER BY子句和LIMIT子句必须置于最后一条SELECT语句之后
来源地址:https://blog.csdn.net/Gin_9_20/article/details/129928482