表连接+内连接+等值连接+不等值连接+自然连接+using+外连接+ 左外连接+右外连接+全连接+自连接+交叉连接

表连接
from tableName1 join_type tableName2 【 on (join_condition)】
【join_type tableNameN on join_condition …..】
tableName1:表1
tableName2:表2
join_type :连接类型,有inner join(内连接),outer join(外连接),cross join(交叉连接)
join_condition:连接条件,可以是使用多组join_type tableNameN on join_condition ….来实现多个表连接.

内连接
inner join 、join
1. 等值连接
简单说明就是:表之间用=连接
1)select …from A,B where A.no=B.no
2)select …from A inner join B on A.no=B.no where…
这里写图片描述

2. 不等值连接
where 或者on 后面 列比较不是用=,而是用一下这些
<>,>,<,>=,<=,like,in,between on,not 等等
这里写图片描述
3. 自然连接
两表的同名列(一个或多个)进行连接
select ….from A natural join B
注意:上面sql语句实际上还默认包含a.同名列=b.同名列
同名列:列名和数据类型都相同的字段
这里写图片描述

using基于两表有同名列
select ….from A join B using(同名列【同名列,……】)
注意:
1上面using(同名列)等价于a.同名列=b.同名列
2同名列:列名和数据类型都相同的字段
3查询必须是等值连接.
4在select字句或者using字句中都不能为同名列指定表名或别名
5如果对多个表进行检索,必须使用多次using例如
select …from tb1 inner join tb2 using(同名列1)
inner join tb3 using(同名列2)
…….

这里写图片描述
外连接
用于检索一个表的所有记录和另外一个表的匹配行
关键字outer join,
+:外连接:要放缺少相应信息的那一边

这里写图片描述

2. 左外连接
select ….from A left [outer] join B on…
左边的所有表纪录与右边表的纪录进行匹配,最后返回左边表所有记录+右边表匹配纪录的表数据。

步骤:两表先匹配已有的,在加上左边剩下未匹配的,右边没有匹配到的加null补充.
举例

这里写图片描述

这里写图片描述

3. 右外连接
select ….from A right[outer] join B on…
右边的所有表纪录与左边表的纪录进行匹配,最后返回右边表所有记录+左边表匹配纪录的表数据。
这里写图片描述
4. 全连接
select ….from A full[outer] join B on..
这里写图片描述

右边的所有表纪录与左边所有表纪录进行匹配,最后返回右边表所有记录+左边表所有表纪录的表数据。

自连接(连接同一表的行)

交叉连接

select …..
from tb1 cross join tb2
where …….
实现2个表的交叉连接,所得的结果是这2个表各行数据的组合,即这2个表的笛卡尔积。

交叉连接与普通连接的不同点
1不同的地方在于from字句多个表之间不是用逗号,而是用cross join关键字
2交叉连接不使用on限定连接条件
其他都与简单连接一样。

create table class(
cno varchar2(10) primary key,
cname varchar2(20),
cnum number(2)
);

insert into class values(‘1’,’一班’,55);
insert into class values(‘2’,’二班’,45);

create table student2(
sno varchar2(10) primary key,
sname varchar2(20),
sage number(2),
cno varchar2(2),
constraint fk_sno foreign key(cno) references class(cno) on delete cascade
);

insert into student2 values(‘1’,’lili’,18,’1’);
insert into student2 values(‘2’,’lili’,18,’1’);
insert into student2 values(‘3’,’lili’,18,’1’);
insert into student2 values(‘4’,’lili’,20,’1’);
insert into student2 values(‘5’,’lili’,21,’1’);

select c.cno,s.sno,s.sname
from student2 s cross join class c;
这里写图片描述

class表2条数据,student2表纪录,交叉连接10条纪录(2*5)
过程
class 第一条纪录与student2表组合
class 第二条纪录与student2表组合

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值