邹瑞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 = '张青');
近期评论