外键和内外左右连接的基础知识(二)

2014-11-24 15:37:59 · 作者: · 浏览: 1
连接右连接
内连接:把两个表中数据对应的数据查出来
外连接:以某个表为基础把对应数据查出来
全连接是以多个表为基础
首先插入如下测试数据:
1
insert into student(sno,sname) values('2005001','小施');
2
insert into student(sno,sname) values('2005002','小王');
3
insert into student(sno,sname) values('2005003','小张');
4
insert into student(sno,sname) values('2005004','小贾');
5
insert into stu_score(sno,scrore) values('2005001',90.00);
6
insert into stu_score(sno,scrore) values('2005002',95.00);
7
insert into stu_score(sno,scrore) values('2005008',80.50);
8
insert into stu_score(sno,scrore) values('2005009',88.50);

(一) 内连接
  内连接,inner join,join 查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的
列值。
----假设a表有M条记录,b表有N条记录,a和b表sno相同的记录有K条
----内连接(数据量=K)

1
select a.*,b.* from student a join stu_score b on a.sno=b.sno;
2
select a.*,b.* from student a inner join stu_score b on a.sno=b.sno;
查询结果如下:

2005001 小施 2005001 90
2005002 小王 2005002 95

(二) 外连接 (左连接、右连接) 
左连接或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;

查询结果如下:

2005001 小施 2005001 90
2005002 小王 2005002 95
2005003 小张 
2005004 小贾

----右连接/右外连接(数据量=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;

查询结果如下:

2005001 小施 2005001 90
2005002 小王 2005002 95
2005008 80.5
2005009 88.5

(三) 完全连接()
定义:在内连接的基础上,还包含两个表中所有不符合条件的数据行,并在其中的左表、和右表列填写NULL
关键字:FULL JOIN
----完全连接(数据量=M+N-K)
select a.*,b.* from student a full join stu_score b on a.sno=b.sno;

查询的时候 mysql是不支持的
(四) 交叉连接
定义:将两个表的所有行进行组合,连接后的行数为两个表的乘积数。(笛卡尔积)
关键词:CROSS JOIN
格式:FROM 表名1 CROSS JOIN 表名2 
----交叉连接(数据量=M*N)
select a.*,b.* from student a cross join stu_score b ;

查询结果如下:
2005001 小施 2005001 90
2005002 小王 2005001 90
2005003 小张 2005001 90
2005004 小贾 2005001 90
2005001 小施 2005002 95
2005002 小王 2005002 95
2005003 小张 2005002 95
2005004 小贾 2005002 95
2005001 小施 2005008 80.5
2005002 小王 2005008 80.5
2005003 小张 2005008 80.5
2005004 小贾 2005008 80.5
2005001 小施 2005009 88.5
2005002 小王 2005009 88.5
2005003 小张 2005009 88.5
2005004 小贾 2005009 88.5