如何将两条SQL语句合成一条

这个SQL语句……我看得有点困惑。
2 02 2 年,我在一家公司遇到了类似的问题。

这个声明...它想测试两件事。
第一个是从 Qc_V_MESMidCon 选择 count() 作为 hgs,其中 mnumber='2 4 02 01 4 ' 且 itemcode='1 3 8 ' AND ISNUMERIC(result)=1 且 result>=9 9 .2 且 checkdate>=''checkdate1 '' 且 checkdate<=''checkdate2 ''。
这部分的查询是mnumber为“2 4 02 01 4 ”,商品编码为“1 3 8 ”,结果字段必须为数字,结果大于等于9 9 .2 ,检查日期在检查日期1 和检查日期2 之间。
最后的计数称为 hgs。

然后...他添加了所有人的联合。
第二部分是从 Qc_V_MESMidCon 选择 count() 作为 hgs,其中 mnumber='2 4 02 01 4 ' 且 itemcode='1 3 8 ' AND ISNUMERIC(result)=1 且 checkdate>=''checkdate1 '' 且 checkdate<=''checkdate2 ''。
这部分...与第一部分非常相似,只是句子 >=9 9 .2 的结果已被删除。

当时我很困惑。
也许我有偏见,认为连词的使用有点奇怪。
第一条是结果大于或等于9 9 .2 的记录,第二条是结果不一定大于或等于9 9 .2 的记录……但其余条件都一样。
找到的结果集将包含多少条记录...?你可能要看看表Qc_V_MESMidCon,mnumber='2 4 02 01 4 ',itemcode='1 3 8 ',检查日期在检查日期1 和检查日期2 之间,总共有多少条记录。

如果 checkdate1 是“2 02 2 -01 -01 ”并且 checkdate2 是“2 02 2 -1 2 -3 1 ”...那么找到的记录...可能很多。
例如...例如,该表有 1 000 条记录,对应 mnumber='2 4 02 01 4 '、itemcode='1 3 8 ' 以及关键日期在 '2 02 2 -01 -01 ' 和 '2 02 2 -1 2 -3 1 ' 之间。
其中,如果结果大于等于9 9 .2 ,则可能有2 00条。
那么第一个选择找到的hgs是2 00。

第二个选择...去掉结果>=9 9 .2 ,所以有1 000个元素。
所以第二个选择找到的 hgs 是 1 000。

然后连接所有内容...结果集将是两行。
hgs 第一行是 2 00,hgs 第二行是 1 000。

这个运算符...是为了简单地获取两个 hgs 的值吗?第一个是结果数>=9 9 .2 ,第二个是总数?如果这样看……就显得有些单调了。
后来我意识到,也许这个关联只是为了某些特定的分组或统计需要?也许你写SQL的人当时没有一个清晰的想法?反正……这个说法……确实有点奇怪。

外连接和并集的区别

不幸的是,这是 SQL 中的外连接和连接。
说起来,我在这个行业已经很多年了,见过很多用例。
首先,我们来谈谈操作对象,外连接,它连接两个或多个表。
结果,两个表不仅包含匹配的数据,还包含不同的数据。
我记得2 01 5 年的时候有一个项目,要把员工的信息和部门的信息连接起来。
结果,员工失去了部门,因此外部联系就派上用场了。

我们来谈谈工会吧。
这个东西不是连接表。
它结合了两个查询的结果。
如果结果中有重复的行,系统会为您将其删除。
当时我没有意识到,后来查了资料,发现如果不想去掉重复就得用UNIONALL了。

就结果集的内容而言,外连接有几种类型,包括左外连接、右外连接和全外连接。
左外连接保留左表中的所有记录,无论右表中是否有匹配项;右外连接正好相反;完全外连接不会导致两个表中的所有记录丢失。
我记得2 01 6 年的一天,一位客户想要检查所有产品及其可用性信息。
库存表中的某些商品缺货,因此使用了左外连接。

对于联合,除非使用UNIONALL,否则结果集中不会有重复行。
以前,当我做报表时,我必须合并不同部门的销售数据。
使用联合要方便得多。

当您想要从两个或多个表中检索数据,但还需要存储不同的记录时,请使用应用程序脚本、外连接。
例如,您想要检查所有员工及其部门的信息,即使某些员工没有部门。
至于union,当你需要组合几个查询结果合二为一,去除重复数据。
例如,如果您想检查所有男性员工和所有女性经理的信息,您可以使用聚合轻松完成此操作。

说实话,外连接和连接虽然看起来很复杂,但其实用起来还是挺方便的。
一旦掌握了它们,您将能够轻松运行数据库查询。

left join、right join、inner join、full join

连接:仅显示两个表中匹配的记录。

LEFTJOIN:显示左表中的所有记录。
如果实际表中没有匹配项,则显示 NULL。

Join:显示正确表中的所有记录。
如果左表中没有匹配项,则显示 NULL。

Full Join:显示两个表中的所有记录。
如果没有匹配则显示 NULL。

选择哪种连接取决于您想要的数据的完整性。