1. 程式人生 > >SQL多表聯合查詢高效率

SQL多表聯合查詢高效率

今天做專案時,用到了多表查詢。有三個表分別為et_task_termtt,et_core_thes_term_category ttc , et_core_thes_terms t 其中tt.termid=t.id、ttc.termid=t.id 剛 開始時用自然連線,sql語句為:select t.name from et_task_term tt,et_core_thes_term_category ttc , et_core_thes_terms t where tt.termid=ttc.termid and tt.taskid=50487 and ttc.inschemeid=14653 and ttc.categoryno='56GA' and tt.termid=t.id   執行時間為:3781ms

效率太低下,不能採用這種方式。

然後改為左外連線,sql為:select t.* from et_core_thes_terms t left outer join et_core_thes_term_category ttc on t.id =ttc.termid left outer join et_task_term tt on t.id =tt.termId where ttc.categoryno='56GA'  and tt.taskid=504875  執行時間為:2985ms。雖然比自然連線效率高些,但是還是低下。最後經過查詢資料庫手冊想到了組合查詢,組合查詢包括並,交,差,語法為:

query1 UNION [ALL] query2 query1 INTERSECT [ALL] query2 query1 EXCEPT [ALL] query2 

query1query2 都是可以使用我們到此為止討論的所有查詢特性的查詢。集合操作也可以巢狀和級連,比如

query1 UNION query2 UNION query3 

實際上說的是

(query1 UNION query2) UNION query3 

UNION 有效地把 query2 的結果附加到 query1 的結果上(不過我們不能保證這就是這些行實際返回的順序)並且刪除結果中所有重複的行,就象DISTINCT

做的那樣,除非你聲明瞭UNION ALL

INTERSECT 返回那些同時存在於 query1 的結果中和 query2的結果中的行,除非聲明瞭INTERSECT ALL,否則所有重複行都被刪除。

EXCEPT 返回所有在 query1 的結果中但是不在 query2 的結果中的行。 (有時侯這叫做兩個查詢的。) 除非聲明瞭 EXCEPT ALL,否則所有重複行都被刪除。

為了計算兩個查詢的並,交,差,這兩個查詢必須是"並集相容的",也就意味著它們都返回同樣數量的列,並且對應的列有相容的資料型別。

最後的sql語句為:

select ect.id,ect.name from ( select ttc.termid from et_core_thes_term_category ttc where ttc.categoryno='56GA' and ttc.inschemeid=14653
INTERSECT   select t.id from et_core_thes_terms t where t.thesid=14652
 
INTERSECT  select tt.termid from et_task_term tt where tt.taskid=504875 ) a,et_core_thes_terms ect  where a.termid=ect.id  執行時間為:203ms。

效率較前兩種情況明顯的提高了。從而解決了問題。

相關推薦

SQL聯合查詢高效率

今天做專案時,用到了多表查詢。有三個表分別為et_task_termtt,et_core_thes_term_category ttc , et_core_thes_terms t 其中tt.termid=t.id、ttc.termid=t.id 剛 開始時用自然連線,sql語句為:select t.na

SQL聯合查詢(LEFT JOIN)條件差異

logs 技術分享 .cn where 聯合查詢 uid exist 包含 into 查詢A: select a.*,b.* into Bus605115_ON_Where_And --(642 行受影響) from PositionN a left join szt

SQL聯合查詢(交叉連線,內連線,外連線)

連線查詢:                 交叉連線:             &nbs

SQL聯合查詢實現插入/更新/刪除

具體描述:有兩個表相關聯,比如A是主表,B是A的關聯從表。A和B各自的主鍵都是自動增長的。 所以插入順序:先插入A,再插入B;        更新順序:隨意;        刪除順序:先刪除B,再刪除A; 1、刪除B時的聯合查詢語句如下 delete B from B,

sql-聯合查詢

      在做專案的時候經常會遇到對資料庫進行查詢,如果業務比驕傲簡單,那查詢的時候相對來說也比較簡單,但 是如果業務複雜,需要關聯多張表,將其查詢的結果返回,那麼該用什麼方法呢? 例子:    

聯合查詢SQL語句

