数据库的联合查询的内连接和外连接区别

内连接和外连接的语法:

联合查询就是将两张表,通过笛卡尔积排列组合成一张新表,在这张新表中通过where条件来查询所需要的数据,语法为

select * from (表名),(表名) where 条件 ;

                或者

select * from (表名)(left/right)join (表名)on 条件;

这两种写法分别是内连接和外连接的写法

第一种写法 中(表名),(表名) 表示在将两张表进行笛卡尔积生成一张临时表,然后再在where条件下在临时表中 找出符合条件的数据,

第二钟写法 中 (表名)join(表名)on 条件 表示两张表进行笛卡尔积,并且找出在满足on后面条件下的数据,我的理解是

(表名)(left/right)join (表名)代表两张表进行笛卡尔积,on代替了第一种写法中的where

left和join代表进行条件查询输出最后结果时,会尽可能的把左边(left)(右边(right))的表展示出来

内连接和外连接的差别

情形:游戏公司数据库中有两张表,一张为游戏账号表,分别有列:游戏账号,密码,游戏id;

drop table if exists account;
create table account(id int,ikey int,name varchar(20));

一张为为 游戏装备表 ,有列:装备名称,装备归属账号;

drop table if exists equipment;
create table equipment(name varchar(20),account_id int);

测试用例:

insert into account values(001,123,"王德发");
insert into account values(002,123,"周德快");
insert into account values(003,123,"振德刁");
insert into equipment values("屠龙刀",001);
insert into equipment values("麻痹戒指",001);
insert into equipment values("毒刀",001);
insert into equipment values("饮血剑",002);
insert into equipment values("沙漏",002);
insert into equipment values("无尽",002);
insert into equipment values("法爆",002);
insert into equipment values("羊刀",002);
insert into equipment values("龙牙",002);

当用内连接要查询每个游戏账号有哪些装备时

select *from equipment,account where equipment.account_id=account.id;

我们发现最后查出来的只有王德发和周德快的数据,没有振德刁的数据

这是因为振德刁在游戏内没有装备,所以使用内连接查询装备时,无法查询到振德刁

使用外连接

 select * from equipment right join account on account.id =equipment.account_id;

此时使用了right外连接 ,会展示join右边的表account的全部数据

 如果左表没有完全与右表对应的列,则会用null替代,直到右表完全展示完毕

综上所述 ,内外连接有两个主要区别

1.写法区别

内连接用from 表名,表名 where 条件

外连接用 表名 (left/right)join 表名 on 条件 

2.打印区别

外连接用left和right来控制尽可能展现哪个表

当两个表在指定的条件下能满足每一行数据都在另一个表中有数据对应,则内外连接的打印没有区别,但是当某个表中某一行数据在该条件下,在另一个表中没有指定的数据,外连接接可以通过left和right来强制展现出未展示的数据行

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值