有关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;