1. 程式人生 > >Mysql 的連線(join)和子查詢

Mysql 的連線(join)和子查詢

連線(JOIN)和子查詢

子查詢一般是將查詢出來的結果作為其他查詢的結果使用。例如,我們要將客戶基本資訊表中沒有任何訂單的客戶刪除掉,就可以利用子查詢先從銷售資訊表中將所有發出訂單的客戶ID取出來,然後將結果傳遞給主查詢,如下所示: 

DELETE FROM customerinfo 
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) 

  使用子查詢可以一次性的完成很多邏輯上需要多個步驟才能完成的SQL操作,同時也可以避免事務或者表鎖死,並且寫起來也很容易。但是,有些情況下,子查詢可以被更有效率的連線(JOIN).. 替代。例如,假設我們要將所有沒有訂單記錄的使用者取出來,可以用下面這個查詢完成: 

SELECT * FROM customerinfo 
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) 

  如果使用連線(JOIN).. 來完成這個查詢工作,速度將會快很多。尤其是當salesinfo表中對CustomerID建有索引的話,效能將會更好,查詢如下: 

SELECT * FROM customerinfo 
LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo. 
CustomerID 
WHERE salesinfo.CustomerID IS NULL 

  連線(JOIN).. 之所以更有效率一些,是因為 MySQL不需要在記憶體中建立臨時表來完成這個邏輯上的需要兩個步驟的查詢工作,但是對於大資料量的資料查詢不建議使用這兩者實現,因為Join雖然效率較子查詢高,但他通過巢狀迴圈實現,效率不高,同時子查詢在通過臨時表實現的同時也是通過巢狀的方式實現資料匹配,所以,但資料量較大時,建議分開查詢不同的表,同時在程式中實現對資料的組合和過濾。

相關推薦

Mysql連線join查詢

連線(JOIN)和子查詢 子查詢一般是將查詢出來的結果作為其他查詢的結果使用。例如,我們要將客戶基本資訊表中沒有任何訂單的客戶刪除掉,就可以利用子查詢先從銷售資訊表中將所有發出訂單的客戶ID取出來,然後將結果傳遞給主查詢,如下所示:  DELETE FROM custo

mysql數據類型查詢

去掉 gid var 三次 all 中一 小數 取出 3.1 電腦的一個字節等於8位,也就是1Byte=8bit。字節(Byte /bait/ n. [C])是計算機信息技術用於計量存儲容量的一種計量單位,也表示一些計算機編程語言中的數據類型和語言字符。bit中文名稱是位,

資料庫查詢優化技術查詢優化

查詢的基本操作     1選擇操作 對應的是限制條件(格式類似“field<op>consant”, field表示列物件,op是操作符如"="、">"等)。 操作物件是二維表中的行 優化方式: 選擇操作下推 目的: 是儘

mysql資料庫——表的查詢

1.單表查詢 1.1 查詢語法 SELECT 欄位1,欄位2... FROM 表名 WHERE 條件 GROUP BY field HAVING 篩選 ORDE

No6.等待執行緒結束join通知notify

