位置: 编程技术 - 正文

数据库Left join , Right Join, Inner Join 的相关内容,非常实用(数据库left joins)

编辑:rootadmin

一.先看一些最简单的例子

例子

Table Aaid adate 1 a1 2 a2 3 a3

TableB

bid bdate 1 b1 2 b2 4 b4 两个表a,b相连接,要取出id相同的字段 select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据. 此时的取出的是: 1 a1 b1 2 a2 b2

那么left join 指: select * from a left join b on a.aid = b.bid 首先取出a表中所有数据,然后再加上与a,b匹配的的数据 此时的取出的是: 1 a1 b1 2 a2 b2 3 a3 空字符

同样的也有right join 指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据 此时的取出的是: 1 a1 b1 2 a2 b2 4 空字符 b4

LEFT JOIN 或 LEFT OUTER JOIN。 左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值

二. left join/right join/inner join操作演示

表A记录如下:aID aNum1 a a a a a

表B记录如下:bID bName1

实验如下:1. left joinsql语句如下: SELECT * FROM ALEFT JOIN B ON A.aID = B.bID结果如下:aID aNum bID bName1 a 1 a 2 a 3 a 4 a NULL NULL(所影响的行数为 5 行)

结果说明: left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).B表记录不足的地方均为NULL.

2. right joinsql语句如下: SELECT * FROM ARIGHT JOIN B ON A.aID = B.bID结果如下:aID aNum bID bName1 a 1 a 2 a 3 a 4 NULL NULL 8 (所影响的行数为 5 行)

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

3.inner joinsql语句如下: SELECT * FROM AINNERJOIN B ON A.aID = B.bID结果如下:aID aNum bID bName1 a 1 a 2 a 3 a 4

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

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

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

说明:① table1, table2参数用于指定要将记录组合的表的名称。② field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。③ compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。④ 如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误。

三.相关的复杂的解释和实例

简介: 外部连接和自联接 inner join(等值连接) 只返回两个表中联结字段相等的行 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 on 指定表间联结字段及其关系的等号 "=" 表达式, 返回 true 或 false. 当表达式返回 true 时, 则查询中包含该记录. ! 外部连接只能操作已存在于数据库中的数据update (ctarticle as a left join ctclass as c on a.classid = c.classid) left join cttag as b on a.articleid = b.articleid set tag=tag+' ', b.articleid=a.articleid, b.classid=a.classid, b.nclassid=a.nclassid where a.classid= and a.nclassid=0 and tagid is not null

update (ctarticle as a left join (ctnclass as c left join ctclass as d on c.classid = d.classid) on a.nclassid = c.nclassid and a.classid = c.classid) left join cttag as b on a.articleid = b.articleid set tag=d.class+' '+c.nclass, b.articleid=a.articleid, b.classid=a.classid, b.nclassid=a.nclassid where a.classid= and a.nclassid=;

更新操作 左连接中数据的筛选 insert into cttag(articleid,classid,nclassid) select a.articleid,a.classid,a.nclassid from ctarticle a left join cttag b on a.articleid=b.articleid where b.articleid is null

//本语句功能为, 显示主表的全部内容, 插入数据到副表中没有的数据 //主要作用为: 让数据减少冗余

上例中的延续 select a.*, b.*, c.*, d.* from cttag as d left join ((ctarticle as a left join ctclass as b on a.classid=b.classid) left join ctnclass as c on a.nclassid=c.nclassid) on d.articleid=a.articleid;

显示文章表中的全部, 调用类别表中的栏目 select a.*, b.*, c.* from (ctarticle a left join ctclass b on a.classid=b.classid) left join ctnclass c on a.nclassid=c.nclassid

//作用, 有时在文章表中包含了在个别类别表中没有的数据, 用这个语法可以读出文章表的全部数据 //a 为 文章表, b 为主类别, c 为子类别

同上例, 选择追加数据时加上空格 insert into cttag(articleid,classid,nclassid,tag) select a.articleid,a.classid,a.nclassid,d.class+' '+c.nclass from (ctarticle as a left join (ctnclass c left join ctclass d on c.classid=d.classid) on a.classid=c.classid and a.nclassid=c.nclassid) left join cttag as b on a.articleid = b.articleid where a.classid=4 and a.nclassid=;

