oracle 基础知识之 多表查询

多表查询定义:当查询的数据并不是来源一个表时,需要使用多表连接操作完成查询。多表连接查询通过表之间的关联字段,一次查询出多个表的数据。多表查询包括了等值连接、左连接、右连接、完全连接。
1.等值连接
等值连接也称为简单连接(simple joins)或者内连接(inner join)。通过等号来判断连接条件中的数据值是否相匹配,具体格式如下:
Select table1_name.fieldname,
table2_name.fieldname
from table1_name, table2_name
Where 条件句

【例1】建立雇员表,包括字段编号,姓名,岗位名称。建立职工薪水表包括职工号,姓名,工资。需要查询出编号,姓名,岗位名称,薪水信息。具体代码如下:
create table EMPLOYEE
( id_1 VARCHAR2(20),
name_1 VARCHAR2(25),
station VARCHAR2(20)
)
create table SALARY
(
id_2 VARCHAR2(20),
name_2 VARCHAR2(25),
salary NUMBER(8,2)
)
insert into employee values(‘1’,‘lily’,‘工程师’);
insert into employee values(‘3’,‘lucy’,‘项目经理’);
insert into employee values(‘5’,‘william’,‘人事经理’);
insert into employee values(‘6’,‘demon’,‘行政人员’);
insert into employee values(‘7’,‘david’,‘人事专员’);
Commit;
insert into salary values(‘1’,‘lily’,5000);
insert into salary values(‘2’,‘tom’,8000);
insert into salary values(‘3’,‘lucy’,5500);
insert into salary values(‘4’,‘linda’,3500);
insert into salary values(‘5’,‘william’,6000);
Commit;

select a.id_1,a.name_1,a.station,b.salary
from employee a,salary b
where a.id_1=b.id_2
–也可以使用关键字inner join
select a.id_1,a.name_1,a.station,b.salary
from employee a
inner join salary b
on a.id_1=b.id_2

查询结果如图3-7所示:
在这里插入图片描述

图使用内连接的查询结果

从查询结果上可以看出查询了雇员表,薪水表中编号相同的数据。

2.外连接
(1)左外连接:使用关键字 left join,以左表为准,返回左表的所有数据,右表满足关联条件的数据会全部显示,否则用 null 值去填充。
【例2】使用左连接查询出编号,姓名,岗位名称,薪水信息,代码如下:
select a.id_1,a.name_1,a.station,b.salary
from employee a
Left join salary b
on a.id_1=b.id_2 and a.name_1=b.name_2
查询结果如图3-8所示:

在这里插入图片描述

图3-8使用左连接的查询结果
该查询的主表是employee,查询记录数与employee 一致,职工号全部是employee 数据。
(2)右外连接:和左外连接相反。使用关键 right join,以右表为准,返回右表的所有数据,左表满足 on 条件的数据会全部显示,否则用 null 值去填充。
【例3-5】使用右连接查询出编号,姓名,岗位名称,薪水信息,代码如下:

select a.id_1,a.name_1,a.station,b.salary
from employee a
right join salary b
on a.id_1=b.id_2 and a.name_1=b.name_2
查询结果如图3-9下:

图3-9使用右连接的查询结果
(2)完全连接:通过关键字 full join 连接两张表,返回左表和右表的所有数据,并使用 null 值填充缺失的数据。
【例3-6】使用完全连接查询出编号,姓名,岗位名称,薪水信息,代码如下:
select a.id_1,a.name_1,b.id_2,b.name_2,a.station,b.salary
from employee a
full join salary b
on a.id_1=b.id_2 and a.name_1=b.name_2
查询结果如图3-10所示:
在这里插入图片描述

图3-10使用完全连接的查询结果
最后结果为 表A,表b的所有数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数字天下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值