SQL語句的MINUS,INTERSECT和UNION ALL的解析
SQL語句中的三個關鍵字:MINUS(減去),INTERSECT(交集)和UNION ALL(並集);
關於集合的概念,中學都應該學過,就不多說了.這三個關鍵字主要是對資料庫的查詢結果進行操作,正如其中文含義一樣:兩個查詢,MINUS是從第一個查詢結果減去第二個查詢結果,如果有相交部分就減去相交部分;否則和第一個查詢結果沒有區別. INTERSECT#是兩個查詢結果的交集,UNION ALL是兩個查詢的並集;
#
雖然同樣的功能可以用簡單SQL語句來實現,但是性能差異非常大,有人做過實驗:made_order共23萬筆記錄,charge_detail共17萬筆記錄:
SELECT order_id FROM made_order MINUS SELECT order_id FROM charge_detail 耗时:1.14 sec SELECT a.order_id FROM made_order a WHERE a.order_id NOT exists ( SELECT order_id FROM charge_detail WHERE order_id = a.order_id ) 耗时:18.19 sec
性能相差15.956倍!因此在遇到這種問題的時候,還是用MINUS,INTERSECT和UNION ALL來解決問題,否則面對業務中隨處可見的上百萬數據量的查詢,數據庫伺服器還不被咱玩的死翹翹?
PS:應用兩個集合的相減,相交和相加時,是有嚴格要求的:1.兩個集合的字段必須明確(用*就不行,報錯);2.字段類型和順序相同(名稱可以不同),如:集合1的字段1是NUMBER,字段2是VARCHAR,那麼集合2的字段1必須也是NUMBER,字段2必須是VARCHAR;3.不能排序,如果要對結果排序,可以在集合運算後,外面再套一個查詢,然後排序,如前面的例子可以改成:
SELECT * FROM (SELECT order_id FROM made_order MINUS SELECT order_id FROM charge_detail) ORDER BY ORDER_ID ASC
以上是SQL語句的MINUS,INTERSECT和UNION ALL的解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

c語言union的用法是一種特殊的資料類型,它允許在相同的記憶體位置儲存不同的資料類型,union的使用可以幫助我們節省記憶體空間,並且可以方便地在不同的資料類型之間進行轉換。使用union時需要注意對應的成員是有效的,並且只能同時存取一個成員。

MySQL中如何使用FULLOUTERJOIN函數取得兩個表的並集在MySQL中,FULLOUTERJOIN函數是一種融合內連接和外連接的功能強大的連接操作。它可以用來取得兩個表的並集,即將兩個表中的所有資料合併為一個結果集。本文將介紹FULLOUTERJOIN函數的用法,並提供一些範例程式碼以幫助讀者更好地理解。 FULLOUTERJOIN函數

定義Union類別實作資料體的共存在C/C++語言中,聯合體(union),又稱共用體,類似結構體(struct)的一種資料結構。聯合體(union)和結構體(struct)一樣,可以包含很多種資料類型和變量,兩者區別如下:結構體(struct)中所有變數是「共存」的,同時所有變數都生效,各個變數佔據不同的記憶體空間;聯合體(union)中是各變數是「互斥」的,同時只有一個變數生效,所有變數佔據同一塊記憶體空間。當多個資料需要共享記憶體或多個資料每次只取其一時,可以採用聯合體(union)。在Java

1、union不是多表格連接查詢的一種方式,將多個查詢句子的查詢結果合併成一個結果,去除重複資料。 2.全外連接查詢左表和右表的數據,然後根據連接條件連接。實例#用左外的Aunion右外的BSELECT*FROMt_categorycLEFTOUTERJOINt_productpONc.cid=p.cnounionSELECT*FROMt_categorycRIGHTOUTERJOINt_productpONc.cid=p.cno

在許多資料庫應用程式中,我們都會面臨需要整合來自多個資料來源的資料的情況。 MySQL的UNION語句就是一種用來解決這種情況的方式,它允許我們將兩個或多個SELECT語句的結果集合併為一個。雖然這是一個非常方便的功能,但如果不加以最佳化,UNION語句也可能會對系統產生效能問題。本文將探討如何透過MySQL對UNION最佳化來提升效能。使用UNIONALL在使用U

用Union優化Like語句1)有時候,你可能需要在查詢中使用or操作符來比較。當or關鍵字在where子句中使用頻率過高的時候,它可能會使MySQL優化器錯誤的選擇全表掃描來檢索記錄。 union子句可以是查詢執行的更快,尤其是當其中一個查詢有一個最佳化索引,而另一個查詢也有一個最佳化索引的時候。例如,在first_name和last_name上分別存在索引的情況下,執行下列查詢語句:mysql>select*fromstudentswherefirst_namelike'A

1.union運算子用於連接兩個以上的select語句的結果組合到一個結果集合中。多個select語句會刪除重複的資料。 2.使用時union合併結果集時,要求兩個結果集的列數相同。實例selectplayerno,townfromPLAYERSwheretown='Inglewood'unionselectplayerno,townfromPLAYERSwheretown='Plymouth';

union:對多個結果集進行並集操作,不包括重複行,同時進行排序。 unionall:對多個結果集進行並集操作,包括重複行,不進行排序。查詢部門小於30號的員工信息,和部門大於20小於40號的員工資訊。 ①.先查詢部門小於30號的員工資料。 SELECTemployees_id,last_name,salary,department_idFROMemployeesWHEREdepartment_id
