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

詳解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 < s2.scoreAND s1.course_id = 1AND s2.course_id = 3;
-- 也可以使用join on 語句來進行自連接查詢SELECTs1.*FROMscore s1JOIN score s2 ON s1.student_id = s2.student_idAND s1.score < s2.scoreAND s1.course_id = 1AND s2.course_id = 3;

子查詢

子查詢是指嵌入在其他sql語句中的select語句,也叫嵌套查詢。
單行子查詢:返回一行記錄的子查詢
案例:查詢與“小白” 同學的同班同學:

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<3unionselect * from course where name='英文';-- 或者使用or來實現select * from course where id<3 or name='英文';

union all
該操作符用于取得兩個結果集的并集。當使用該操作符時,不會去掉結果集中的重復行。
案例:查詢id小于3,或者名字為“Java”的課程:

-- 可以看到結果集中出現重復數據Javaselect * from course where id<3union allselect * from course where name='英文';

相關免費學習推薦:mysql數據庫(視頻)

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享