MySQL高级查询
嵌套查询(子查询)
- 定义:把内层的查询结果作为外层的查询条件
- 语法格式:
select … from 表名 where 条件(select …);
子查询有返回结果:exists 子查询结果为True
子查询无返回结果:exists 子查询结果为FALSE,外层查询不执行
删除表
- DROP TABLE IF EXISTS temp;
多表查询
- 笛卡儿积
select 字段名 列表 from 表名列表; - 多表查询
select 字段名 列表 from 表名列表 where 条件;
连接查询
-
内连接(结果同多表查询,显示匹配到的记录)
语法格式:
select 字段名 from 表1 inner join 表2 on 条件 inner join 表3 on 条件; -
左外连接:以 左表 为主显示查询结果
语法格式:
select 字段名 from 表1 left join 表2 on 条件 left join 表3 on 条件; -
右外连接:用法同左连接,以右表为主显示查询结果
语法格式:
select 字段名 from 表1 right join 表2 on 条件 right join 表3 on 条件
分组查询
- 语法:SELECT …… FROM <表名> WHERE …… GROUP BY ……
In和Exists的区别
-
In:
主查询的条件字段和子查询返回字段必须一致
先执行子查询,将返回子查询的结果给主查询,再执行主查询 -
exists:
主查询不需要出现条件字段
先执行主查询,将主查询的表的字段传给子查询,如果在子查询找到相应结果,
返回true,将该结果显示在结果集中。否则返回false
联合查询
- UNION:
并集,所有的内容都查询,重复的显示一次
select * from emp where deptno = 20
union
select * from emp where sal > 2000
- UNION ALL:
并集,所有的内容都显示,包括重复的
自然连接
寻找俩表中字段名称相等,数据类型相同的字段进行连 接,会自动去重重复列(如果有多个字段符合要求,那么他们会被作为自然连接的条件)
--自然连接(等值连接,表的字段名称必须相同,去除重复行)
select * from emp NATURAL JOIN dept;