外连接 及 无用的外连接
一:左右连接实例。
表TEST1: id
20
30
200
表TEST2: id
20
30
100
表TEST3: id
20
100
200
以下语句的查询结果
select t1.id as t1Id, t2.id as t2ID, t3.id as t3ID from [color=red]test1 t1 left join test2 t2 on t1.id = t2.id right join test3 t3 on t1.id = t3.id[/color]
结果: t1ID t2ID t3ID
20 20 20
200 null 200
null null 100
对于A left join B,则是A必有,B不必有。
对于A right join B,则是A不必有,B必有。
连续的连接时,A left join B right join C
则按照先后,先是A B的左连接,连接完之后再和C右连接。
A B的左连接,以A的记录为基准,
结果: t1ID t2ID
20 20
30 30
200 null
此结果再和C右连接,以C中全部记录为基准,
结果: t1ID t2ID t3ID
20 20 20
null null 100
200 null 200
二:无用的,多余的连接会影响效率
详见下例。
因为要确定的只是一个tin,那么就没必要用包含tin的主表再去 左外连接其余的表。
无论左外连接的表是否有符合条件的记录,主表的记录都是要包含进去的。
According to report, the following SQL is the slowest one.
SELECT DISTINCT cr01_trade_name, cg03_dereg_reason ......
from TR01_TAXPAYER_TIN t
where t.CR01_TIN_ID in
(SELECT a.CR01_TIN_ID
FROM TR12_ACCOUNTS_TIN a
left join TR02_OUTLET_TIN d on a.cr01_tin_id = d.cr01_tin_id and a.cr02_outlet_code = d.cr02_outlet_code
left join TR04_OUTLET_ADDRESS_TINS tr04 on a.cr01_tin_id = tr04.cr01_tin_id
left join TR37_ECONOMIC_CATEGORY_TIN tr37 on tr37.cr01_tin_id = a.cr01_tin_id
right join
(select e.CR01_TIN_ID, ......
from TR01_TAXPAYER_TIN e, TG09_TAXPAYER_TYPES c
where e.cg09_taxpayer_type=c.cg09_taxpayer_type) b on a.cr01_tin_id = b.cr01_tin_id
where 1=1 AND b.CS05_OFFICE_ID=111)
ORDER BY t.CR01_TIN_ID;
可以用下边的替换。即将在这里无用的左外连接去掉
SELECT DISTINCT t.cr01_trade_name,t.cg03_dereg_reason,....
from TR01_TAXPAYER_TIN t,TG09_TAXPAYER_TYPES c
where t.cg09_taxpayer_type=c.cg09_taxpayer_type and
t.CS05_OFFICE_ID=111 and
exists(select 1 from TR12_ACCOUNTS_TIN a where t.CR01_TIN_ID=a.CR01_TIN_ID)
order by t.CR01_TIN_ID;
The SQL Elapsed time [color=red]can reduce from 00:00:01.53 to 00:00:00.30[/color].
外连接 及 无用的外连接相关推荐
- MySQL 学习笔记(15)— 连接查询(内连接、左外连接、右外连接、全外连接、交叉连接、自然连接等)
本文参考:https://gitbook.cn/gitchat/column/undefined/topic/5db92b68a9c3a53bc3800eff SQL 支持的连接查询包括内连接.外连接 ...
- java内连接外连接_SQL中的内连接与外连接--Java学习网
核心提示:连接运算格式链接运算由两部分构成:连接类型和连接条件连接类型可分为:INNER JOIN 内连接LEFT OUTER JOIN 左外连接RIGHT OUTER JOIN 右外连接FULL O ...
- SQLAlchemy的使用---外键ForeignKey数据库创建与连接
SQLAlchemy的使用---外键ForeignKey数据库创建与连接 # 一对多建表操作 from sqlalchemy.ext.declarative import declarative_ba ...
- mysql关联查询去重_MySQL外键和高级查询(连接查询、联合查询、子查询、去重查询)...
MySQL的外键 什么是外键,很简单保持数据一致性的一个约束键.如果你有两张表,第一张是学生表,第二张表是一个成绩表,我们来看看保持数据一致性,其实在Django等框架的模型中中也能做关联获取对象. ...
- mysql语句的左外链接_MySQL中的JOIN连接
一.新手 1+N 模式查询 题目: 查询价格大于 2000 元的商品及其栏目名称 1. 价格大于 2000 元的商品 select goods_id,goods_name,cat_id,shop ...
- mysql内连接的自连接_mysql 内连接、外连接、自连接
一)内连接(等值连接):查询客户姓名,订单编号,订单价格 --------------------------------------------------- select c.name,o.isb ...
- Oracle 多表查询 --笛卡尔集--左连接--右连接--1999 语法--满外连接
Oracle 多表查询总结 笛卡尔集现象: 笛卡尔集会在下面条件下产生: – 省略连接条件 – 连接条件无效 – 所有表中的所有行互相连接 为了避免笛卡尔集, 可以在where加入有效的连接条件. O ...
- 硬件设备使用网线连接PC并访问外网
1.ssh连接设备 设备ip:192.168.2.11 使用网线连接设备网口和PC机网口,设置PC的ip地址为192.168.2.XX(和设备同网段). 借用XShell等连接工具,连接到设备. 2. ...
- 配置软路由-同时连接内网和外网
配置软路由-同时连接内网和外网 Date Created: Mar 23, 2021 9:00 AM Status: 要学习的 windows 环境 首先使用cmd命令中route print检查 网 ...
最新文章
- window 10 桌面显示计算机的操作
- (转)oracle extent
- 优雅的创建一个JavaScript库
- access开发精要(10)-筛选
- java class类型参数_使用Class对象实例化Java类型参数/ generic
- 让数据中心变得更加友好
- java struts2下载文件_java struts2入门学习---文件下载的二种方式
- java 父类构造函数_Java基础系列 - 子类继承父类,调用父类的构造函数
- MYSQL5.5.48编译安装
- 关于boostrap的modal隐藏问题(前端框架)
- Java:接口文档示例
- 磁珠法RNA pull down试剂盒、蛋白质-核酸相互作用
- vue的微信语音功能,录音+对接口返回amr音频播放
- java 佛祖保佑_【Java】SpringBoot 佛祖保佑banner.txt
- Linux 之旅 8:初识 BASH
- XUPT新生赛题目回顾(2)
- .net 批量更新_痛点:Anaconda3 python第三方库批量安装
- spring 的@PersistenceUnit和@PersistenceContext
- 深度学习_目标检测_SPP(Spatial Pyramid Pooling)详解
- 2020年4月西安葡萄城挂经