入门精通2-查询
sql查询学习,内容有分组、排序、子查询、表连接以及集合操作
查询的结构如下:
1 | select |
在SELECT
子句中,列数据类型为数字类型和时间类型可以使用+
、-
、*
、/
、()
。也可以使用 DISTINCT
关键字去除重复行。WHERE
子句用于筛选查询结果,筛选的方式可以分为如下:
- 逻辑:A>B
、A=B
、A<B
、A!=B
、A LIKE('%','_')
、NOT A
- 连接:AND
、OR
- 关于NULL
:IS NULL
、IS NOT NULL
ORDER BY
子句用于对查询的结果集按指定列排序。如果有多个列排序,则列名之间使用逗号隔开。排序分为升序ASC
和降序DESC
,不写名则默认ASC
。GROUP BY
子句用于对查询集进行分组。一般分组会使用统计函数,常用的统计函数有:COUNT()
、MAX()
、MIN()
、SUM()
、AVG()
。分组时还可以使用关键字ROLLUP
或CUBE
将统计结果汇总,它们的不同在于ROLLUP
汇总行在底端、CUBE
汇总行在顶端
演示1:
1 | select job, max(sal), min(sal), count(sal), avg(sal), sum(sal) |
演示2:
1 | select job, max(sal), min(sal), count(sal), avg(sal), sum(sal) |
HAVING
子句可以对分组后的数据进行再一次筛选。如果没有GROUP BY
子句,则HAVING
的条件在WHERE
后执行。FROM
子句为查询的数据来源,可以为多个数据表。若查询多个表,则需要连接。
多表连接
简单连接:多个表使用逗号分隔开,得到的集合为笛卡尔积。
限制连接:使用WHERE
子句限制笛卡尔积的连接方式。
JOIN连接
形式如下:
1 | ... |
内连接:INNER JOIN
可以省略为JOIN
自然连接:NATURAL JOIN
。相同列进行连接,所以不需要连接表达式NO join_condition
左连接:LEFT OUTER JOIN
可以省略OUTER
右连接:RIGHT OUTER JOIN
可以省略OUTER
全连接:FULL OUTER JOIN
可以省略OUTER
集合操作
表示对多个查询结果做集合操作,及对多个SELECT
子句进行运算,得到最终的结果集。UNION
:多个查询结果相加,即查询集的并集运算UNION ALL
:UNION
所得的结果中不进行重复行的删除INTEREST
:对查询集进行交集运算MINUS
:前查询集合对后查询集合做差所得差集,为结果集
子查询
IN
:列值是否属于IN
集合EXISTS
:子查询的结果集是否为空