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

内连接

  • 两张或多张表中同时符合某种条件的数据记录组合
  • 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显示出来,左表没匹配到的都不显示。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值