数据库常见的join方式有三种:inner join, left outter join, right outter join(还有一种full join,因不常用,本文不讨论)。这三种连接方式都是将两个以上的表通过on条件语句,拼成一个大表。以下是它们的共同点:
1. 关于左右表的概念。左表指的是在SQL语句中排在left join左边的表,右表指的是排在left join右边的表。
2. 在拼成的大表中,左表排在左边,右表排在右边。
3. on条件语句最好用=号对两表相应的主外键进行连接。当然,也可以用其他操作符,如>, <, 来连接两表的任一字段,此时的关系将非常复杂,连接后的记录数也随之而变得不确定。如果在一些特殊的场合中需要用到这种方式,必须通过简单的实例加以确认,否则,连接结果很可能不是我们所想要的!
4. on条件语句不能省略。
5. 可以连锁使用join,每次使用join都令另一表与当前的表或连接的结果相连接。
在下文中,用到了两个表,"部门"表与"组织"表,其中,"部门"表有一名为"组织编号"的外键,指向"组织"表中的主键"编号"。
inner join
格式:select * from 部门 inner join 组织 on 部门.组织编号 = 组织.编号
目的:将两表中符合on条件的所有记录都找出来。
规律:
1. 拼出的大表记录不会增加。
2. 如果左边与右表的关系是一对多的关系,在选出的任一记录中,假若右表有多个记录与其对应,那么,连接后的左表,主键将不再唯一。
典型应用:将存在多关系的引用表放在左表,将存在一关系的被引用表放在右表,通过=号将主外键进行连接,通过对右表设定过滤条件,选出相应的且主键唯一的左表记录。
备注:inner join 是默认的连接方式,可缩写为join。
转化为where子句:
select * from 部门, 组织 where 部门.组织编号 = 组织.编号
left outter join
格式: select * from 部门 left join 组织 on 部门.组织编号 = 组织.编号
格式: select * from 组织 left join 部门 on 组织.编号 = 部门.组织编号
目的:将左表的所有记录列出,右表中只要符合on条件的,与左表记录相拼合,不符合条件的,填以null值。
规律:
1. 选出所有符合条件的左表,如果左边与右表的关系是一对一的关系,则拼成的大表记录不会改变。
如果左边与右表的关系是多对一的关系,则拼成的大表记录也不会改变。
如果左边与右表的关系是一对多的关系,则拼成的大表记录会增加。对于每一具有一对多关系的左表记录,如果左表1:N与右表对应,那么会多出N-1条记录。例如,如果左表第一条记录1:3对应于右表,多出2条记录。如果左表第二条记录1:2对应于右表,则再多出1条记录。这样,总共多出3条记录。其他类推。
2. 如果左边与右表的关系是一对多的关系,在选出的任一记录中,假若右表有多个记录与其对应,那么,连接后的左表,主键将不再唯一。
3. 如果左边与右表的关系是一对多的关系,对于左表任一记录,如果右表没有记录与其相对应,则全部填以null值。
典型应用:将存在多关系的引用表放在左表,将存在一关系的被引用表放在右表,通过对右表设定过滤条件,选出相应的且主键唯一的左表记录。
备注:left outter join可用left join代替。在有些数据库中,如HSqlDb, 只能使用left join而不能使用left outter join。
转化为where子句:
select * from 部门, 组织 where 部门.组织编号 = 组织.编号
right outter join
格式: select * from 部门 right join 组织 on 部门.组织编号 = 组织.编号
格式: select * from 组织 right join 部门 on 部门.组织编号 = 组织.编号
目的:将右表的所有记录列出,左表中只要符合on条件的,与右表记录相拼合,不符合条件的,填以null值。
规律:(与left outter join相反)
典型应用:可转化成left outter join。例如
select * from 组织 right join 部门 on 部门.组织编号 = 组织.编号
与
select * from 部门 left join 组织 on 部门.组织编号 = 组织.编号
的效果一样
分享到:
相关推荐
左连接又称为左外连接,是外连接中的一种,他的关键字是 left join on/left outter join on 在两个表的查询中,左连接时左表的记录会全部表示出来,而右表只会显示符合搜索条件的记录,右表记录不足的地方均为NULL ...
public int partitionIt(int[] data, int left, int right, long pivot) { int leftPtr = left - 1; int rightPtr = right + 1; while (true) { while (leftPtr < right && data[++leftPtr] ); while (rightPtr...
文章目录聚合函数sum求和avg平均数max最大值min最小值year求年龄count查询数据个数group by分组with rollup数据总汇having分组筛选join多表查询inner join内连接[outter] join外连接left [outer] join左连接right ...
value, ok = jsonParsed.Path("outter.inner.value1").Data().(float64) // value == 10.0, ok == true value, ok = jsonParsed.Search("outter", "inner", "value1").Data().(float64) // ...
在小程序的点击事件中,我们经常使用这两个属性来传参,看起来效果一样,查了官方文档如下: target:事件源组件对象 currentTarget:当前组件... <view id=inner bindtap=tap3> inner view tap1: function
标题中的“基于WebAssembly的H265播放器(d2)-outter.zip”指的是一个使用WebAssembly技术实现的H265视频播放器的代码或文档压缩包,其中可能包含了项目源码、编译说明、设计文档等内容。描述中的“基于WebAssembly的...
【标题】基于WebAssembly的H265播放器(d2)-outter.pdf 【描述】这份文档主要讨论了如何利用WebAssembly技术构建一个基于H265编码的在线播放器,作者是腾讯的一位高级前端工程师,他在前端性能优化、Node.js以及网络...
inner_var = outter() print(inner_var(10)) # 输出 10 print(inner_var(15)) # 输出 25 print(inner_var(20)) # 输出 45 ``` 装饰器 装饰器(Decorator)是 Python 中的一种特殊类型的函数,用于修改函数的行为。...
例如,在示例代码中,`getChildEl()`函数通过`document.frames("inner").document.getElementById("text1.inner").value`获取到了子页面中ID为`text1.inner`的文本框的值。 - **从子页面访问父页面**: 子页面可以...
注:本demo在小程序环境中测试,其他h5,pc网页通用,只需将小程序单位和标签名改成通用的即可,并按照自己... <view class=inner-parts bindtap=button data-type=volAdd> <text class=rotate>+ <view class=in
在 WPS 中台 V6 版本中,需要配置预览编辑回调地址,格式转换回调地址,回调域名为 http://ip:端口/api/wps/doccenter/outter。 4. 集成第三方预览总开关 在 WPS 中台 V6 版本中,需要集成第三方预览总开关, ...
cv_strokeWidthSize - The size of the outter line surrounding the view. cv_fillRadius - The radius of the inner circle. cv_titleColor - The color of the first row text. cv_subtitleColor - The color of ...
作为刚入门Java的小白,这两天看到内部类,这里做一个总结,若有错误... class Outter { private int age = 12; class Inner { private int age = 13; public void print() { int age = 14; Syste
在微信小程序开发中,事件扮演着至关重要的角色,它连接着视图层和逻辑层,使得用户在界面上的操作能够被程序有效地捕获和处理。事件可以绑定在各种组件上,当用户与这些组件交互时,会触发对应的事件处理函数。下面...
- 编译后,内部类的class文件命名规则为外部类名$内部类名,如`Outter$Inner.class`。 - 访问内部类的成员复杂,可能导致代码可读性降低,因此建议在适当的场景下使用。 3. 内部类的分类: - 成员内部类:这是...
当外部的`add(100, 200)`执行时,`innerAdd`被调用,它可以访问到`num1`、`num2`以及全局变量`outter`,并计算它们的和。这种设计允许创建私有作用域,保护内部函数不被外部直接访问,同时也可以实现闭包,使得内部...
1. `outter-global.css`:这是一个全局的CSS样式表,用于定义网页的整体外观和布局。在下拉登录的设计中,CSS主要负责创建登录框的样式,如尺寸、位置、颜色、字体、边框效果、过渡动画等。通过CSS,可以实现下拉...
- **步骤1**:在健康证录入查询列表中勾选需要打印的健康证。 - **步骤2**:选择批量打印选项,进行批量打印。 #### 三、其他注意事项 - **数据导入**:系统还支持数据导入功能,用于批量处理健康证信息。 - **...