多表聯合查詢SQL語句一:  select dpt.`dept_namee`, dpt.`principal_name`, dpt.`unit_type`, info.`sys_name`, info.`dept_name`, info.`begin_use_tim

SQL語句對於聯合查詢重複欄位的特殊語法處理

SELECT m.*,d_name,r_name,m2.m_account as shangji_account FROM Member m,Member m2,Role r,Depart d WHERE m.m_rid=r.id and m.m_did=d.id and

linq To SQl聯合查詢

方法一:資料控制元件繫結    protected void LinqServerModeDataSource1_Selecting(object sender, DevExpress.Data.Linq.LinqServerModeDataSourceSelectEven

MySQL DML操作--------聯合查詢實戰

join 聯合查詢 mysql dba 1. 背景 * 多表聯合查詢是把不同表的記錄到一起的一種方式 * 在SQL標準中規劃的聯合(join)大致分內連接,外連接,全連接。其中外連接又分左外連接,右外連接。2. 內連接例子 (inner join) [ 員工 --> 部門 ] 

MySQL增刪改查之【聯合查詢

包括 實現 鼠標 thead 黃曉明 eba 字符 order 有時 很多時候在實際的業務中我們不只是查詢一張表。 在電子商務系統中,查詢哪些用戶沒有購買過產品。 銀行中可能查詢違規記錄,同時查詢出用戶的 查詢中獎信息和中獎人員的基本信息。 以上只是列的情況

thinkphp3.1 聯合查詢代碼

function table php php代碼 數據集 width pan code 顯示 php代碼 public function info(){ $where[‘openid‘]=session(‘openid‘);////用戶sess

SharePoint 列表聯合查詢

int lists esp mco 連接 city .com spf 城市 在SharePoint平臺二次開發中,我們有時需要涉及多表關聯查詢展示多列表中的不同字段信息;SharePoint和Sql數據表一樣,也支持多表聯合查詢,但是不像Sql語句那樣簡單,有一定的局限性,

Oracle ODI 12c之聯合查詢以及定時任務設置

Oracle ODI 本文介紹如何通過ODI進行多表聯合查詢並設置定時任務。準備工作如下: 準備物理方案和邏輯方案; 創建模型並通過“逆向工程”同步方案; 創建項目(根據實際情況創建或者使用現有的); 確保源表和目標表都有主鍵存在。以上內容的前三點可以參考我博客中的相關文章。 一、Preparing

約束條件 ,之間的關系 和聯合查詢***

特點 左連接 min 想要 關系型數據庫 高效 行數據 人的 單行 一.約束條件 為了確保數據的完整性 可以給列加上約束條件 完整性的分類: 1.實體完整性 2.域完整性 3.引用完整性 1.實體完整性

聯合查詢語句

select dpt.*, info.*, gd.*, mat.* from depart as dpt left join info_sys as info on dpt.id = info.dept_name left join grade as gd on info

Mysql 聯合查詢效率分析及優化

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

thinkphp 5.0聯合查詢

宣告:所有文章僅僅是個人筆記,不用做教程,只適合自己用(因為我怕不符合大眾,容易引起誤導) 三表聯合查詢 //商品查詢 public function SelectAll(){ //連表查詢 $join=[ ['sh_ca

MyBatis-Plus聯合查詢並且分頁(3

這3張表的關係是   模型表Model  ===> 訓練表Training ===》應用表Application(大概的邏輯是:選擇應用,然後訓練,然後成為模型)如有不理解的可加我微信:17625089935 白天問我一般晚上回 首先我們先建立實體Model(我使用的d

MyBatis學習總結(九)---基於XML聯合查詢(一對一、一對

1、一對一的關聯  使用association,association元素用於處理“has-one”(一對一)這種型別關係。  作用:針對pojo物件屬性的對映,它的兩個主要引數此時對應的值: javaType對應pojo類名,  property對應pojo的

hibernate的聯合查詢

SQL多表聯合查詢的知識點回顧 /*連線查詢      * 交叉連線:交叉連線返回的結果是被連線的兩個表中所有資料行的笛卡爾積,也就是返回第一個      * 表中付匯查詢條件的資料行乘以第二個表中符合查詢條件的資料行數,例如dep