select(第五步)
...
from(第一步)
...
where(第二步)
...
group by (第三步)
...
having(第四步)
...
order by(第六步,排序永远最后)
....
limit(第七步,取段)
...
目录
7.distinct 把查询结果去除重复数据
7.1原表数据不会被修改,需要一个关键字distinct
7.2distinc只能出现在所有字段的前方
7.3去除所有字段的内容都相同的数据的
8.连接查询
8.1多张表连接起来查询数据被称为连接查询
8.2根据表连接的方式分类:
内连接:
等值连接
非等值连接
自连接
外连接:
左外连接
右外连接
8.3没有条件限制的情况下,连接的结果是一个表的所有数据和一张表的每行数据进行匹配
8.7等值连接
select
...
from
表名
join
表名
on
表连接的条件,相等的条件
8.8非等值连接
select
...
from
表名
join
表名
on
连接条件
8.9内连接之自连接:一张表看成两张表,完全能够匹配上on条件的查询出来
8.10外连接:会保留没有匹配上条件的数据,外连接产生了主次关系(右外连接:把右边的表看为主表,保留主表的数据,左连接类似)
8.11外连接的查询条数一定>=内连接的查询结果条数
8.12 三张表,四张表怎么连接?(连接完的结果和下一个表进行连接)
语法:
select
...
from
a
join
b
on
a和b的连接条件
join
c
on
a和c的连接条件
join
d
on
a和d的连接条件
9.子查询
9.1什么是子查询?
select语句中嵌套select语句,被嵌套的select语句被称为子查询
9.2子查询可以出现在哪里?
select
..(select)
from
..(select)
where
..(select)
9.3where子句中的子查询
查出比最低工资高的员工姓名和工资
select
ename,sal
from
emp
where
sal>(select min(sal) from emp);
9.4from子句中的子查询
from后面的子查询,可以将子查询的查询结果当做一张临时表
找出每个岗位的平均薪资等级?
第一步:找出每个岗位的平均工资
select
job,avg(sal)
from
emp
group by
job;t表
第二步:克服心理障碍,把上面的查询结果当作一张真实存在的表
select *
from salgrade;s表
第三步:将两表进行连接
select
t.*,s.grade
from
(select job,avg(sal) as avgsal from emp goup by job) t
where
t.avgsal between s.losal and s.hisal;
9.5select后面出现的子查询
对于select后面的子查询来说,这个子查询一次只能返回一条结果
10.union合并查询结果集
10.1 union的效率高于表连接,union可以减少匹配次数
10.2 union在进行结果合并的时候,要求两个结果集的列数相同
11.limit
11.1 limit是把查询结果集的一部分取出来,通常使用在分页查询中
11.2 limit 5;取该表中的前五条记录
limit 起始下标1,长度2;取1-(2-1+1)的数据,下标1表示第二条记录
11.3 limit在order by之后执行!!
11.4 取出工资排在5-9的员工:limit 4,5;
11.5 分页
每页显示pagesize条记录
第pageno页:limit (pageno-1)*pagesize,pagesize