MySQL筆記基于教材缰盏,筆記中用到的數(shù)據(jù)庫可以點擊該鏈接下載
子查詢 Subquery
- 在多張表間查詢相關(guān)的信息時,可以將
SELECT
語句嵌套起來用口猜; - 子查詢經(jīng)常與
WHERE
子句里的IN
一起使用济炎; -
列必須匹配:在
WHERE
子句中使用子查詢,應保證SELECT
語句和WHERE
語句有相同數(shù)目的列冻辩。通常WHERE
使用單個列拆祈,而SELECT
也返回單個列倘感。
查詢購買了產(chǎn)品號(prod_id)為TNT2的產(chǎn)品的顧客信息
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 = 'TNT2'));
也可以將子查詢用在計算字段里,則每一行都會執(zhí)行一次子查詢
查詢每個客戶的訂單數(shù)
SELECT cust_name, cust_state,
(SELECT COUNT(*)
FROM orders
WHERE orders.cust_id = customers.cust_id) AS orders
FROM customers
ORDER BY cust_name;
聯(lián)結(jié) Join
Terminology
- 外鍵 (foreign key):外鍵為某個表中一列淤年,它包含另外一個表的主鍵值蜡豹,定義了兩個表之間的關(guān)系。
- 可伸縮性 (scale):能夠適應不斷增加的工作量而不失效弄诲。設計良好的數(shù)據(jù)庫或應用程序稱之為可伸縮型好 (scale well)娇唯。
- 關(guān)系數(shù)據(jù)庫將相關(guān)的數(shù)據(jù)分多個表存儲,用各表的主鍵聯(lián)系塔插。這樣的數(shù)據(jù)庫維護方便,處理靈活伶授。因此關(guān)系數(shù)據(jù)庫的可伸縮性要遠優(yōu)于非關(guān)系數(shù)據(jù)庫流纹。
Application
在MySQL中可以通過WHERE
子句聯(lián)結(jié)兩個或更多表。在FROM
子句中給出要聯(lián)結(jié)的所有表漱凝,在WHERE
子句中建立聯(lián)結(jié)的關(guān)系。
查找所有供應商生產(chǎn)的所有產(chǎn)品
SELECT vend_name, prod_name, prod_price #列vend_name來自vendors, 后兩列來自products
FROM vendors, products #聯(lián)結(jié)了表vendors和表products
WHERE vendors.vend_id = products.vend_id #關(guān)系是兩個表中行的vend_id相同
ORDER BY vend_name, prod_name;
上述聯(lián)結(jié)由特定列的相等關(guān)系來聯(lián)結(jié)行。這種聯(lián)結(jié)被稱為"等值聯(lián)結(jié)" (equijoin)扣典。它基于兩個表之間的相等測試慎玖。這種聯(lián)結(jié)也稱為"內(nèi)部聯(lián)結(jié)"。
實際上趁怔,這種聯(lián)結(jié)有專門的語法薪前。
SELECT vend_name, prod_name, prod_price
FROM vendors INNER JOIN products #在FROM子句中用INNER JOIN指明聯(lián)結(jié)類型
ON vendors.vend_id = products.vend_id #在下一行用ON建立聯(lián)結(jié)
也可以多個表聯(lián)結(jié)关斜。只要把關(guān)系在WHERE子句中寫清楚就可以。
MySQL系列筆記