连接查询的分类
本文讨论中用到的测试数据
“创建表的学生(int主键auto_increment
id,
名称varchar (10)
);
插入学生值
(null,“北京市”),
(null,“小明”),
(null,于宁波),
(null, xiaoliang);
创建表的分数(int主键auto_increment
id,
stu_id int not null,
分数小数(5,2)
);
插入得分值
(null, 1300 .45),
(null, 2400 .35点),
(null, 3500);“
内连接
内连接/加入
由于mysql默认是内连接,所以,加入等同于内连接
以两个表举例,内连接只返回在连接过程中有连接匹配的记录。也就是说,根据连接条件,两个表中都有对应的数据存在的记录,才会返回。
举例:
<代码>选择stu.id stu.name, s.score从学生一样stu内连接分数年代alt=" mysql连接查询(俗称连表查询)内连接,外连接,自然连接“>
如上图所示,由于小亮没有成绩,所以小刚没有出现在最终的结果中。
连接条件分析:
连接条件可以使用在使用
区别:在上连表查询中,任何情况下都可以使用,而且建议使用异地是在连表的过程中,根据上条件判断是否保留连表的结果。
使用是在连表查询的字段名一致时,可以使用。如使用(id)型条件中使用的字段,返回结果中只有一遍。
是在连表操作完成后,再根据在哪条件进行数据过滤。不建议使用,因为这样效率很低。
外连接
外连接查询时,允许另一方存在与之不匹配的数据。外连接的连接条件不可使用,须使用,或者使用其中的一种,其它都与内连接一致。
左外连接(左外连接/左连接):
左表为主表,即使右表没有与左表匹配的记录,也返回左表的记录。而右表与左表不匹配的记录将被忽略。
举例:
<代码> select * from学生stu离开加入分数在斯图。id=s.stu_id; 代码>
结果如下:
+——+ + - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - +
| | id名称| id | stu_id |积分|
+——+ + - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - +
| 1 |萧红| 1 | 1 | 300.45 |
| 2 |小明| 2 | 2 | 400.35 |
| 3 |于宁波| 3 | 3 | 500.00 |
| 4 | xiaoliang零零零| | | |
+——+ + - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - +
右外连接(右外连接/右连接):
右表为主表,即使左表没有与之匹配的记录,也返回右表的记录。
举例:
<代码> select *从分数一样年代对加入学生stu s.stu_id=stu.id; 代码>
+ - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
| | id stu_id |积分| id |名称|
+ - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
| 1 | 1 | 300.45 | 1 |萧红|
| 2 | 2 | 400.35 | 2 |小明|
| 3 | 3 | 500.00 | 3 |于宁波|
零零零| | | | 4 | xiaoliang |
+ - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
全外连接(完整的加入):mysql暂不支持,可以用联盟模拟实现。
自然连接
自然加入(同加入)
自然左连接(同左连接)
自然权利加入(同右加入)
自然连接会自动判断,以两个表中相同的字段为连接条件,返回查询结果。
注意:内连接不写连接条件会出现笛卡尔积的结果,应该避免这种情况,而外连接不写连接条件会报错