DQL高级查询

本文介绍DQL高级查询,涵盖多表查询(笛卡儿积、内连接、自然连接、外连接、自连接)、子查询(单行、多行,对比in和exists区别)和联合查询(UNION和UNION ALL),详细说明了各查询方式的特点和执行逻辑。

DQL高级查询

多表查询(关联查询,连接查询)
1.笛卡儿积(不关联外键)

emp15条记录,dept表4条记录

笛卡儿积emp每一条对应4条记录,60条记录

2.内连接

不区分主从表,与连接顺序无关,两张表均满足条件则出现在结果集中(交集)

在这里插入图片描述

3.自然连接

寻找两表中字段名称相等的字段进行连接(等同于join,会去重)

4.外连接

有主从表之分,与连接顺序有关。左外连接,以左表为驱动表,匹配表依次查询,匹配表中找不到以null填充
在这里插入图片描述

5.自连接

同一个表里面的数据相关联

--查询所有的员工的姓名和上级领导的姓名  emp(内连接) 
--ename所有员工姓名,mgr领导编号empno员工编号 
select e1.ename ename,e2.ename mgrname from emp e1,emp e2 where e1.mgr = e2.empno; 
select e1.ename ename ,e2.ename mgrname from emp e1 left join emp e2 on e1.mgr=e2.empno; 
子查询(嵌套查询)
1.单行子查询

子查询的结果返回一行

select dname from dept where deptno = (select deptno from emp where empno=7788)
2.多行子查询

查询的结果返回一个集合

--查询工资大于2000的员工部门名称 
select dname from dept where deptno = any(select deptno from emp where sal >2000); 
=ANY 含义就是in	>any大于最小值	<any小于最小值 >all 大于最大值	<all 小于最小值 
in和exists区别

1.IN:

主查询的条件字段和子查询返回字段必须一致。先执行子查询,将返回子查询的结果返回给主查询,再执行主查询

2.EXISTS:

主查询不需要出现条件字段,先执行主查询,主查询的表的字段传递给子查询,如果在子查询找到相应的结果,子查询为true,将该结果显示在结果显示在结果集中。where子查询为false,显示null;

联合查询

1.UNION所有内容都查询,重复的只显示一次

select * from emp where deptno = 20  union    select * from emp where sal > 2000; 

2.UNION ALL,显示所有内容包括重复的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值