连接n个表, 并追加数据到其中一个表, n=4 insert into cttag(articleid,classid,nclassid,tag) select a.articleid,a.classid,a.nclassid,d.class+c.nclass from (ctarticle as a left join (ctnclass c left join ctclass d on c.classid=d.classid) on a.classid=c.classid and a.nclassid=c.nclassid) left join cttag as b on a.articleid = b.articleid where a.classid=1 and a.nclassid=1;

//解读 插入到 表2(栏1,栏2,栏3,栏4) 选择 别名a.栏1, 别名a.栏2, 别名a.栏3, 别名d.栏4 加上 别名c.栏5 从 (表1 别名a 左连接 (表3 别名c 左连接 表4 别名d 在 别名c.栏2 等于 别名d.栏2) 在 别名a.栏2 等于 别名c.栏2 和 别名a.栏3=别名c.栏3) 左连接 表2 别名b 在 别名a.栏1 等于 别名b.栏1 在那里 别名a.栏2=1 和 别名a.栏3=1

连接两个表, 并追加数据到其中一个表 insert into cttag(articleid,classid,nclassid) select a.articleid,a.classid,a.nclassid from ctarticle as a left join cttag as b on a.articleid = b.articleid where a.classid=1 and a.nclassid=1;

//解读 插入到 表2(栏1,栏2,栏3) 选择 别名a.栏1, 别名a.栏2, 别名a.栏3 从 表1 别名a 左连接 表2 别名b 在 别名a.栏1 等于 别名b.栏1 在那里 别名a.栏4=1 和 别名a.栏5=1

左连接

同步两表的数据 update ctarticle a inner join cttag b on a.articleid = b.articleid set b.classid=a.classid, b.nclassid=a.nclassid;

//解读 更新 表1 别名a 联接 表2 别名2 在 别名a.栏1 等于 别名b.栏1 设置 别名b.栏2 更新为 别名a.栏2, 别名b.栏3 更新为 别名a.栏3

右外连接 select a.*, b.* from bunclass a right join ctclass b on a.classid=b.classid where a.nclassid=

查询别名 a,b 表, 只匹配 b 表中的内容.

添加数据到连接表之一 insert into cttag ( tag, articleid ) select top 1 b.tag, a.articleid from ctarticle as a left join cttag as b on a.articleid = b.articleid where a.articleid order by a.articleid desc;

变通中的用法二 insert into bureply select b.*, a.classid, a.nclassid from article as a inner join reply as b on a.articleid = b.articleid where classid=;

实际应用中的变通 insert into butag ( tag, articleid, classid, nclassid) select b.tag, a.articleid, a.classid, a.nclassid from article as a inner join tag as b on a.articleid = b.articleid where classid=;

添加数据到其他表 insert into butag ( tag, articleid ) select b.tag, a.articleid from article as a inner join tag as b on a.articleid = b.articleid where a.articleid<>false;

//解读 添加到 接收表(列1,列2) 选择 别名b.列1, 别名a.列2 从 表1 表名a 联接 表2 表名b 在 别名a.列c 等于 别名b.列c 在哪里 别名a.列c 不等于 没有

实际应用中的变通 select b.tag, a.articleid, a.classid, a.nclassid from article as a inner join tag as b on a.articleid = b.articleid where a.classid=;

查询 select b.tag, a.articleid from article as a inner join tag as b on a.articleid = b.articleid where a.articleid<>false;

//解读 选择 别名b.列, 别名a.列 从 表1 别名a 联接 表2 别名b 在 别名a.列c = 别名b.列c 在哪里 别名a.列c 不等于 没有 注: as 不是必要

推荐整理分享数据库Left join , Right Join, Inner Join 的相关内容,非常实用(数据库left joins),希望有所帮助,仅作参考,欢迎阅读内容。

数据库Left join , Right Join, Inner Join 的相关内容,非常实用(数据库left joins)

文章相关热门搜索词:数据库left join on,数据库left join和inner join,数据库left joins,数据库leftjoin,数据库left joins,数据库left joins,数据库leftjoin,数据库leftjoin用法,内容如对您有帮助,希望把文章链接给更多的朋友!

