DQL高级查询

DQL高级查询

多表查询(关联查询,连接查询)

1.笛卡儿积(不关联外键)

emp15条记录,dept表4条记录

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

2.内连接

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

DQL高级查询_第1张图片

3.自然连接

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

4.外连接

有主从表之分,与连接顺序有关。左外连接,以左表为驱动表,匹配表依次查询,匹配表中找不到以null填充
DQL高级查询_第2张图片

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大于最小值	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,显示所有内容包括重复的。

你可能感兴趣的:(MySQL,join,DQL)