select 查询列表
from 表1 别名
【连接类型】join 表2 别名
on 连接条件
【连接类型】join 表3 别名
on 连接条件
...
【where 筛选条件】
【group by 分组】
having 筛选条件
order by 排序列表
连接类型:
1.内连接:inner
2.外连接
用于查询一个表中有的,而另一个表中没有的数据,结果相当于A和B的差集以及A和B的交集。
特点:
相当于笛卡尔乘积形式。
出现在其他语句中内部的select语句,称为子查询或内查询。
外部语句可以是insert, update,delete,select等,但是select作为外部语句较多。外面如果为select语句,则此语句称为外查询或主查询
特点:
①子查询放在小括号内,括号内不用加分号;
②子查询一般放在条件的右侧;
③标量子查询,一般搭配单行操作符使用,常见的单行操作符有:>, < , >=, <=, <>
列子查询,一般搭配多行操作符使用,如in ,any/some, all
④子查询的执行次序优先于主查询
(一) 标量子查询
select *
from family.zhutong
where budget>( #子查询语句
select budget
from family.zhutong
where name = 'frog'
)
and bonus is not null
and variety>'a';
(二)列子查询
返回多行,常使用in / not in 操作符,偶尔使用any (some) 和 all。
select boys.rank,a.avg
from boys
inner join (
select round(avg(budget),2) as 'avg'
from zhutong
group by variety
) as a
on a.avg between boys.low and boys.high;
或如下
select boys.rank,a.avg
from (
select round(avg(budget),2) as 'avg'
from zhutong
group by variety
) as a #必须取别名
inner join boys
on a.avg between boys.low and boys.high;
(三)exists 后面
也称为相关子查询,返回值为bool类型,一般exists 都能够被in代替
#exists
select boys.*
from boys
where not exists(
select zhutong.match_id
from family.zhutong
where boys.id = family.zhutong.match_id
);
#in
select boys.*
from boys
where boys.id not in(
select family.zhutong.match_id
from family.zhutong
);
select 查询列表
from 表
【join type表2
on 连接条件
where 筛选条件
group by 分组条件
having 分组后筛选
order by 排序字段 】
limit offset, set
条目个数
。 要显示的页数 page,每页的条目数size
select 查询列表
from 表
limit (page-1)*size,size
SELECT
emp.*
FROM
emp
ORDER BY EMPNO DESC
LIMIT 5; #倒数5项
union all
select *
from emp
where year(emp.HIREDATE) > 1980
or emp.COMM is not null;
#等价于
select *
from emp
where year(emp.HIREDATE) > 1980
union
select * from emp
where emp.COMM is not null;
MySQL复习day01:数据库简介和 DQL数据查询语言
MySQL复习day02:DQL数据查询语言续
MySQL复习day03:DQL数据查询语言完结
MySQL复习day04:DML数据操作语言和DDL数据定义语言
MySQL复习day05:TCL事务控制语言和视图
MySQL复习day06:变量,存储过程
MySQL复习day07:函数
MySQL复习day08:流程控制结构
MySQL复习day09:逻辑架构和引擎,索引详解(explain)
感谢诸君观看,如果感觉有用的话,点个赞吧!