SQL左连接数据变少

article/2025/9/23 12:26:25

 

      前一段时间,同学写sql碰到一个问题:两段sql连接看似一样,但是条数却不一样。原因是在左连接之后的where条件对数据进行了筛选,使得数据变少了。两段sql如下:

select count(1)from (select *from KXAPP.I_CASH_LOAN_WHITELIST_C2_V_NEW bwhere b.BG_DT < '20180820'and b.EN_DT >= '20180904') ghleft join (select *from KXAPP.I_CASH_LOAN_WISH_SCOREwhere busi_dt = '20180820') hgon gh.loan_no = hg.loan_no
select count(1)from KXAPP.I_CASH_LOAN_WHITELIST_C2_V_NEW bleft join KXAPP.I_CASH_LOAN_WISH_SCORE con b.loan_no = c.loan_nowhere b.BG_DT < '20180820'and b.EN_DT >= '20180904'and busi_dt = '20180820') hg

     乍一看,两段sql好像没有什么区别。第一个是先通过条件取子表,再链接;第二个是先进行链接,在通过条件进行筛选。统计后,发现上边的数据量要比下面的多。

    其实这两个链接是有区别的。第一种链接方式,主表是gh;第二种链接方式,主表是b。第二种链接方式数据量少于第一种链接方式的原因是:链接后添加了where对链接结果进行了筛选。

    下面通过一个例子说明:

表A结构如下:

 

表B结构如下: 

select *from (select 1 as a, 2 as bfrom dualunion allselect 2 as a, 2 as b from dual) aleft join (select 3 as a, 2 as bfrom dualunion allselect 2 as a, 2 as b from dual) bon a.a = b.aand b.a = 1;

select *from (select 1 as a, 2 as bfrom dualunion allselect 2 as a, 2 as b from dual) aleft join (select 3 as a, 2 as bfrom dualunion allselect 2 as a, 2 as b from dual) bon a.a = b.awhere b.a = 1;

 


http://chatgpt.dhexx.cn/article/RFiupMwX.shtml

相关文章

SQL 左连接中on后面加where和加and的区别

阅读目录 1、首先来谈谈什么是left join 2、再来谈谈on后面使用and和where的区别 3、总结 今天的最佳表现应该作为明天的最低要求 1、首先来谈谈什么是left join left join即左连接&#xff0c;比如表1左连接表2&#xff0c;以左表为主&#xff0c;表示以表1为主&#xff0c…

SQL 内连接、左连接、右连接案例

概念 左连接&#xff08;Left Join&#xff09;&#xff1a;以左表为主表&#xff0c;左表中每条数据都会跟右表所有数据进行对比一次&#xff0c;当所有条件不满足时&#xff0c;对应的右表数据以 null 显示 1 语法&#xff1a;select * from tbl1 Left Join tbl2 on tbl1.ID…

SQL左连接中的on and和on where的区别

转载,原文链接&#xff1a;http://blog.csdn.net/xingzhemoluo/article/details/39677891 SQL左右连接中的on and和on where的区别 在使用left join时&#xff0c;on and和on where条件的区别如下&#xff1a; 1、on条件是在生成临时表时使用的条件&#xff0c;它不管on中的条…

左连接 oracle条件查询,sql 左连接查询条件and与where

用一条SQL查询一张表中不同级别的字段(字段名称相同)。 需求:用一条SQL同时查出城市id、城市name、省份id和省份name。 版本一如下 SELECT tlUp.LOCATION_ID as cityId, tlUp.LOCATION_NAME as cityName, tlDown.LOCATION_ID as provinceId, tlDown.LOCATION_NAME as province…

oracle左连接优化,关于SQL左连接效率问题

项目在开发新功能&#xff0c;涉及到一张表&#xff0c;里面数据有一百多W的条&#xff0c;表字段竟然有一百多个。。实在是没法再往下新增加字段了&#xff0c;于是就新增了一张表&#xff0c;用做扩展吧&#xff0c;通过表key来关联。后来涉及到以扩展表中某个字段作为查询条…

oracle 左连接 简写,SQL左连接

原标题&#xff1a;SQL左连接 今天分享一下开发中何时运用左连接进行关联查询(大牛请忽视~)。 废话不多说&#xff0c;直接上表结构。只有两张表作为例子&#xff0c;Person表为人员信息&#xff0c;Types为人员类型辅助表&#xff0c;没有定义外键关联。 记住这句话——运用左…

SQL中的左连接和右连接

SQL中的左连接和右连接 SQL中的左连接和右连接 为什么面试官喜欢问这个问题&#xff1f;为什么自己明明会SQL但是这个问题却模棱两可&#xff1f;今天为大家解决这个问题。话不多说&#xff0c;直接上案例~ 创建两张表 首先创建第一张表class&#xff0c;字段如下图所示。 …

SQL查询左连接、右连接、内连接

