Oracle【多表查询操作(SQL92&SQL99)】

摘要:
解决方案1:使用using关键字。1: 指示指定的字段用于等效地过滤联合查询的结果。注1:表示字段必须与两个表的名称和值相同。使用:从表名、innerjoin表名中选择*,使用;1——查询员工的姓名、工作、工资、部门名称2selectemp.ename、emp.job、emp.sal、dept dname3romemp4innerjoindeptsusing;问题2:如果字段名称不同但值相同,是否要执行等效的筛选?

多表联合查询:需要获取的数据分布在多张表中

SQL92:

1 --笛卡尔积:将多个表的数据进行一一对应,所得的结果为多表的笛卡尔积
2 select * from emp;
3 select * from dept;
4 select * from emp,dept;--进行全排列 14*5=70

Oracle【多表查询操作(SQL92&SQL99)】第1张

 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;

Oracle【多表查询操作(SQL92&SQL99)】第2张

1 --查询员工的姓名,工作,工资,工资等级
2 select e.ename,e.job,e.sal,s.grade
3 from emp e,salgrade s
4 where e.sal>=s.losal and e.sal<=s.hisal;

Oracle【多表查询操作(SQL92&amp;SQL99)】第3张

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.job,e1.sal,e1.mgr,e2.ename
8 from emp e1,emp e2
9 where e1.mgr=e2.empno;

Oracle【多表查询操作(SQL92&amp;SQL99)】第4张

外连接:左外连接&&右外连接

1 --左外链接
2  --查询员工的姓名,工作,薪资,部门名称及没有部门的员工信息(删除SMITH的部门编号测试)
3 select e.ename,e.job,e.sal,d.dname
4 from emp e,dept d
5 where e.deptno=d.deptno(+);

Oracle【多表查询操作(SQL92&amp;SQL99)】第5张

1 --右外连接
2  --查询员工的姓名,工作,薪资,部门名称及没有员工的部门信息
3 select e.ename,e.job,e.sal,d.dname
4 from emp e,dept d
5 where e.deptno(+)=d.deptno;

Oracle【多表查询操作(SQL92&amp;SQL99)】第6张

SQL99:
1:可给表添加别名
2:如果使用on或者usering关键字对结果进行筛选,必须使用inner join作为表与表的连接,其中inner可缺省
3:外连接的outer可缺省
4:依然可以使用分组,having,排序等。

1 --笛卡尔积:使用关键字 cross join
2  --select * from 表名1 cross join 表名2;
3 select * from emp cross join dept;

Oracle【多表查询操作(SQL92&amp;SQL99)】第7张

1 --筛选
2  --自然连接:使用关键字 natural join
3  --特点1:底层先笛卡尔积,然后按照所有同名同值字段自动进行等值筛选
4  --查询员工的姓名,工作,薪资,部门名称
5 select e.ename,e.job,e.sal,d.dname from emp e natural join dept d;

Oracle【多表查询操作(SQL92&amp;SQL99)】第8张

问题1:如果只想按照部分字段结束筛选?
解决1:使用using关键字
作用1:指明使用指定的字段对联合查询的结果进行等值筛选
注意1:指明字段必须是两表的同名同值字段
使用:select * from 表名 inner join 表名 using(字段名1,字段名2...);

1 --查询员工的姓名,工作,薪资,部门名称
2 select emp.ename,emp.job,emp.sal,dept.dname 
3 from emp 
4 inner join dept using(deptno);

Oracle【多表查询操作(SQL92&amp;SQL99)】第9张

问题2:如果按照字段名不同,但是值相同进行等值筛选?
解决2:使用on关键字进行自定义条件筛选(等值,不等值)
注意1:普通筛选条件使用where进行筛选,不要使用on。(增加SQL语句的阅读性)
使用:select 内容 from 表名 inner join 表名 on 连接条件 where 普通筛选条件;

1 --查询员工的姓名,工作,薪资,部门名称并工资大于等于2000
2 select emp.ename,emp.job,emp.sal,dept.dname 
3 from emp 
4 inner join dept 
5 on emp.deptno=dept.deptno where sal>=2000;

Oracle【多表查询操作(SQL92&amp;SQL99)】第10张

外链接
--左外连接:select 内容 from 表名 left outer join 表名 on 连接条件

1 --查询员工的姓名,工作,薪资,部门名称及没有部门的员工信息(删除SMITH的部门编号测试) 
2 select e.ename,e.job,e.sal,d.dname 
3 from emp e 
4 left outer join dept d 
5 on e.deptno=d.deptno;

