Oracle【多表查询操作(SQL92&SQL99)】
发布时间:2020-12-12 13:44:32 所属栏目:百科 来源:网络整理
导读:多表联合查询:需要获取的数据分布在多张表中 SQL92: 1 -- 笛卡尔积:将多个表的数据进行一一对应,所得的结果为多表的笛卡尔积 2 select * from emp; 3 select * from dept; 4 select * from emp,dept; -- 进行全排列 14*5=70 1 -- 等值连接:先笛卡尔积,
多表联合查询:需要获取的数据分布在多张表中 SQL92: 1 --笛卡尔积:将多个表的数据进行一一对应,所得的结果为多表的笛卡尔积 2 select * from emp; 3 select * from dept; 4 select * from emp,dept;--进行全排列 14*5=70 1 --等值连接:先笛卡尔积,然后筛选,筛选条件为等值筛选 2 --查询员工的姓名,工作,薪资,部门名称 3 --可直接在select子句中使用字段获取数据,但效率低,建议字段前明确表名 4 select ename,job,sal,dname from emp,dept where emp.deptno=dept.deptno;--效率低 5 --两张表存在的公众字段,必须明确表名:emp.deptno=dept.deptno 6 select emp.ename,emp.job,emp.sal,dept.dname from emp,dept where emp.deptno=dept.deptno;--效率高 7 --给表添加别名(推荐) 8 select e.ename,e.job,e.sal,d.dname 9 from emp e,dept d 10 where e.deptno=d.deptno; 1 --查询员工的姓名,工作,工资,工资等级 2 select e.ename,s.grade 3 from emp e,salgrade s 4 where e.sal>=s.losal and e.sal<=s.hisal; 1 --自连接 2 --查询员工的姓名,工作,薪资,及上级领导的姓名 3 select e1.ename,e1.job,e1.sal,e2.ename 4 from emp e1,emp e2 5 where e1.mgr=e2.empno; 6 ----------------下面SQL可详细查看到对应的领导姓名详情------------------- 7 select e1.empno,e1.ename,e1.mgr,e2.ename 8 from emp e1,emp e2 9 where e1.mgr=e2.empno; 外连接:左外连接&&右外连接 1 --左外链接 2 --查询员工的姓名,工作,薪资,部门名称及没有部门的员工信息(删除SMITH的部门编号测试) 3 select e.ename,d.dname 4 from emp e,dept d 5 where e.deptno=d.deptno(+); 1 --右外连接 2 --查询员工的姓名,工作,薪资,部门名称及没有员工的部门信息 3 select e.ename,dept d 5 where e.deptno(+)=d.deptno; SQL99: 1 --笛卡尔积:使用关键字 cross join 2 --select * from 表名1 cross join 表名2; 3 select * from emp cross join dept; 1 --筛选 2 --自然连接:使用关键字 natural join 3 --特点1:底层先笛卡尔积,然后按照所有同名同值字段自动进行等值筛选 4 --查询员工的姓名,工作,薪资,部门名称 5 select e.ename,d.dname from emp e natural join dept d; 问题1:如果只想按照部分字段结束筛选? 1 --查询员工的姓名,工作,薪资,部门名称 2 select emp.ename,dept.dname 3 from emp 4 inner join dept using(deptno); 问题2:如果按照字段名不同,但是值相同进行等值筛选? 1 --查询员工的姓名,工作,薪资,部门名称并工资大于等于2000 2 select emp.ename,dept.dname 3 from emp 4 inner join dept 5 on emp.deptno=dept.deptno where sal>=2000; 外链接 --左外连接:select 内容 from 表名 left outer join 表名 on 连接条件 1 --查询员工的姓名,工作,薪资,部门名称及没有部门的员工信息(删除SMITH的部门编号测试) 2 select e.ename,d.dname 3 from emp e 4 left outer join dept d 5 on e.deptno=d.deptno; --右外连接:select 内容 from 表名 right outer join 表名 on 连接条件 1 --查询员工的姓名,工作,薪资,部门名称及没有员工的部门信息 2 select e.ename,d.dname 3 from emp e 4 right outer join dept d 5 on e.deptno=d.deptno; 1 --全外连接:select 内容 from 表名 full outer join 表名 on 连接条件 2 select e.ename,d.dname 3 from emp e 4 full outer join dept d 5 on e.deptno=d.deptno; 1 --自链接: 2 --查询员工的姓名,工作,薪资,及上级领导的姓名 3 select e1.ename,e2.ename 4 from emp e1 5 inner join emp e2 6 on e1.mgr=e2.empno; SQL92 && SQL99 详细比对: 1 -------------------------------------------------- SQL92 && SQL99 详细比对 -------------------------------------------------- 2 --SQL92 3 --笛卡尔积 4 select * from emp,dept;--进行全排列 5 --SQL99 6 --笛卡尔积:使用关键字 cross join 7 select * from emp cross join dept; 8 9 10 --SQL92 11 --等值连接 12 --查询员工的姓名,工作,薪资,部门名称 13 select e.ename,d.dname 14 from emp e,dept d 15 where e.deptno=d.deptno; 16 --SQL99 17 --自然连接:使用关键字 natural join 18 --查询员工的姓名,工作,薪资,部门名称 19 select e.ename,d.dname 20 from emp e 21 natural join dept d; 22 --查询员工的姓名,工作,薪资,部门名称 23 select emp.ename,dept.dname 24 from emp 25 inner join dept using(deptno); 26 27 28 --SQL92 29 --不等值连接 30 --查询员工的姓名,工作,工资,工资等级 31 select e.ename,s.grade 32 from emp e,salgrade s 33 where e.sal>=s.losal and e.sal<=s.hisal; 34 --SQL99 35 --查询员工的姓名,工作,工资,工资等级 36 select e.ename,s.grade 37 from emp e 38 natural join salgrade s 39 where e.sal>=s.losal and e.sal<=s.hisal; 40 41 42 --SQL92 43 --自连接 44 --查询员工的姓名,工作,薪资,及上级领导的姓名 45 select e1.ename,e2.ename 46 from emp e1,emp e2 47 where e1.mgr=e2.empno; 48 --SQL99 49 --查询员工的姓名,工作,薪资,及上级领导的姓名 50 select e1.ename,e2.ename 51 from emp e1 52 inner join emp e2 53 on e1.mgr=e2.empno; 54 55 56 --SQL92 57 --左外链接 58 --查询员工的姓名,工作,薪资,部门名称及没有部门的员工信息(删除SMITH的部门编号测试) 59 select e.ename,d.dname 60 from emp e,dept d 61 where e.deptno=d.deptno(+); 62 --SQL99 63 select e.ename,d.dname 64 from emp e 65 left outer join dept d 66 on e.deptno=d.deptno 67 68 69 --SQL92 70 --右外连接 71 --查询员工的姓名,工作,薪资,部门名称及没有员工的部门信息 72 select e.ename,d.dname 73 from emp e,dept d 74 where e.deptno(+)=d.deptno; 75 --SQL99 76 select e.ename,d.dname 77 from emp e 78 right outer join dept d 79 on e.deptno=d.deptno; 80 81 82 --SQL99 83 --全外连接:select 内容 from 表名 full outer join 表名 on 连接条件 84 select e.ename,d.dname 85 from emp e 86 full outer join dept d 87 on e.deptno=d.deptno;SQL92 && SQL99 详细比对 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |