sql查詢時為什麼會出現兩個編號 11 使用子查詢

2021-10-18 00:02:37 字數 1735 閱讀 7884

orderitems 表(訂單商品表)

orders 表(訂單表)

select 語句是 sql 的查詢,我們目前為止看到的所有 select 語句都是簡單查詢,即從單個表中檢索資料的單條語句。

sql 還允許建立子查詢,是指那些巢狀在其他查詢中的查詢。

為什麼需要子查詢呢?有時候我們可能會出現,需要多條 sql 語句才能處理乙個需求,但是第二條 sql 語句又需要上一條 sql 語句的結果的時候。

想象一下,我們要列出購買 a 產品的顧客的資訊。

我們或許有乙個「訂單商品表」,記錄了包含 a 產品的訂單,所以我們得到了訂單編號

根據訂單編號,我們在「訂單表」中找到了訂單中包含的顧客 id 的資料。

通過使用者 id 的資料,我們在「使用者表」中找到了顧客的具體資訊。

我們現在就來試著實現「列出訂購物品 rgan01 的所有顧客」的需求。

在訂單商品表中找出prod_id = 'rgan01'的訂單編號

在訂單中找到這兩個訂單編號的資料。

那這個時候,我們就需要把第一條語句合併到第二條語句中了。

select cust_id

from orders

where order_num in (select order_num from orderitems where prod_id = 'rgan01');

按照這種巢狀的寫法,我們可以再巢狀一層,就可以查出顧客的資訊。

select cust_name, cust_contact

from customers

where cust_id in (

select cust_id

from orders

where order_num in (select order_num from orderitems where prod_id = 'rgan01')

);

(注:作為子查詢的 select 語句只能查詢單個列,不能查詢多個列)(注:這裡的子查詢只是演示一種解決問題的方法,但並不是最有效的方法)這裡我們實現了計算出每個顧客的訂單數量的需求。還是一樣的,雖然可以解決問題,但不是最有效的方法。

select cust_name, cust_state, (select count(*) from orders where orders.cust_id = customers.cust_id) as orders_num

from customers

order by cust_name;

兩個執行緒同時呼叫乙個函式會出現什麼情況

最近在研究多執行緒,然後突然想到如果兩個執行緒同時訪問乙個函式的話,要不要加鎖呢,加鎖怎麼加,不加又怎樣這樣的問題.然後去網上找了些帖子學習學習.上面的 明顯執行串了 函式本身只是 是唯讀的,無論多少個執行緒同時呼叫都無所謂,因為是唯讀嘛.但是函式裡面總要用到暑假 如果資料屬性執行緒級別 比如函式形...

sql注入出現兩個password的原因分析

近期一直在學習sql注入,在起初使用dvwa進行練習時,爆破出來的表就有如下特點 可以看到,爆出來的列名有乙個user id,乙個id,乙個user,乙個username,兩個password,一開始我嘗試使用username進行繼續dump卻發現不存在該列,在起初不知道原因所在,現在一想,原來是出...

組合兩個表 sql查詢語句

表1 person 列名 型別 personid int firstname varchar lastname varchar personid 是上表主鍵表2 address 列名 型別 addressid int personid int city varchar state varchar a...