SQL中的 left join,right join 和 inner join

阅读数:1417 发布时间:2016-06-24 11:54:05

作者:zzl005 标签: mysql 朱忠来005 数据库 后端课程 评测中心

left join

以左表为基准,返回左表中所有记录,以及右表中联结字段相等的记录。

抽象SQL 语句:

select * from A left join B on A.column_name = B.column_name;

其中 A 表作为左表,B 表作为右表,A 表所有记录都显示,B 表只会显示符合搜索条件的值(A.column_name = B.column_name),B 表记录不足的地方均为 Null

left join 示例:

示例SQL 语句:

select uid,cid,title from doc left join admin on doc.uid = admin.id;

doc表中的 uid 值有:
0,1,13,14

admin 表中的 id 值有:
1,7,10,11,12,13,14

mysql> select id from admin;
+----+
| id |
+----+
|  1 |
|  7 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
+----+

显示结果:

|  13 | 158 | 秀野堂后台系统新增评测中心模块(二)                                                                                          |
|  14 | 158 | 文档专题任务分解                                                                                                            |
|  14 | 158 | 李洋学习笔记-SUI组件库                                                                                                      |
|  14 | 158 | 聂文文学习笔记-Ubuntu命令                                                                                                   |
|  14 | 158 | 李洋学习笔记-Atom和Ubuntu                                                                                                   |
|  14 | 158 | 聂文文学习笔记-Ubuntu下sublime中文输入的问题                                                                                |
|  14 | 158 | 聂文文学习笔记-SUI快速入门                                                                                                  |
|  13 | 158 | 递归函数                                                                                                                    |
|  14 | 158 | 文档专题任务再思考                                                                                                          |
|  14 | 158 | 李洋学习笔记-SUI实战笔记                                                                                                    |
|   1 | 154 | 超大城市的思考                                                                                                              |
|   0 | 179 | CSS 注释语句                                                                                                                |
|   0 | 179 | CSS 的三种样式                                                                                                              |
|   0 | 179 | CSS选择器                                                                                                                   |
|   0 | 179 | 颜色                                                                                                                        |
|   0 | 178 | html标签                                                                                                                    |
|   0 | 179 | 水平居中                                                                                                                    |
|   0 | 179 | 垂直居中                                                                                                                    |
|   0 | 179 | 认识CSS样式                                                                                                                 |
|   0 | 192 | linux 命令                                                                                                                  |
|   0 | 179 | display 属性                                                                                                                |
+-----+-----+------------------------------------------+
263 rows in set (0.02 sec)

可以看到 doc 表 uid = 0 的记录也显示出来了

right join

与 left join 相反,以右表为基准,显示右表中的所有记录,左表只显示符合搜索条件的记录

right join 示例:

示例sql 语句:

select id,name from doc right join admin on doc.uid = admin.id;

显示结果只有106条记录:

+----+--------+
| id | name   |
+----+--------+
|  1 | gsh    |
|  1 | gsh    |
|  1 | gsh    |
|  1 | gsh    |
|  1 | gsh    |
|  1 | gsh    |
|  1 | gsh    |
|  1 | gsh    |
|  1 | gsh    |
...
...
| 14 | zzl005 |
| 14 | zzl005 |
| 14 | zzl005 |
| 14 | zzl005 |
| 14 | zzl005 |
| 14 | zzl005 |
| 14 | zzl005 |
| 14 | zzl005 |
| 14 | zzl005 |
| 14 | zzl005 |
| 14 | zzl005 |
| 14 | zzl005 |
| 14 | zzl005 |
+----+--------+
106 rows in set (0.00 sec)

inner join

抽象SQL 语句:

select * from A inner join B on A.column_name = B.column_name;

显示结果:

只显示符合 A.column_name = B.column_name;记录的值

inner join 示例:

示例sql 语句:

select uid,cid,title from doc inner join admin on doc.uid = admin.id;

显示结果只有102条:

|  14 | 158 | 秀野堂后台开发小记                                                              |
|  14 | 158 | Mysql 备份数据库                                                                |
|  14 | 158 | Linux 查看文件命令                                                              |
|  14 | 158 | 李洋学习笔记-Atom和Ubuntu快捷键                                                 |
|  14 | 158 | 文档专题任务分解                                                                |
|  14 | 158 | 李洋学习笔记-SUI组件库                                                          |
|  14 | 158 | 聂文文学习笔记-Ubuntu命令                                                       |
|  14 | 158 | 李洋学习笔记-Atom和Ubuntu                                                       |
|  14 | 158 | 聂文文学习笔记-Ubuntu下sublime中文输入的问题                                    |
|  14 | 158 | 聂文文学习笔记-SUI快速入门                                                      |
|  14 | 158 | 文档专题任务再思考                                                              |
|  14 | 158 | 李洋学习笔记-SUI实战笔记                                                        |
+-----+-----------------------------------------+
102 rows in set (0.33 sec)

相关文章推荐: