Oracle中的各种连接(内连接,左连接,右连接,笛卡尔连接...)

内连接:

  1. 等值连接:在连接条件中使用“=”运算符比较连接列的列值,查询结果中列出被连接表的所有列,包括其中的重复属性。
  2. 不等连接:在连接条件中使用除“=”运算符之外的比较运算符连接列的列值。如>、>=、<=、<、!>、!<和<>等运算符。
  3. 自然连接:当两个自然连接表中有相同的列,两个表中的列名相同,且对应数据类型完全相同,则这种列会作为连接属性进行连接,得到的结果中会去掉重复的属性。因此在表的设计时,如果多个表中的列含义相同,尽量使用相同的列名和一致的数据类型,方便进行自然连接。

外连接

  1. 左(外)连接:两个表进行左连接,符合连接条件的,将所有列连接起来,不符合连接条件的,保留左表的列,右表对应的列置为null。
  2. 右(外)连接:两个表进行右连接,符合连接条件的,将所有列连接起来,不符合连接条件的,保留右表的列,左表对应的列置为null。
  3. 全连接:左连接和右连接得到的值的合集。

笛卡尔(交叉)连接

交叉连接也称为笛卡尔连接,得到的结果时两个表进行笛卡尔运算的得到的数据。

自连接

自连接:将自身的那张表作为一个镜子表,自己和自己进行连接,可用来获得一些特殊的值,如公交车的路线。


示例语句

先建两张表(示例作用,忽略表的设计问题)

-- student表
create table student(
 sid number(10) primary key,
 sname varchar2(20),
 cname varchar2(10)
);
-- 加点数据进去
insert into student(sid,sname,cname) values(1,'宋江','水浒班');
insert into student(sid,sname,cname) values(2,'林冲','水浒班');
insert into student(sid,sname,cname) values(3,'刘备','三国班');
insert into student(sid,sname,cname) values(4,'张飞','三国班');
insert into student(sid,sname,cname) values(5,'关羽','三国班');
insert into student(sid,sname,cname) values(6,'唐僧','西游班');
-- class表
create table class(
cid number(10) primary key,
cname varchar2(10)
);
-- 加数据
insert into class(cid,cname) values(1,'水浒班');
insert into class(cid,cname) values(2,'三国班');
insert into class(cid,cname) values(3,'红楼班');

得到两张表如下
student表
student表

class表
class表

等值连接

select * from student inner join class on student.cname=class.cname;

等值连接
不等连接

select * from student inner join class on student.cname<>class.cname;

不等连接
自然连接

select * from student natural join class;

自然连接
左连接

select * from student left join class on student.cname=class.cname;

左连接
右连接

select * from student right join class on student.cname=class.cname;

右连接
全连接

select * from student full join class on student.cname=class.cname;

全连接
笛卡尔连接(交叉连接)

select * from student cross join class;

交叉连接

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值