准备连接查询所需要的表和数据:
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;
查询结果: