MySQL 交叉连接、内连接、外连接的使用

准备连接查询所需要的表和数据:

drop table if exists class;
drop table if exists student;

CREATE TABLE class(
  cid int (4) NOT NULL PRIMARY KEY, 
  cname varchar(20)
);

-- 创建学生表
CREATE TABLE student (
  sid int (4) NOT NULL PRIMARY KEY, 
  sname varchar (20), 
  sage int (2), 
  classid int (4) NOT NULL
);


-- 向班级表插入数据
INSERT INTO class VALUES(101,'MySQL');
INSERT INTO class VALUES(102,'C');
INSERT INTO class VALUES(103,'Python');
INSERT INTO class VALUES(104,'GO');

-- 向学生表插入数据
INSERT INTO student VALUES(1,'康康',20,101);
INSERT INTO student VALUES(2,'阿嘉',21,102);
INSERT INTO student VALUES(3,'毛毛',24,105);

交叉连接

交叉连接基于数学上的笛卡尔积,两个表之间使用交叉连接的方式进行查询,则数据按照笛卡尔积的运算方式进行组合

交叉连接语法:select * from 表1 cross join 表2
使用交叉连接进行查询:

select class.cname, student.sname from student cross join class on class.cid = student.classid;

其中的on代表两个表的连接条件

内连接

语法:select 查询字段 from 表1 [inner] join 表2 on 条件表达式
eg:

select class.cname, student.sname from student inner join class on class.cid = student.classid;

查询结果:
在这里插入图片描述

外连接

外连接分为三种:左外连接、右外连接、全外连接
对应SQL语句的关键字为:LEFT\RIGHT\FULL [OUTER] JOIN

左外连接

左外连接查询返回两表满足查询条件的行和左边表不满足条件的行
语法:select 查询字段 from 表1 left [outer] join 表2 on 条件表达式
eg:

select c.cname, s.sname from class c left join student s on s.classid = c.cid;

查询结果:
在这里插入图片描述

右外连接

相对的,右外连接查询返回两表满足查询条件的行和右边表不满足条件的行
语法:select 查询字段 from 表1 right [outer] join 表2 on 条件表达式
eg:

select c.cname, s.sname from class c right join student s on s.classid = c.cid;

查询结果:
在这里插入图片描述

全外连接

全外连接两表都不作条件限制,所有记录都会显示,不足的地方用null值填充。
语法:select * from 表1 full join 表2
eg:

select * from class full join student;

查询结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值