先看 join例子: public class JoinMain { public volatile static int i = 0; public static class AddTh

Linux 中 ln 軟連線-s 連線-d 的區別

軟連線 先說軟連線,一個認為這個比較好理解,一個也是因為柿子專挑軟的捏啊,哈哈,建立一個軟連線的命令: 【ln -s 原始檔名 軟連線檔名】 使用ls命令檢視檔案資訊可以驗證一下,對檔案和目錄都可以建立軟連線 在網上看到很多人說快捷方式這個比喻,個人認

Hadoop Mapreduce 連線Join之一:重分割槽連線Repartition join

4.1 連線(Join) 連線是關係運算,可以用於合併關係(relation)。對於資料庫中的表連線操作,你可能已經比較熟悉了。在MapReduce中,連線可以用於合併兩個或多個數據集。例如,使用者基本資訊和使用者活動詳情。使用者基本資訊來自於OLTP資料庫。使用者活動

資料庫中的連線JOIN

所謂的連線(Join)就是從兩個關係的笛卡爾積中選取屬性間滿足一定條件的元組。 $ db2 "select * from R" A   B       C --    -- ------ a1 b1      5 a1 b2      6 a2 b3      8 a2 b

mysql資料庫3--內,外連線查詢查詢、合併、分頁【入門】

可以參照前兩個帖子,按順序的,mysql資料庫(1)有完整的建表語句 mysql資料庫(1)---簡單查詢 mysql資料庫(2)---單行函式、多行函式、分組查詢   -- 簡單查詢語句的完整語法 /*完整語法 SELECT 查詢列表 FROM 表名 WH

mysql 查詢之主查詢查詢的執行順序

那麼,什麼是相關子查詢呢?舉個例子,查詢員工表中薪水大於本部門平均薪水的員工。首先構建思路,說到底還是查詢員工,所以主查詢是查詢員工,然後在where後面增加子查詢,查詢薪水大於本部門平均薪水。開始寫sql,如下:問題來了,查詢某個部門的薪水,公司有很多個部門,所以引數不能寫

mysql/mariadb學習記錄——連接查詢JOIN

數據表格 ner 邊表 from join carte nbsp str -- //本文使用的數據表格//persons表中id_p為主鍵//orders表中id_o為主鍵,id_p為外鍵參考persons表中的id_p mysql> select * from p

MySQL4 之 DQL查詢基礎條件查詢

基礎查詢 /* 語法: select 列名 from 表名; 特點: 1.查詢類表可以是:列,常量,表示式,函式 2.查出來的是一個虛擬的表格; */# 1.查詢單個欄位; SELECT first_name FROM employees; # 2.查詢多個欄位 SELECT las

Oracle在left join中使用查詢 ORA-01799: 列不能外部聯接到查詢

informix改oracle遇到一個問題。注意:left join的第二張表,有多條資料,只取符合條件的一條(本例中取出actn_numb最大的一條記錄)。   基礎資料準備: create table A(     id number primar

Mysql筆記多表連線查詢

版權宣告:本文為博主原創文章,轉載請附上博文連結! https://blog.csdn.net/csdnluolei/article/details/83410321 資料庫的建立參考我的另一篇部落格 https://blog.csdn.net/csdnluolei/article/d

如何使用Oracle SQLDeveloper 中連線MS SQLServerMySQL資料庫

如何使用Oracle SQLDeveloper 中連線MS SQLServer和MySQL資料庫 一、連線至MySQL資料庫 1.下載mysql的jdbc驅動, [url]http://dev.mysql.com/downloads/[/url] 免費,嘿嘿。 2.解壓zip檔案(我下載

AOP中通知(advice)、切點pointcut連線join point的概念

藉助Spring框架的幫助,業務模組被合理的縱向分割,彼此之間互相獨立。而將這些縱向柱形的業務模組共同的,重複的部分橫向切分放大,就稱之為切面在AOP中,描述切面的術語有通知(advice),切點(pointcut),連線點(join point)。通知(advice):它用

MySQL基礎4——查詢巢狀查詢、聯結表、組合查詢

本篇主要整理查詢表、聯結表的相關內容。 一、子查詢 MySQL 4.1版本及以上支援子查詢 子查詢:巢狀在其他查詢中的查詢。 子查詢的作用: 1、進行過濾: 例項1:檢索訂購物品TNT2的所有客戶的ID = + 一般,在WHERE

九度OJ 1533 最長上升序列 基於貪心二分查詢

題目描述: 給定一個整型陣列, 求這個陣列的最長嚴格遞增子序列的長度。 譬如序列1 2 2 4 3 的最長嚴格遞增子序列為1,2,4或1,2,3.他們的長度為3。 輸入: 輸入可能包含多個測試

MySQL入門5- 查詢&union&limit&case...when...then...when...then...end

子查詢&union&limit&case...when...then...when...then...end此係列記錄PN視訊學習筆記* 本部落格涉及到的資料為bjpowernode.sql,資料見文末,* 該資料有三張表,分別是部門表dept(dep

mysql基礎存儲引擎

mysql存儲引擎的概念: 關系型數據庫表是用於存儲和組織信息的數據結構,可以將表理解為由行和列組成的表格,各種各樣,不同的表結構意味著存儲不同類型的數據,在數據的處理上也會存在著差異,對於mysql來說,它提供了多種類型的存儲引擎,可以根據對數據處理的需求,選擇不同的存儲引擎,從而最大