MySQL进阶查询(内连接、左连接和右连接)案例兼注解

it2025-01-17  44

连接分类

内连接左连接右连接

内连接

两张或多张表中同时符合某种条件的数据记录组合from子句中使用inner join关键字连接多张表,并使用on设置连接条件是系统默认的表连接方式,可以省略inner关键字多表支持连续使用inner join,建议不超过三个表语法结构 select 字段1,字段2… from 表1 inner join 表2 on 表1.字段1=表2.字段1;

表1:info

mysql> select * from info; +----+---------+-------+-------+------+ | id | name | score | hobby | addr | +----+---------+-------+-------+------+ | 1 | zhansan | 66.00 | 1 | nj | | 2 | lisi | 68.00 | 2 | nj | | 3 | wangwu | 74.00 | 3 | nj | | 4 | zhaoliu | 54.00 | 4 | NULL | | 5 | xiaoqi | 99.00 | 2 | nj | | 10 | T1 | 58.00 | 2 | | | 11 | owooo | 55.00 | 1 | | | 12 | owo | 55.00 | 1 | | | 13 | yowooo | 58.00 | 1 | | | 14 | yowo | 65.00 | 1 | | +----+---------+-------+-------+------+

表2:num

mysql> select * from num; +------+ | id | +------+ | 1 | | 2 | | 4 | | 8 | +------+

表3:Hob

mysql> select * from Hob; +----+-----------+ | id | hob_name | +----+-----------+ | 1 | 吃饭 | | 2 | 睡觉 | | 3 | 打豆豆 | +----+-----------+

相同条件连接:

mysql> select info.id,info.name from info inner join num on info.id=num.id; +----+---------+ | id | name | +----+---------+ | 1 | zhansan | | 2 | lisi | | 4 | zhaoliu | +----+---------+

内连接:

mysql> select info.id,info.name,Hob.hob_name from info inner join Hob on info.hobby=Hob.id; +----+---------+-----------+ | id | name | hob_name | +----+---------+-----------+ | 1 | zhansan | 吃饭 | | 2 | lisi | 睡觉 | | 3 | wangwu | 打豆豆 | | 5 | xiaoqi | 睡觉 | | 10 | T1 | 睡觉 | | 11 | owooo | 吃饭 | | 12 | owo | 吃饭 | | 13 | yowooo | 吃饭 | | 14 | yowo | 吃饭 | +----+---------+-----------+

附加: 写在前面的是主表,后面的是从表。 inner join左边的是左表,右边的是右表。

左连接

也被称为左外连接在from子句中使用left join关键字来表示匹配左表中所有行及右表中符合条件的行实现原理

语法结构: select 字段1,字段2… from 表1 left join 表2 on 表1.字段1=表2.字段1;

mysql> select info.id,info.name,Hob.hob_name from info left join Hob on info.hobby=Hob.id; +----+---------+-----------+ | id | name | hob_name | +----+---------+-----------+ | 1 | zhansan | 吃饭 | | 11 | owooo | 吃饭 | | 12 | owo | 吃饭 | | 13 | yowooo | 吃饭 | | 14 | yowo | 吃饭 | | 2 | lisi | 睡觉 | | 5 | xiaoqi | 睡觉 | | 10 | T1 | 睡觉 | | 3 | wangwu | 打豆豆 | | 4 | zhaoliu | NULL | +----+---------+-----------+

附加: 左连接就是以左表为主表,都显示出来,没有匹配到的都有null显示出来,右表没匹配到的都不显示。

右连接

也被称为右外连接在from子句中使用right join关键字来表示匹配右表中所有行及左表中符合条件的行实现原理

语法结构: select 字段1,字段2… from 表1 right join 表2 on 表1.字段1=表2.字段1;

mysql> select info.id,info.name,Hob.hob_name from info right join Hob on info.hobby=Hob.id; +------+---------+-----------+ | id | name | hob_name | +------+---------+-----------+ | 1 | zhansan | 吃饭 | | 2 | lisi | 睡觉 | | 3 | wangwu | 打豆豆 | | 5 | xiaoqi | 睡觉 | | 10 | T1 | 睡觉 | | 11 | owooo | 吃饭 | | 12 | owo | 吃饭 | | 13 | yowooo | 吃饭 | | 14 | yowo | 吃饭 | +------+---------+-----------+

附加: 右连接就是以右表为主表,都显示出来,没有匹配到的都有null显示出来,左表没匹配到的都不显示。

最新回复(0)