mysql常用基礎操作文法(十)~~子查詢【命令列模式】

來源:互聯網
上載者:User

標籤:

mysql中雖然有串連查詢實現多表串連查詢,但是串連查詢的效能很差,因此便出現了子查詢。
1、理論上,子查詢可以出現在查詢語句的任何位置,但實際應用中多出現在from後和where後。出現在from後的子查詢結果通常是多行多列的,充當暫存資料表;而出現在where後的子查詢結果通常是單行單列,充當條件:

2、where後作為條件的子查詢多與“=”、“!=”、“>”、“<”等比較子一起使用。結果雖然通常是單行單列,但是有的時候也會用單行多列,而且有的時候還會返回多行單列。如果是多行單列的情況,則多與in、any、all、exists結合使用:in和not in:

其中in表示包含於後邊子查詢結果集裡的任意一個,not in表示不包含於後邊結果集裡的任意一個。子查詢的結果中,返回depart_id為1、2、4,因此第一個查詢就會查出emp中所有depart_id是1或2或4的,第二個就會查出既不是1也不是2也不是4的。
any:

=any的用法和in的效果是一樣的;>any是說要大於子查詢結果集裡的任意一個就可以,簡單理解就是只要大於結果集中最小的那個就可以;<any就是要小於子查詢結果集裡任意一個就可以,簡單理解就是只要小於最大的一個就可以。因此這裡>any是只要大於1就行,而<any則只要小於4就行。
all:

>all就是說要大於子查詢結果集裡所有的,簡單理解就是要比最大的那個還大;<all就是要小於結果集裡所有的,簡單理解就是要比最小的還小。因此上邊的第一個查詢就是要大於4,第二個就是要小於1。
exists:

exists和not exists只關心後邊的子查詢是否有結果,而不關心子查詢的結果是什麼;對於exists,如果後邊的子查詢有結果,那麼它的值就是true,反之如果沒有查到結果,則為false,而not exists正好和這個情況相反,有值為false,無值為true。當他們的值為true時,前邊查詢到的結果成立,會被加入到主查詢的結果集,否則不會被加入主查詢的結果集。在上便的查詢中,查詢語句會先從emp中查詢一條資料,然後拿這條資料的depart_id和company中的depart_id比較,當存在兩個id相同的資料時,就會有結果返回,然後最終返回6條資料,而第二個查詢一樣的道理,當不存在兩個id相同的資料時,主查詢才有結果返回,只有一條資料。

mysql常用基礎操作文法(十)~~子查詢【命令列模式】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.