Oracle【多表查询操作(SQL92&amp;SQL99)】第11张
--右外连接:select 内容 from 表名 right outer join 表名 on 连接条件

1 --查询员工的姓名,工作,薪资,部门名称及没有员工的部门信息
2 select e.ename,e.job,e.sal,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,e.job,e.sal,d.dname 
3 from emp e 
4 full outer join dept d 
5 on e.deptno=d.deptno;
1 --自链接:
2   --查询员工的姓名,工作,薪资,及上级领导的姓名
3 select e1.ename,e1.job,e1.sal,e2.ename 
4 from emp e1 
5 inner join emp e2 
6 on e1.mgr=e2.empno;

Oracle【多表查询操作(SQL92&amp;SQL99)】第12张

SQL92 && SQL99 详细比对:

Oracle【多表查询操作(SQL92&amp;SQL99)】第13张Oracle【多表查询操作(SQL92&amp;SQL99)】第14张
 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,e.job,e.sal,d.dname
14 from emp e,dept d
15 where e.deptno=d.deptno;
16 --SQL99
17  --自然连接:使用关键字 natural join
18  --查询员工的姓名,工作,薪资,部门名称
19 select e.ename,e.job,e.sal,d.dname 
20 from emp e 
21 natural join dept d;
22  --查询员工的姓名,工作,薪资,部门名称
23 select emp.ename,emp.job,emp.sal,dept.dname 
24 from emp 
25 inner join dept using(deptno);
26 
27 
28 --SQL92
29  --不等值连接
30  --查询员工的姓名,工作,工资,工资等级
31 select e.ename,e.job,e.sal,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,e.job,e.sal,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,e1.job,e1.sal,e2.ename
46 from emp e1,emp e2
47 where e1.mgr=e2.empno;
48 --SQL99
49  --查询员工的姓名,工作,薪资,及上级领导的姓名
50 select e1.ename,e1.job,e1.sal,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,e.job,e.sal,d.dname
60 from emp e,dept d
61 where e.deptno=d.deptno(+);
62 --SQL99
63 select e.ename,e.job,e.sal,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,e.job,e.sal,d.dname
73 from emp e,dept d
74 where e.deptno(+)=d.deptno;
75 --SQL99
76 select e.ename,e.job,e.sal,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,e.job,e.sal,d.dname 
85 from emp e 
86 full outer join dept d 
87 on e.deptno=d.deptno;
SQL92 && SQL99 详细比对

免责声明:文章转载自《Oracle【多表查询操作(SQL92&amp;amp;SQL99)】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇flask的配置设置的几种方式专题:DUILIB Win32 透明效果下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

HIVE优化学习笔记

概述 之前写过关于hive的已经有两篇随笔了,但是作者依然还是一枚小白,现在把那些杂七杂八的总结一下,供以后查阅和总结。今天的文章介绍一下hive的优化。hive是好多公司都在使用的东西,也有好多大公司进行定制化二次优化,比如鹅厂的Thive等。所以学习hive至关重要,本文只针对大众版免费开源的hive。官网地址:http://hive.apache.o...

Java Selenium

一篇概括了常用的元素定位方法,但是找到元素还是不够的,模拟鼠标的操作,完成各个功能点的自动操作才是关键。 下面是常见的页面元素操作会涉及到的方法,不是很全,比较复杂的后面单独拿出来做案例。 一, 输入框 ,按钮 登录到京东,找到主页的搜索框,这就是经典的输入框,然后点击搜索按钮,完成搜索的动作。 public static void Seach...

SQLServer触发器

触发器的作用: 自动化操作,减少了手动操作以及出错的几率。 触发器是一种特殊类型的存储过程,它不同于前面介绍过的一般的存储过程。 【在SQL内部把触发器看做是存储过程但是不能传递参数】 一般的存储过程通过存储过程名称被直接调用,而触发器主要是通过事件进行触发而被执行。 触发器是一个功能强大的工具,在表中数据发生变化时自动强制执行。 触发器可以用于SQL S...

Oracle用户及角色的权限管理[Oracle基础]

1.查看全部用户: select * from dba_users; select * from all_users; select * from user_users; 2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限): select * from dba_sys_privs; select * from user_sys_privs; 3...

mysql中的view(虚拟表)

视图是从一个或多个表/视图中导出来的虚拟表。mysql支持可更新的视图。 1 创建 CREATE [OR REPLACE] ##使用这个选项,若视图已存在,则等图create,若视图不存在,则等同alter [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = {...

Spring Boot整合Mybatis配置详解

首先,你得有个Spring Boot项目。 平时开发常用的repository包在mybatis里被替换成了mapper。 配置: 1.引入依赖: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-s...