sql where条件后面跟select语句的三种实现方式
1.情景展示
where限制条件后面如果想要加select语句的话,如何实现?
2.原因分析
通常情况下,where后面跟的是:clomn=值的方式,其实,=号后面也是可以使用查询语句的,但有使用限制条件,下面会说;
使用in()或者exists()函数,则基本上没有限制条件。
3.解决方案
方式一:in()
语法结构:
where cloumn in(select clomn from table)
适用数据库:MySQL和Oracle
查询示例:
select t.endno from cz_einvoices t where t.ivccode = '123' and t.orgcode in ( select orgcode from cz_unitinfo where invoicingpartycode = '456' )
更新示例:
UPDATE CZ_EINVOICES SET BEGNO = '111' , ENDNO = '333' , CURRENTNO = '222' WHERE IVCCODE = '123' AND ORGCODE IN ( SELECT ORGCODE FROM CZ_UNITINFO WHERE INVOICINGPARTYCODE = '456' )
方式二:exists()
语法结构:
from table t1 where exists(select 1 from table t2 where t2.cloumn1 = t1.cloumn1)
适用数据库:MySQL和Oracle
查询示例:
SELECT T.ENDNO FROM CZ_EINVOICES T WHERE T.IVCCODE = '123' AND EXISTS ( SELECT 1 FROM CZ_UNITINFO WHERE INVOICINGPARTYCODE = '456' AND ORGCODE=T.ORGCODE)
4.效果展示
两种方式实现的效果是一致哒。
2021-01-21
方式三:=(select cloumn from table)
语法结构:
where cloumn=(select cloumn from table)
适用数据库:MySQL和Oracle
来自评论区园友:代码中透露着杀气
where条件 =号后面也是可以跟select语句的;
使用条件:
第一,使用()包住;
第二,select的查询结果集只能为1(只返回一条数据)。
我自己也测试了一下,确实可行:
ORACLE
MYSQL
5.总结
当确定限制条件where后面字段的值具有唯一性的时候,我们可以直接用=(select ...);
当限制条件where后面字段的值可能有多个时,我们可以使用in(select ...)或exists(select ...)来实现;
in 和 exists的区别:
如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists;
但如果不走索引的话,则它俩的执行效率没有太大差别。
2021年10月30日15:28:24
其实,要想得到同样的数据,还有一种实现方式;
虽然,它并不是使用where...select...语句实现的,但是依旧是我们常用的一种关联查询方法;
多一种方法,就是多一条思路,增加一种选择,增长一种见识;
在实际运用过程中,我们应抱着多学、多想的思路去对待自己的成品,有没有更好的实现方式。。。
内连接:INNER JOIN
适用数据库:MySQL和Oracle
源自评论区园友:lybingyu
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
相关推荐:
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/14286811.html