咱们先创建两个表插入一些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 ;