MySQL连接查询

 

需求1:查询出所有的学生,而且要求显示学生所在的班级信息

 

连接查询的概念:

将多张表(可以大于2张表)进行记录的查询(按照某个指定的条件进进行字段的拼接),查询的结果是:记录数有可能变化,但是字段数是一定会增加的(至少是两张表的合并)

连接查询的意义:

在用户查看数据的时候,需要显示的数据来自多张表 ,那么我们这个时候就可以使用连接查询数据的整合。

连接查询的分类:

内连接、外连接、自然连接、交叉连接

连接查询的使用:左表join右表

左表:在关键字join左边的表

右表:在关键字join右边的表

 

交叉连接:

概念:

cross join ,从一张表中循环取出每一条记录,每条记录都去另外一张表进行匹配,匹配一定保留(没有条件匹配),而本身字段就会增加(保留),最终形成的结果叫做 笛卡儿积

基本语法:

左表 cross join 右表; 这条语句实际上等价于 from 左表,右表;

这样是很容易产生笛卡儿积,应该尽量避免,交叉连接的价值就是保证这种连接的完整性。

 

内连接

概念:

[inner] join,从左表中取出每一条记录,去右表中与所有的记录进行匹配:匹配必须是某个条件在左表与右表中相同最终才保留结果,否则就不保留结果。

基本语法:

左表[inner] join右表 on 左表.字段 = 右表.字段; on表示连接条件:条件字段就代表相同的业务含义(my_id.c_id 和my_class.c_id);

MySQL 内连接查询 多条件_外连接

 

外连接

概念:

我们叫做outer join 但是实际上没有outer关键字,以某张表为主,取出里面所有的记录,然后每条与另外一张表进行连接,不管能不能匹配上条件,最终结果都会保留:能匹配的话,就会正确保留,不能匹配的话,就会其他表的字段都置为空。

外连接分类:

是以某张表为主:有主表

Left join 左外连接(左连接),以左表为主

Right join 右外连接(右连接),以右表为主

基本语法:

左表left/right 右表 on 左表.字段 = 右表.字段;

MySQL 内连接查询 多条件_连接查询_02

显然左连接和右连接是有差异的,但是现实的结果永远是左表的数据在左边,右表的数据在右边。左连接和右连接可以互相转化。

 

自然连接

概念:

natural join 就是自动匹配条件:系统以字段命名作为匹配模式(通字段名就作为条件,多个同名字段都作为为条件),自然连接自动使用同名字段作为连接条件,连接之后会自动合并同名字段。

自然连接的分类:

自然内连接与自然外连接。

自然内连接:

左表 natural join 右表;

MySQL 内连接查询 多条件_连接查询_03

 

自然外连接:

左表 natural left/right join 右表;

MySQL 内连接查询 多条件_连接查询_04

注意:在实际应用中实际上很少使用自然连接,因为除非我们能够偶保证严格的字段命名才能够使自然连接派上用场,但是我们很少能够设计出很严格的表。

其实,内连接和外连接都能模拟自然连接,模拟同名字段,合并字段。基本语法为:

左表 inner/left/right join 右表 using (字段名); 这样我们就可以使用同名字段作为连接条件,而且能够自动合并同名字段。

MySQL 内连接查询 多条件_MySQL 内连接查询 多条件_05