Oracle的多表查询
多表查询概念:
所谓多表查询,又称表联合查询,即一条语句涉及到的表有多张,数据通过特定的连接进行联合显示。
基本语法:
select column_name,....
from table1,table2
条件。。。。
select dept_id,name
from s_emp,s_dept
s_emp s_dept
last_name dept_id id name
zhangsan 41 41 est
lisi 42 42 develop
学前须知:
笛卡尔积
在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y.
假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
在数据库中,如果直接查询俩张表,那么其查询结果就会产生笛卡尔积
例如:
select *
from s_emp,s_dept;
连接查询分类:
为了在多表查询中避免笛卡尔积的产生,我们可以使用连接查询来解决这个问题.
连接查询分为:
1.等值连接
2.不等值连接
3.外连接
左外连接
右外连接
全连接
4.自连接
等值连接:利用一张表中某列的值和另一张表中某列的值相等的关系,把俩张表连接起来。
语法:
select tb_name.col_name,tb_name.col_name,...
from tb_name,tb_name,...
where tb_name.col_name = tb_name.col_name
and
tb_name.col_name = tb_name.col_name
...
需求:查看每个员工的id,last_name以及所属部门名称
select s_emp.id,last_name,s_dept.name
from s_emp ,s_dept
where s_emp.detp_id = s_dept.id;
有时为了简化操作,或者表述更加清楚,可以给每张表起别名
select e.id,e.last_name,d.name
from s_emp e ,s_dept d
where d.detp_id = d.id;
不等连接: 使用的是除=以外的操作符号的多表查询
例如:使用between and
select t1.col_name,t2.col_name
from t1,t2
where t1.col_name between t2.col_name
and t2.col_name;
外连接:当一个表的记录在另外一张表中不存在的时候,我们依旧需要显示,使用外连接即可。
外连接分为:
右外连接(right join/right outer join)
左外连接(left join/left outer join)
全外连接(full join/ full outer join)
右外连接的语法:
select tb_name,col_name,...
from tb_name1,tb_name2
where
tb_name1.col_name (+)= tb_name2.col_name;
or
select tb_name,col_name,
from tb_name1 right outer join tb_name2
where .......
意义:右外连接表示右边表(=号右边的表)中的记录在左边表中不存在的时候,右边表的记录依旧显示。
select c.id,c.name,e.last_name
from s_customer c,s_emp e
where c.id (+)= c.sales_rep_id;
左外连接的语法:
select tb_name,col_name,...
from tb_name1,tb_name2
where
tb_name1.col_name = tb_name2.col_name(+);
or
select tb_name,col_name,...
from tb_name1 left outer join tb_name2
where
tb_name1.col_name = tb_name2.col_name(+);
意义:左外连接表示左边表(=号左边的表)中的记录在右边表中不存在的时候,左边表的记录依旧显示。
需求:查看s_customer中所有客户的id和名字以及该客户所对应的负责员工的id,last_name
表之间的连接列
s_customer 表中的sales_rep_id
s_emp 表中的id
select c.id,c.name,e.last_name
from s_customer c,s_emp e
where c.sales_rep_id = e.id;
自连接
实质就是一张表当多张表用,即一张表中的某列的值取决于自己的某一列
需求:查看每一个员工的经理名字
语法:
select ...
from tb_name t1,tb_name t2
where t1.col_name = t2.ano_col_name
select e1.id,e1.last_name,e1.manager_id,e2.last_name
from s_emp e1,s_emp e2
where e1.manager_id = e2.id;
集合连接:对查询结果集的操作。
union:将上下结果取并集,去除掉重复的记录(重复的只显示一次)
union all:将上下结果全部显示
minus:取差集 A-B
intersect:取交集
前提条件是:两个结果集中查询的列要完全一致。
伪列:
oracle中的伪列 rownum
伪列rownum,就像表中的列一样,但是在表中并不存储。伪列只能查询,不能进行增删改操作。它会根据返回的结果为每一条数据生成一个序列化的数字.rownum是oracle才有的伪列
rownum 所能作的操作:
rownum 只能等于1 如果让其等于其他数 则查不到数据
例如:
select last_name
from s_emp
where rownum=1
rownum 大于0 如果让其大于其他数 则查不到数据
例如:
select last_name
from s_emp
where rownum>0
rownum 可以小于任何数
例如:
select last_name
from s_emp
where rownum<7
Oracle的多表查询的更多相关文章
- Oracle笔记 多表查询
Oracle笔记 多表查询 本次预计讲解的知识点 1. 多表查询的操作.限制.笛卡尔积的问题: 2. 统计函数及分组统计的操作: 3. 子查询的操作,并且结合限定查询.数据排序.多表查询.统计查 ...
- oracle SQL多表查询
SQL多表查询 1.集合理论 1.1 什么是集合 具有某种特定性质的事物的总体. 集合的特性:无序性.互异性.确定性. 一个集合可以小到从一个表中取出一行中的一列. 1 ro ...
- Oracle查询优化-多表查询
--合并结果集 --1.union all UNION ALL--单纯合并 ; --2.union UNION --将重复结果集合并 ; --------------使用命令窗口执行,查看union与 ...
- Oracle之多表查询
-多表查询 1.交叉连接 select * from t_class for update; select * from t_student for update; select for update ...
- oracle数据库单表查询
今天给大家分享的是关于数据库的单表查询,像单表查询/多表查询/分组查询/子查询,这些方法的使用在实际项目过程中会经常用到,作为一名合格的测试人员如果不会数据库那肯定是不行的,行走江湖可能随时会面临被侮 ...
- oracle习题-emp表查询练习
emp表查询练习 1 查询emp表的全部记录 Select * from emp; 2 查询出每个雇员的编号.姓名.基本工资 Select empno,ename,sal from emp; 3 查询 ...
- 关于oracle数据库 跨表查询建立 视图的方法
工作中很多时候都会遇到需要将两个不同的表空间甚至数据库的表进行联合查询或者建立视图的情况. 不同的表空间查询我们可以通过在将要查询的表前面加上 表空间的对应的用户名来实现,如有两个表空间分别对应两个用 ...
- Oracle数据库多表查询,子查询,集合运算
记得自己要敲o~~~ select * from bonus; select * from salgrade; from dual; --笛卡尔积:两张表的乘积 select * from emp,d ...
- ORACLE关于锁表查询的部分SQL
http://www.cnblogs.com/quanweiru/archive/2012/08/28/2660700.html --查询表空间名称和大小 SELECT UPPER (F.TABLES ...
随机推荐
- Java Web(转)
struts2+spring+hibernate 上传文件 关 键字: s2sh 上传文件 struts2 spring hibernate 前段时间,我用struts2.1.6.spring2.5. ...
- 标签data-*属性使用
<div class="page_index" style="margin-top:20px;"> <span id="showPa ...
- PHP关于依赖注入(控制反转)的解释和例子说明
PHP关于依赖注入(控制反转)的解释和例子说明 发表于2年前(2014-03-20 10:12) 阅读(726) | 评论(1) 8人收藏此文章, 我要收藏 赞2 阿里云双11绽放在即 1111 ...
- 前端文摘:Web 开发模式演变历史和趋势
今天的<前端文摘>给大家分享一篇玉伯的文章.文章详细介绍了 Web 开发的四种常用模式以及未来可能成为流行趋势的 Node 全栈开发模式,相信你看了以后一定会有收获. 您可能感兴趣的相关文 ...
- Git: untrack a file in local repo only and keep it in the remote repo
You could update your index: git update-index --assume-unchanged nbproject/project.properties and ma ...
- 使用所见即所得文本编辑器编辑文本存入数据库后通过ajax获取服务器json_encode的数据到前台,文本内容上边的html标签不解析
使用所见即所得文本编辑器编辑文本存入数据库后通过ajax获取服务器json_encode的数据到前台,文本内容上边的html标签不解析 因为我在前台使用了jquery的text()方法,而不是html ...
- rtl8723 2个 wlan
安装8723bs.ko模块之后,生成了wlan0和wlan1,MAC地址一样. http://blog.csdn.net/djman007/article/details/46731335 解决方法: ...
- 复制代理JOB
复制代理说明: 复制代理执行许多与复制有关的任务,其中包括创建架构和数据副本.检测发布服务器或订阅服务器上的更新以及在服务器之间传播更改. 默认情况下,复制代理在 Microsoft SQL Serv ...
- webstorm 代码自动换行
代码自动换行 菜单File→Settings→Editor→General
- spring1冲刺感想与总结
感想与体会: 通过团队合作的第一个sprint,我们知道如何在团队合作中做好自己,还有与队友不合时,如何和平处理问题.产品负责人是一个重要的的角色,他负责任务的安排,处理合作中意见不统一的问题.通过这 ...