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 1 ...);

  當限制條件where后面字段的值可能有多個時,我們可以使用in(select ...)或exists(select ...)來實現;

  in 和 exists的區別:

  如果子查詢得出的結果集記錄較少,主查詢中的表較大且又有索引時應該用in, 反之如果外層的主查詢記錄較少,子查詢中的表大,又有索引時使用exists;

  但如果不走索引的話,則它倆的執行效率沒有太大差別。

2021年10月30日15:28:24

  其實,要想得到同樣的數據,還有一種實現方式;

  雖然,它並不是使用where...select...語句實現的,但是依舊是我們常用的一種關聯查詢方法;

  多一種方法,就是多一條思路,增加一種選擇,增長一種見識;

  在實際運用過程中,我們應抱着多學、多想的思路去對待自己的成品,有沒有更好的實現方式。。。

  內連接:INNER JOIN

  適用數據庫:MySQL和Oracle

  源自評論區園友:lybingyu

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM