2021-11-08

有关navicat 的复杂查询中交叉连接、内连接和左外连接、右外连接

首先先创建两张表,让后对比下个查询之间的区别

CREATE TABLE student(
	stu_id INT(8) AUTO_INCREMENT NOT NULL PRIMARY KEY COMMENT '学生编号',
	stu_name VARCHAR(20) NOT NULL COMMENT '学生姓名',
	class_id INT(8) COMMENT '班级编号'
);

CREATE TABLE class(
	class_id INT(8) AUTO_INCREMENT NOT NULL PRIMARY KEY COMMENT '班级编号',
	class_name VARCHAR(20) NOT NULL COMMENT '班级名'
);
-- 再使用外键连接一下班级表
ALTER TABLE STUDENT
ADD CONSTRAINT fk_class_id FOREIGN KEY(class_id) REFERENCES class(class_id);

然后添加一点数据,想要看的有区别一点的话可以多搞点数据,如下图:
student表
在这里插入图片描述

class表

在这里插入图片描述

直接查询两表得出来这个错误数据的集合叫笛卡尔积
大部分都是表中不存在的数据,相当于是两张表的乘积得出来的临时表

SELECT stu_id,stu_name,class_name FROM student,class;

在这里插入图片描述

交叉连接(cross join on)

查询出相匹配得数据,没有匹配到则不显示

SELECT stu_id,stu_name,class_name FROM student
CROSS JOIN class ON student.class_id = class.class_id;

在这里插入图片描述

内连接(inner join on)

感觉和交叉连接差不多,也是查询出相匹配得数据,没有匹配到则不显示

SELECT stu_id,stu_name,class_name FROM student
INNER JOIN class ON student.class_id = class.class_id;

在这里插入图片描述

外连接

外连接分为左外连接和右外连接
左外连接:left outer join on,简写left join on
右外连接:right outer join on,简写right join on

一般都简写

左外连接(left join on)

取左边的表的全部,右边的表按条件

SELECT stu_id,stu_name,class_name FROM student
LEFT JOIN class ON student.class_id = class.class_id;

在这里插入图片描述

右外连接(right join on)

取右边的表的全部,左边的表按条件

SELECT stu_id,stu_name,class_name FROM student
RIGHT JOIN class ON student.class_id = class.class_id;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值