我们先建立两个表插入一些Demo数据
----student=(sno,sname) 学号,姓名
insert into student(sno,sname) values('2005001','小施');
insert into student(sno,sname) values('2005002','小王');
insert into student(sno,sname) values('2005003','小张');
insert into student(sno,sname) values('2005004','小贾');
----stu_score=(sno,scrore) 学号,分数
insert into stu_score(sno,scrore) values('2005001',90.00);
insert into stu_score(sno,scrore) values('2005002',95.00);
insert into stu_score(sno,scrore) values('2005008',80.50);
insert into stu_score(sno,scrore) values('2005009',88.50);
(一) 内连接
内连接,inner join,join 查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的
列值。
----假设a表有M条记录,b表有N条记录,a和b表sno相同的记录有K条
----内连接(数据量=K)
select a.*,b.* from student a join stu_score b on a.sno=b.sno;
select a.*,b.* from student a inner join stu_score b on a.sno=b.sno;
外连接,返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左
外连接或左连接))、右表(右外连接或右连接)或两个边接表(全外连接)中的所有数据行
(二) 外连接 (左连接、右连接)
左连接或left join,left outer join 返回包括左表中的所有记录和右表中联接字段相等的记录
右连接或right join ,right outer join 返回包括右表中的所有记录和由表中联接字段相等的记录
----左连接/左外连接(数据量=M)
select a.*,b.* from student a left join stu_score b on a.sno=b.sno;
select a.*,b.* from student a left outer join stu_score b on a.sno=b.sno;
----右连接/右外连接(数据量=N)
select a.*,b.* from student a right join stu_score b on a.sno=b.sno;
select a.*,b.* from student a right outer join stu_score b on a.sno=b.sno;
(三) 完全连接()
定义:在内连接的基础上,还包含两个表中所有不符合条件的数据行,并在其中的左表、和右表列填写NULL
关键字:FULL JOIN
----完全连接(数据量=M+N-K)
select a.*,b.* from student a full join stu_score b on a.sno=b.sno;
(四) 交叉连接
定义:将两个表的所有行进行组合,连接后的行数为两个表的乘积数。(笛卡尔积)
关键词:CROSS JOIN
格式:FROM 表名1 CROSS JOIN 表名2
----交叉连接(数据量=M*N)
select a.*,b.* from student a cross join stu_score b ;