welcome to 煌sir详解Oracle 篇章,让我们继续一起学习吧~~
查询--连接查询
一. 基础语法
笛卡尔积:两个表乘积,所有的数据最大集(开发无用)
select * from A , B;
内连接
-
隐式内连接
select * from A , B where a.id = b.aid;
- 显示内连接
select * from A
inner join B on a.id = b.aid;
- 外链接
- 左外连接:查询左表(A)所有数据,如果条件成立显示右边(B)的数据,否则显示null
select * from A
left outer join B on a.id = b.aid
- 右外连接:查询右表(B)所有数据,如果条件成立显示左边(A)的数据,否则显示null
select * from A
right outer join B on a.id = b.aid
三:内连接查询实用:
--1查询显示业主编号,业主名称,业主类型名称
--隐式内连接
select ow.id 业主编号,ow.name 业主名称,ot.name 业主类型名称 from t_owners ow,t_ownertype ot
where ow.ownertypeid=ot.id ;
--显示内连接
select ow.id 业主编号,ow.name 业主名称,ot.name 业主类型名称 from t_owners ow
inner join t_ownertype ot on ow.ownertypeid = ot.id ;
--2查询显示业主编号,业主名称、地址和业主类型
--隐式内连接
select ow.id as 编号,ow.name as 业主名称,a.name as 地址名称,ot.name as 业主类型名称
from t_owners ow,t_ownertype ot ,t_address a
where ow.ownertypeid=ot.id and ow.addressid=a.id;
--显示内连接
select ow.id as 编号,ow.name as 业主名称,a.name as 地址名称,ot.name as 业主类型名称
from t_owners ow inner join t_address a on ow.addressid=a.id
inner join t_ownertype ot on ow.ownertypeid=ot.id;
--3查询显示业主编号、业主名称、地址、所属区域、业主分类
--隐式内连接
select ow.id 业主编号,ow.name 业主名称,a.name 地址,ar.name 所属区域,ot.name 业主分类
from t_owners ow,t_ownertype ot, t_address a, t_area ar
where ow.ownertypeid=ot.id and ow.addressid=a.id and a.areaid=ar.id ;
--显示内连接
select ow.id 业主编号,ow.name 业主名称,a.name 地址,ar.name 所属区域,ot.name 业主分类
from t_owners ow inner join t_ownertype ot on ow.ownertypeid=ot.id
inner join t_address a on ow.addressid=a.id
inner join t_area ar on a.areaid=ar.id;
--4查询显示业主编号、业主名称、地址、所属区域、收费员、业主分类
--隐式内连接
select ow.id 业主编号,ow.name 业主名称,ad.name 地址,ar.name 所属区域, op.name 收费员,ot.name 业主分类
from t_owners ow ,t_address ad,t_area ar ,t_operator op ,t_ownertype ot
where ow.addressid=ad.id and ad.areaid=ar.id and ad.operatorid=op.id and ow.ownertypeid=ot.id ;
--显示内连接
select ow.id 业主编号,ow.name 业主名称,ad.name 地址,ar.name 所属区域, op.name 收费员,ot.name 业主分类
from t_owners ow inner join t_address ad on ow.addressid=ad.id
inner join t_area ar on ad.areaid=ar.id
inner join t_operator op on ad.operatorid=op.id
inner join t_ownertype ot on ow.ownertypeid=ot.id order by ow.id asc;
四. 左外连接
--需求:查询业主的账务记录,显示业主编号、名称、年、月、金额。如果此业主没有账务记录也要列出姓名。
select ow.id 业主编号,ow.name 名称,ac.year 年,ac.month 月,ac.money 金额
from t_owners ow left outer join t_account ac
on ow.id=ac.ownerid;
select ow.id 业主编号,ow.name 名称,ac.year 年,ac.month 月,ac.money 金额
from t_owners ow left join t_account ac on ow.id=ac.ownerid;
Oracle 左外连接特殊用法(右边用+)
在内连接基础上,使用(+) 转换 左外连接
--oracle 左外连接 特殊用法:
select ow.id 业主编号,ow.name 名称,ac.year 年,ac.month 月,ac.money 金额 from t_owners ow, t_account ac where ow.id=ac.ownerid(+);
五.右外连接查询
--需求:查询业主的账务记录,显示业主编号、名称、年、月、金额。如果账务记录没有对应的业主信息,也要列出记录
select ow.id 业主编号,ow.name 名称,ac.year 年,ac.month 月,ac.money 金额 from t_owners ow right join t_account ac on ow.id=ac.ownerid;
Oracle 右外连接特殊用法(左边用+)
--oracle特殊语法
select ow.id 业主编号,ow.name 名称,ac.year 年,ac.month 月,ac.money 金额 from t_owners ow ,t_account ac where ow.id(+) =ac.ownerid;
小结:
内连接:
-
隐式内连接
-
select * from 表1, 表2, .... where 表1.字段 = 表2.字段 and 连接条件
- 显示内连接
select * from 表1
inner join 表2 on 表1.字段 = 表2.字段
inner join 表3 on 连接条件
.....
- 外链接
-
左外连接:查询左表(表1)的所有数据,条件成立显示右表(表2)数据,条件不成立显示null
select * from 表1
left outer join 表2 on 表1.字段 = 表2.字段
....
-
右外连接:查询右表(表2)的所有数据,条件成立显示左表(表1)数据,条件不成立显示null
select * from 表1
right outer join 表2 on 表1.字段 = 表2.字段
....
- Oracle 外链接,将隐式内连接转换成对应外链接 (了解)
左外连接:
select * from 表1, 表2
where 表1.字段 = 表2.字段(+)
右外连接:
select * from 表1, 表2
where 表1.字段(+) = 表2.字段
看完恭喜你,又知道了一点点!!!
你知道的越多,不知道的越多!
~感谢志同道合的你阅读, 你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!
来源:oschina
链接:https://my.oschina.net/ithuang/blog/4293012