首頁  >  文章  >  資料庫  >  詳解MySQL 聯合查詢 (IN和EXISTS區別)

詳解MySQL 聯合查詢 (IN和EXISTS區別)

coldplay.xixi
coldplay.xixi轉載
2021-04-19 10:29:532021瀏覽

詳解MySQL 聯合查詢 (IN和EXISTS區別)

笛卡爾積

笛卡爾乘積是指在數學中,兩個集合X和Y的笛卡爾積(Cartesian product),又稱直積,表示為X×Y,第一個物件是X的成員而第二個物件是Y的所有可能有序對的其中一個成員[3] 。
假設集合A={a, b},集合B={0, 1, 2},則兩個集合的笛卡爾積為{(a, 0), (a, 1), (a, 2 ), (b, 0), (b, 1), (b, 2)}。

相關免費學習推薦:mysql影片教學

# 連結

select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;

詳解MySQL 聯合查詢 (IN和EXISTS區別)

外連接

外部連接分為左外連接和右外連接。如果聯合查詢,左側的表完全顯示我們就說是左外連接;右側的表完全顯示我們就說是右外連接。

--左外连接,表1完全显示select 字段名 from 表名1 left join 表名2 on 连接条件;-- 右外连接,表2完全显示select 字段 from 表名1 right join 表名2 on 连接条件;

詳解MySQL 聯合查詢 (IN和EXISTS區別)
詳解MySQL 聯合查詢 (IN和EXISTS區別)

自連接

涉及到行與行之間的比較時,就需要自連結了
範例:顯示所有「電腦原理」成績比「Java」成績高的成績資訊

-- 先查询“计算机原理”和“Java”课程的idselect id,name from course where name='Java' or name='计算机原理';-- 再查询成绩表中,“计算机原理”成绩比“Java”成绩 好的信息SELECTs1.*FROMscore s1,score s2WHEREs1.student_id = s2.student_idAND s1.score <pre class="brush:php;toolbar:false">-- 也可以使用join on 语句来进行自连接查询SELECTs1.*FROMscore s1JOIN score s2 ON s1.student_id = s2.student_idAND s1.score <p><strong>子查詢</strong></p><p>子查詢是指嵌入在其他sql語句中的select語句,也叫巢狀查詢。 <br> 單行子查詢:傳回一行記錄的子查詢<br> 案例:查詢與「小白」 同學的同班同學:</p><pre class="brush:php;toolbar:false">select * from student where classes_id=(select classes_id from student wherename='小白');

多行子查詢:傳回多行記錄的子查詢

  1. [NOT] IN關鍵字:
    先執行子查詢的SQL,得到的結果放到記憶體中,再進行外層查詢,就直接把給定的限制條件和子查詢的結果比較,篩選就好了。 (依賴內存,適合子查詢的結果集合比較小的情況)
  2. [NOT] EXISTS關鍵字:
    先執行外層查詢,依序取每一條外層查詢的記錄,帶入到裡層查詢中
    如果裡層查詢的結果集合非空,就保留外層查詢到的結果
    如果裡層查詢的結果集合為空,就丟棄外層查詢到的結果
    不依賴記憶體,適合外層查詢結果集合小,子查詢的結果集合比較大的情況

合併查詢

為了合併多個select的執行結果,可以使用集合運算子union,union all。使用UNION
和UNION ALL時,前後查詢的結果集中,欄位需要一致。
union
此運算子用於取得兩個結果集的並集。當使用該運算元時,會自動移除結果集中的重複行。
案例:查詢id小於3,或名字為「英文」的課程:

select * from course where id<p><strong>union all</strong><br> 此運算子用於取得兩個結果集的並集。當使用該運算元時,不會去掉結果集中的重複行。 <br> 案例:查詢id小於3,或名字為「Java」的課程:</p><pre class="brush:php;toolbar:false">-- 可以看到结果集中出现重复数据Javaselect * from course where id<blockquote><p><strong>#相關免費學習推薦:</strong><a href="https://www.php.cn/course/list/51.html" target="_blank">##mysql資料庫<strong></strong></a>(影片)<strong></strong></p></blockquote>

以上是詳解MySQL 聯合查詢 (IN和EXISTS區別)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除