入门精通2-查询

sql查询学习,内容有分组、排序、子查询、表连接以及集合操作

查询的结构如下:

1
2
3
4
5
6
select 
from
where
group by
having
order by

SELECT子句中,列数据类型为数字类型和时间类型可以使用+-*/()。也可以使用 DISTINCT关键字去除重复行。
WHERE子句用于筛选查询结果,筛选的方式可以分为如下:
- 逻辑:A>BA=BA<BA!=BA LIKE('%','_')NOT A
- 连接:ANDOR
- 关于NULLIS NULLIS NOT NULL
ORDER BY子句用于对查询的结果集按指定列排序。如果有多个列排序,则列名之间使用逗号隔开。排序分为升序ASC和降序DESC,不写名则默认ASC
GROUP BY子句用于对查询集进行分组。一般分组会使用统计函数,常用的统计函数有:COUNT()MAX()MIN()SUM()AVG()。分组时还可以使用关键字ROLLUPCUBE将统计结果汇总,它们的不同在于ROLLUP汇总行在底端、CUBE汇总行在顶端
演示1:

1
2
3
select job, max(sal), min(sal), count(sal), avg(sal), sum(sal)
from emp
group by rollup(job)


演示2:

1
2
3
4
select job, max(sal), min(sal), count(sal), avg(sal), sum(sal)
from emp
group by CUBE(job)

HAVING子句可以对分组后的数据进行再一次筛选。如果没有GROUP BY子句,则HAVING的条件在WHERE后执行。
FROM子句为查询的数据来源,可以为多个数据表。若查询多个表,则需要连接。

多表连接

简单连接:多个表使用逗号分隔开,得到的集合为笛卡尔积。
限制连接:使用WHERE子句限制笛卡尔积的连接方式。

JOIN连接

形式如下:

1
2
3
4
...
FROM table1
JOIN_TYPE join_table [ON join_condition]
...

内连接:INNER JOIN可以省略为JOIN
自然连接:NATURAL JOIN。相同列进行连接,所以不需要连接表达式NO join_condition
左连接:LEFT OUTER JOIN可以省略OUTER
右连接:RIGHT OUTER JOIN可以省略OUTER
全连接:FULL OUTER JOIN可以省略OUTER

集合操作

表示对多个查询结果做集合操作,及对多个SELECT子句进行运算,得到最终的结果集。
UNION:多个查询结果相加,即查询集的并集运算
UNION ALLUNION所得的结果中不进行重复行的删除
INTEREST:对查询集进行交集运算
MINUS:前查询集合对后查询集合做差所得差集,为结果集

子查询

IN:列值是否属于IN集合
EXISTS:子查询的结果集是否为空