SQL讀書筆記(六) 子查詢

2021-07-10 07:22:02 字數 1648 閱讀 5621

筆記參考來自sql必知必會,sql新手讀物,感覺不錯,記錄一下學習時的筆記,方便以後查詢

這篇筆記主要是記錄下子查詢篇

什麼是子查詢,我覺得就是當我們建立了多個表時,我們的查詢任務無法在乙個表中完成,需要其他表的資料時,我們使用子查詢。。

下面是書中例子

各訂單的物品儲存在相關的orderitems表中。orders表不儲存顧客資訊,只儲存顧客id。顧客的實際資訊儲存在customers表中。

現在,假如需要列出訂購物品rgan01的所有顧客,應該怎樣檢索?下面列出具體的步驟。

1. 檢索包含物品rgan01的所有訂單的編號。 2. 檢索具有前一步驟列出的訂單編號的所有顧客的id。 3. 檢索前一步驟返回的所有顧客id的顧客資訊。

select order_num from orderitems where prod_id = 『rgan01』;

20007

20008

select cust_id from orders where order_num in (20007,20008);

1000000004

1000000005

現在,結合這兩個查詢,把第乙個查詢(返回訂單號的那乙個)變為子查詢。請看下面的select語句:

select cust_id

from orders

where order_num in (select order_num

from orderitems

where prod_id = 『rgan01』);

1000000004

1000000005

警告:作為子查詢的select語句只能查詢單個列。企圖檢索多個列將返回錯誤

作為計算字段使用子查詢

使用子查詢的另一方法是建立計算字段。假如需要顯示customers表中每個顧客的訂單總數。訂單與相應的顧客id儲存在orders表中。

從customers表中檢索顧客列表; 2. 對於檢索出的每個顧客,統計其在orders表中的訂單數目。

select cust_name,

cust_state,

(select count(*)

from orders

where orders.cust_id = customers.cust_id) as orders

from customers order by cust_name;

這條select語句對customers表中每個顧客返回三列:cust_name、cust_state和orders。orders是乙個計算字段,它是由圓括號中的子查詢建立的。該子查詢對檢索出的每個顧客執行一次。在此例中,該子查詢執行了5次,因為檢索出了5個顧客。

也是就說我們用第乙個檢索語句,檢索出了乙個顧客,我們之後的子查詢從order中查詢id與剛才customers的id相等的訂單,返回其數量,別名設定為orders儲存,最後第乙個查詢沒查到乙個顧客,我們的子查詢都需要查詢order訂單與之對應的進行返回。

子查詢中的where子句與前面使用的where子句稍有不同,因為它使用了完全限定列名,而不只是列名(cust_id)。它指定表名和列名 (orders.cust_id和customers.cust_id)。下面的where子句告訴sql,比較orders表中的cust_id和當前正從customers表中檢索的cust_id

讀書筆記六

最後,作為一名程式設計人員,最重要的就是創新。學習新技術 我們不能只沉浸在自己已經學會的技術裡,我們要敢於面對新的技術。不要因為對於新技術的不理解而排斥它。我們要勇敢的接受它 不懼怕老 我並不認為所有的老 都應該立刻替換掉 刪掉。在如今的軟體中,有很多穩固的 良好設計的程式 它們對是很好的學習教材。...

fluent Python 六)讀書筆記

這周由於期末考的壓力,讀書的進度暫時拖緩了一會。主要講講函式這一節學到的東西吧,因為字串那一節感覺自己只學了一些概念。首先是一等物件的定義 1.在執行時建立 2.能賦值給變數或者資料結構中的元素 3.能作為引數傳給函式 4.能作為函式的返回結果 函式就是一等物件,也就是說上面所有的點它都能做得到。5...

Head First Python 讀書筆記(六)

class dog 建立了狗類 def init self,name str,age int none 初始化屬性name和age self.name name self.age age defsit self none 模擬小狗蹲下 print self.name.title is now sit...