一.把查询结果去除重复记录
关键字:distinct,只能出现在所有字段的最前方,如果有多个字段,表示两个字段联合去重
select distinct 字段名 from 表名;
二.连接查询
1.什么是连接查询:
从一张表中单独查询是单表查询;多个表联合起来查询称为连接查询。
2.分类:
(根据语法的年代)
- SQL92:1992年的时候出现的语法
- SQL99:1999年的时候出现的语法
(根据表的连接的方式)
- 内连接:(1)等值连接(2)非等值连接(3)自连接
- 外连接:(1)左外连接(左连接)(2)右外连接(右连接)
- 全连接
3.笛卡尔积现象:当两张表进行连接查询的时候,没有任何条件限制的时候,最终查询的结果条数,是两张表条数的乘积。
select 字段名1,字段名2 from 表1,表2;
4.避免笛卡尔积现象:连接时加条件,满足这个条件的数据被筛选出来:(匹配的次数没有减少,但是显示出来的数据会减少)表起别名很重要
表1.字段名1=表2.字段名1
5.内连接之等值连接(条件是等量关系,所以称为等值连接)
select 字段名1,字段名2 from 表1 inner jion 表2 on 表1和表2连接条件 where 筛选条件
//inner可以省略
SQL92缺点:结构不够清晰,表的连接条件和后期进一步筛选的条件,都放到了where后面。
SQL99优点:表连接的条件是独立的,连接之后,如果还需进一步筛选,再往后加where
6.内连接之非等值连接
区间:between...and...
7.内连接之自连接(一张表看成两张表)
8.外连接:除了匹配上的数据其他也显示,出现了主次关系
right:表示将jion关键字右边的这张表看成主表,主要是为了将这张表的数据全部查询出来,捎带着关联查询左边的表,left同理。
select 字段名1,字段名2 from 表1 right outer jion 表2 on 表1和表2连接条件 where 筛选条件
//outer可以省略
外连接的查询结果次数一定大于内连接的查询结果次数。
9.多张表连接 一条sql语句中内连接和外连接可以混合,都可以出现
select
...
from
a
jion
b
on
a和b的连接条件
jion
c
on
a和c的连接条件
三.子查询
1.什么是子查询:select语句中嵌套select语句,被嵌套的select语句称为子查询
2.子查询可以出现在哪里:select,from,where语句后面
3.where语句中的子查询
4.from语句中的子查询:可以将子查询的查询结果当做一张临时表
5.select后面的子查询:这个子查询只能返回一条结果,多于一条失败
四.union合并查询结果集
- 直接将两个select语句用union连接起来。
- union的效率高一些,对于表连接来说,每连接一次新表,则匹配的次数满足笛卡尔积,成倍的翻,但是union可以减少匹配的次数。,在减少匹配次数的情况下,还可以完成两个结果集的拼接。
- union在进行结果集合合并得时候,要求两个结果集的列数相同
五.limit
1.limit是将查询结果集的一部分取出来,通常使用在分页查询中
2.在查询的最后加一条limit语句即可
- 完整用法:limit startIndex,length//startIndex是起始下标,length是长度(默认在0开始)
- 缺省用法:limit n,取前n条记录
3.注意:mysql中limit在order by之后执行
4.分页
limit (pageNo-1)*pageSize,pageeSize
六.关于DQL语句的大总结
select...from...where...group by...having...ordere by...limit...