1、左连接的定义&#xff1a;是以左表为基础&#xff0c;根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出&#xff0c;而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接&#xff0c;是外连接的一种。 下边以A表和B表为例子&#xff0c;A…

sql的左连接(LEFT JOIN)、右连接(RIGHT JOIN)、内连接(INNER JOIN)的详解

sql的左连接&#xff08;LEFT JOIN&#xff09;、右连接&#xff08;RIGHT JOIN&#xff09;、内连接&#xff08;INNER JOIN&#xff09;的详解&#xff1a; 这里以两个表的连表为例&#xff1a; 创建表1&#xff1a;为人员表&#xff0c;这里将它当做左表&#xff1b; CREA…

SQL——左连接(Left join)、右连接(Right join)、内连接(Inner join)

文章目录 前言一、概念二、例子总结 前言 最近在做SQL相关的练习&#xff0c;发现以前那么自信的SQL放久了不碰也变得棘手起来&#xff0c;特别是这一块表之间的内外连接。所以这篇是关于这个内外连接的整理。 一、概念 首先还是介绍一下这三个的定义 1.​Left join&#xf…

如何判断一个数是否为素数(质数)?

用For语句实现循环 基本思路&#xff1a;若一个数n能被2和√n之间的数整除&#xff08;取余为0&#xff09;&#xff0c;则可判断n为素数。可从2开始测试&#xff0c;一直到√n为止。For语句语法规则 一般形式&#xff1a; for&#xff08;表达式1&#xff1b;表达式2&#…

素数(质数)判断的五种方法

素数判断的五种方法 素数判断是我们写程序过程中经常遇见的一个问题&#xff0c;于是今天我简单地整理一下常用的素数判断的方法。 素数的介绍 素数定义 质数(prime number)又称素数&#xff0c;有无限个。一个大于1的自然数&#xff0c;除了1和它本身外&#xff0c;不能被其…

Java中判断质数的方法

Java中判断质数的几种方法 说明&#xff1a; 1.质数&#xff1a;又称素数。是一个大于1的自然数&#xff08;最小质数为2&#xff09;。除了1和它自身外&#xff0c;不能被其他自然数整除的数。 >质数&#xff1a;用n除[2,n-1]的所有数,不能整除就是n就是质数。 2.[2,n-1]缩…

C++高效的质数的判断(2种方法)

前提准备 在开始质数的讨论之前&#xff0c;我们先预备一下&#xff1a; 质数的定义&#xff1a;若一个正整数除了1和它自身之外不能被任何自然数整除&#xff0c;则该数称为质数&#xff0c;也叫素数。否则为合数。 由定义可知&#xff0c;所有小于等于1的数既不是质数&…

C语言 判断质数很简单

算法分析&#xff1a;假设对于一个正数a,如果a的约数只有两个&#xff0c;1和它本身&#xff0c;那这样数叫做素数。我们对a在2—a-1之间取余&#xff0c;如果还能找到第三个约数&#xff0c;使得余数为0&#xff0c;那a就不是素数&#xff0c;如果找不到第三个约数&#xff0c…

判断一个数是否为质数(素数)的4种方法

目录 1.什么是质数&#xff1f; 2.如何判断是否为质数&#xff1f; 方法1 方法2 方法3 方法4 1.什么是质数&#xff1f; 首先来看质数的概念&#xff1a; 质数&#xff08;Prime number&#xff09;&#xff0c;又称素数&#xff0c;指在大于1的自然数中&#xff0c;除了…

判断一个数是否为质数/素数——从普通判断算法到高效判断算法思路

定义&#xff1a;约数只有1和本身的整数称为质数&#xff0c;或称素数。 计算机或者相关专业&#xff0c;基本上大一新生开始学编程都会接触的一个问题就是判断质数&#xff0c;下面分享几个判断方法&#xff0c;从普通到高效。 1&#xff09;直观判断法 最直观的方法&#xf…

【C】C语言判断是否质数

类似帖子很多了&#xff0c;本文侧重循序渐进逐步优化的写出判断质数的代码。 1.质数定义 质数 (素数&#xff09;只能被 1 或自己整除。 同时它必须是大于 1 的整数。 1 不是质数也不是合成数。 常见的质数就是&#xff1a;2&#xff0c;3&#xff0c;5&#xff0c;7&…

判断质数(函数)

题目描述 质数是指除了1和本身之外没有其他约数的数&#xff0c;如7和11都是质数&#xff0c;而6不是质数&#xff0c;因为6除了约数1和6之外还有约数2和3。输入一个正整数&#xff0c;判断它是否为质数&#xff0c;如是质数则输出“Yes”&#xff0c;否则输出这个数的大于1的…

[C++]判断质数

最近做了几个判断质数的函数&#xff0c;记录一下&#xff1a; 一直接试除 bool is_prime3(unsigned long long n) { //slowfor (int i 2; i < n - 1; i) {if (n % i 0) {return 0;}}return 1; } note&#xff1a;比较慢 二一点优化 每次试除时其实只要除到 sqrt(n) 并且…