邹瑞20201015

总结

高级查询

笛卡尔乘积现象

表查询中的笛卡尔乘积现象:多行表在查询时,如果定义了无效连接或者漏写了连接条件,就会产生笛 卡尔乘积现象,所谓的笛卡尔乘积及时每个表的每一行都和其他表的每一行组合。

等值连接查询

通常是在存在主键外键关联关系的表之间的连接进行,使用"="连接相关的表 (n个表进行等值连接查询,少需要n-1个等值条件来约束)

如select dept.dname,emp.ename from emp,dept where dept.deptno = emp.deptno;

自连接查询

表表查询不仅可以在多个表之间进行查询,也可以在一个表之中进行多表查询

select e1.empno as 员工编号,e1.ename as 员工姓名,e2.empno as 领导编号,e2.ename as 领导姓名 from emp as e1,emp as e2 where e1.mgr = e2.empNo;

原名 as 代名;as可以省略;

内连接查询

内连接查询使用 inner join 关键字实现, inner 可以省略。内连接查询时,条件用 on 连接,多个条 件使用 () 将其括起来.

select dept.name,emp.name from emp inner join dept on emp.deptno = dept.deptno;

和等值查询差不多

外连接

外连接分为左外连接( left outer join ) 和右外连接( right outer join )其值 outer 可以省 略。外连接查询时,条件用 on 连接,多个条件使用 () 将其括起来.
左外连接表示以左表为主表,右外连接表示以右表为主表。查询时将主表信息在从表中进行匹配。(优先显示主表内容,从表内容可不全)

select dept.name,emp.name from emp right join dept on emp.deptno = dept.deptno;

select dept.name,emp.name from emp left join dept on emp.deptno = dept.deptno;

子查询

单行子查询

select * from emp e where e.deptno = (select d.deptno from dept d where d.dname = '软件部' );

多行子查询

如果字查询返回了多行记录,则称这样的嵌套查询为多行子查询,多行子查询就需要用到多行记录的操 作符
如: in , all , any

–统计所有的员工分布在那些部门的信息

select * from dept d where d.deptno in (select e.deptno from emp e);
–查询公司中比任意一个员工的工资高的所有员工

select * from emp e1 where e1.sal > any (select e1.sal from emp e2);
–查询公司中比所有的助理工资高但不是助理的员工

select * from emp e1 where e1.sal > all(select e2.sal from e2.emp where w2.joblike '%助理');

any 表示大于子查询中的任意一个值,即大于小值 >all 表示大于子查询中的所有值,即大于大的值

多列子查询

–查询公司中和员工***相同薪水和奖金的员工

select * from emp e1 where (e1.sal,e1.comm) = (select e2.sal,e2.comm from emp e2 where e2.ename = '张青');

标签

评论

this is is footer