DQL高级查询

    xiaoxiao2022-07-04  130

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

    最新回复(0)