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