MySql 安装时的错误 解决办法1.卸载重装,不设root密码,因为MySql默认密码为空。解决办法2.保持现在的密码,打开MySQLCommandLineClient输入你的密码(安装时设的那个,如果密

SQL Server 中查看SQL句子执行所用的时间 setstatisticsprofileonsetstatisticsioonsetstatisticstimeongo你执行的SQL语句gosetstatisticsprofileoffsetstatisticsiooffsetstatisticstimeoff执行完后点消息即可。

模糊查询的通用存储过程 IFExists(Select1FromsysobjectsWhereName='sp_search'AndxType='P')DropProceduresp_searchgo/*模糊查询的通用存储过程createbysxm,date-7-参数:@table_name表名@condition条件*/create

标签: 数据库left joins

本文链接地址:https://www.jiuchutong.com/biancheng/349114.html 转载请保留说明!

上一篇:SQL Server 排序函数 ROW_NUMBER和RANK 用法总结(sql的排序函数)

下一篇:MySql 安装时的1045错误(mysql安装过程中报错)

  • 注销空白缴销发票流程
  • 个人去税务局开劳务票 税点是多少
  • 可供出售金融资产包括哪些内容
  • 金税盘数据迁移失败
  • 建筑公司劳务分包抵扣分录
  • 外来审计人员交通费
  • 稳岗补贴给谁
  • 不得抵扣的进项税额转出会计分录
  • 债转股资金
  • 所得税汇算清缴表在哪里打印
  • 房地产企业销售额排名
  • 商业保险可以抵扣增值税吗
  • 车船税重复交了怎么退怎么在网上完税?
  • 工资扣款做什么科目
  • 公司投资的股权财产怎么认定
  • 营改增举例说明
  • 股票质押式回购交易业务
  • 白条入账的会计分录
  • 增值税起征点有啥用
  • 成本利润率多少倍
  • 受托软件开发不转让著作权的账务处理
  • 境内个人去境外开设公司
  • 工资薪金所得税前扣除项目标准
  • 不征收增值税的项目有哪些
  • 公司有好多没有股份的人
  • 失联发票进项税额转出
  • 该内存不能为read,要终止程序
  • win10系统的任务栏
  • thinkphp怎么用
  • 设备安装需要预缴吗
  • 小规模发票一般怎么开
  • 一般纳税人差额征税申报表怎么填
  • 当地税务机关
  • 南美貘叫什么
  • 关于B站bilibili名字的由来
  • opencv怎么训练
  • vue笔记大全
  • 帝国cms移动端
  • 公司收到保险公司退保费怎么账务处理
  • 工资表怎么每个都有表头
  • 销售收入和销售收入净额的区别
  • 小规模纳税人转让土地使用权税率
  • 什么情况个税可以扣除
  • 收到企业所得税汇算清缴退税账务处理
  • 企业计提坏账准备时应该借记什么科目
  • 企业销售已使用的车辆
  • 个人开运输发票需要的资料哪些?
  • 售后回租的实质
  • 印花税如何计提缴纳
  • 个人打钱到公司账上违法吗
  • 计提的利息汇算清缴时要调整吗
  • 变更经营范围需要股东会决议吗
  • 待摊费用是什么意思
  • 支票上的金额和确定的金额
  • sqlserver关键字附近有语法错误
  • xp系统为什么网页打不开了
  • freebsd服务器搭建
  • nhaspx.exe是什么
  • imjpmig是什么进程
  • WIN7系统电脑对话框跟鼠标走怎样设置
  • win8的控制面板在哪里打开
  • unity3d需要购买吗
  • Cocos2dx3.2 CrazyTetris 物理引擎使用初步
  • opengl教程48讲
  • js内置对象方法有哪些
  • nodejs lua
  • JavaScript中setFullYear()方法的使用详解
  • Python快速从注释生成文档的方法
  • 手游云测试工具有哪些
  • js dom操作方法
  • python流数据
  • jquery通过属性值获取元素
  • python 代码缩进
  • jquery22插件网
  • 税务检查调账通知书
  • 公司年会抽奖发言
  • 广东省税务局登录
  • 应缴财政专户款属于资产类吗
  • 河南三门峡税务社保缴费电话
  • 买高档手表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设