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...