千家信息网

SQL语句left join、right join、inner join的区别浅析

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容介绍了"SQL语句left join、right join、inner join的区别浅析"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理
千家信息网最后更新 2025年11月07日SQL语句left join、right join、inner join的区别浅析

本篇内容介绍了"SQL语句left join、right join、inner join的区别浅析"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

今天和某朋友聊天,谈到他们公司的一个小问题。如下:

表A设备表,存储MAC地址,省份,城市,区。
表B软件表,存储MAC地址,软件名字。
功能是可以按省份,城市,或者区来查询软件列表。

你猜它现在如何做的?

它通过省份,城市,或者区取得MAC地址,然后查询B表用in查询。
这个很明显是不合理的,处理这种多对多的关系,为什么不用多表联查呢?
链表的方法常用的有3个: (inner) join 内部等值连接、left join 左连接 和 right join右连接。

有什么区别呢?怎么用呢? 下面是copy的一篇文章:

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

举例如下:

表A记录如下:

复制代码 代码如下:


aID     aNum

1     a20050111

2     a20050112

3     a20050113

4     a20050114

5     a20050115

表B记录如下:

复制代码 代码如下:


bID     bName

1     2006032401

2     2006032402

3     2006032403

4     2006032404

8     2006032408

1.left join

sql语句如下:

复制代码 代码如下:


select * from A left join B on A.aID = B.bID


结果如下:

复制代码 代码如下:


aID     aNum     bID     bName

1     a20050111    1     2006032401

2     a20050112    2     2006032402

3     a20050113    3     2006032403

4     a20050114    4     2006032404

5     a20050115    NULL     NULL

(所影响的行数为 5 行)

结果说明:

left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.

换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).

B表记录不足的地方均为NULL.

2.right join

sql语句如下:

复制代码 代码如下:


select * from A right join B on A.aID = B.bID


结果如下:

复制代码 代码如下:


aID     aNum     bID     bName

1     a20050111    1     2006032401

2     a20050112    2     2006032402

3     a20050113    3     2006032403

4     a20050114    4     2006032404

NULL     NULL     8     2006032408

(所影响的行数为 5 行)

结果说明:

仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.

3.inner join

sql语句如下:

复制代码 代码如下:


select * from A innerjoin B on A.aID = B.bID


结果如下:

复制代码 代码如下:


aID     aNum     bID     bName

1     a20050111    1     2006032401

2     a20050112    2     2006032402

3     a20050113    3     2006032403

4     a20050114    4     2006032404

结果说明:

很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.

注:

LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。

语法:SELECT FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2

说明:

table1, table2参数用于指定要将记录组合的表的名称。

field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。

compopr参数指定关系比较运算符:"=", "<", ">", "<=>=" 或 "<>"。

如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误.

所以,依我的理解,sql应该这么写:

select 软件 from 软件表 inner join 设备表 on 软件表.mac=设备表.mac where 设备表.pro = 'xxx' and 设备表.city = 'xxx';

"SQL语句left join、right join、inner join的区别浅析"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

代码 结果 字段 软件 语句 数据 设备 类型 相同 参数 名称 地址 城市 基础 省份 中联 查询 明显 两个 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 在数据库中如何查询所有字段 盐城网络安全准入控制系统价格 数据库保护包含数据的安全性 勒流网络安全设备 数据库设计优化准则 数据分析软件服务器要多大 服务器网络模块的工作原理 数据库删除相同行信息 枣庄商城软件开发外包公司 iris数据库是什么类型 网络安全有哪些职业 风电场网络安全指哪些设备 企业网络安全方向 怎么能免费开我的世界服务器 一图看懂网络安全法图片 安庆门店管理软件开发定制 决战数据库修改教程 生产环境如何备份数据库 正版重庆联通服务器托管云空间 软件开发的整个过程 网络安全心理危机 肇庆信息软件开发报价 兵团网络安全检查三审三校 xftp远程服务器连接工具 vb向数据库添加数据 甲骨文软件开发 黄浦区信息软件开发采购 网银助手下载提示服务器没响应 梦幻手游好运来服务器 手机怎样找回网络安全密钥
0