MySQL必知必會知識預覽 第一章——了解SQL 第二章——MySQL簡介 第三章——使用MySQL 第四章——檢索數(shù)據(jù) 第五章——排序檢索數(shù)據(jù) 第六章——過濾數(shù)據(jù) 第七章——數(shù)據(jù)過濾 第八章——用通配符進行過濾 第九章——用正則表達式進行搜索 第十章——創(chuàng)建計算字段 第十一章——使用數(shù)據(jù)處理函數(shù) 第十二章——匯總數(shù)據(jù) 第十三章——分組數(shù)據(jù) 第十四章——使用子查詢 第十五章——聯(lián)結表 第十六章——創(chuàng)建高級聯(lián)結 第十七章——組合查詢 第十八章——全文本搜索 第十九章——插入數(shù)據(jù) 第二十章——更新和刪除數(shù)據(jù) 第二十一章——創(chuàng)建和操縱表 第二十二章——使用視圖 第二十三章——使用儲存過程 第二十四章——使用游標 第二十五章——使用觸發(fā)器 第二十六章——管理事務處理 第二十七章——全球化和本地化 第二十八章——安全管理 第二十九章——數(shù)據(jù)庫維護 第三十章——改善性能 ————————————– 華麗的分隔符 ————————————————–
使用表別名:縮短SQL語句,允許在單條select語句中多次使用相同的表,表別名只是在查詢中使用,與列別名不一樣的是,列別名可以在客戶機進行查詢使用。 select cust_name,cust_contact from customers as cu ,orders as ord,orderitems as ort where cu.cust_id =ord.cust_id and ord.order_num =ort.order_num and ort.PRod_id=’tnt2’
應該注意: 表別名只在查詢中使用,與列別名不一樣,表列名不返回到客戶機。
思考: 如果 商品(其ID為DTNTR)有問題,因此想要知道生產該產品的供應商的其他產品是否也存在這些問題。
————————————–————————————–————————————– 首先找到ID為DTNTR的供應商,然后再查找該供應商的其他產品信息。
子查詢實現(xiàn): select prod_name,prod_id from products where vend_id =(select vend_id from products where prod_id=’DTNTR’);
自聯(lián)結查詢實現(xiàn): select p1.prod_name,p1.prod_id from products as p1 , products as p2 where p1.vend_id = p2.vend_id and p2.prod_id=’DTNTR’;

注意: 用自聯(lián)結而不用子查詢:自聯(lián)結通常作為外部語句用來代替從相同表中檢索數(shù)據(jù)時使用的子查詢語句。雖然最終的結果是相同的,但有時候處理聯(lián)結遠比處理子查詢快得多。多試,看看哪種性能更好
聯(lián)結包含了那些在相關表中沒有關聯(lián)行的行,這種類型的鏈接稱為外部聯(lián)結。 使用outer join 語法時,必須使用right 或left 關鍵字進行指定包括其所有行的表。 左聯(lián)結:查詢各表中滿足條件相同的行,并且查詢出左表的所有信息行。 右聯(lián)結:查詢各表中滿足條件相同的行,并且查詢出右表的所有信息行。 select customers.cust_id,orders.order_num from customers left outer join orders on orders.cust_id = customers.cust_id; select customers.cust_id,orders.order_num from customers right outer join orders on orders.cust_id = customers.cust_id;
注意: 圖中的數(shù)據(jù)一個是6條數(shù)據(jù),一個是5條數(shù)據(jù)。在左聯(lián)結查詢時,會將左表的所有信息給查詢出來,而有些數(shù)據(jù)在右表不存在,從而連帶出空數(shù)據(jù)。而在右聯(lián)結查詢時,則是將右表的數(shù)據(jù)查詢出來,然后連帶出左表的部分數(shù)據(jù),
聚集函數(shù)用來匯總數(shù)據(jù)。也可以與聯(lián)結進行使用。
select customers.cust_name,customers.cust_id, count(orders.order_num) as n um_ord from customers inner join orders on customers.cust_id = orders.cust_id gr oup by customers.cust_id; 
select 語句使用Inner Join 將customers和orders表相互關聯(lián)。group by 子句按客戶分組數(shù)據(jù),因此,函數(shù)調用count對每個客戶的訂單計數(shù),然后返回。
使用聯(lián)結的要點: 一般我們是使用內部聯(lián)結,但是使用外部聯(lián)結也是有效的。 保證使用正確的聯(lián)結條件,否則將返回不正確的結果。 應該提供有效的聯(lián)結條件,否則將會產生笛卡兒積。 在一個聯(lián)結中可以包含多個表,甚至對于每個聯(lián)結可以采用不同的聯(lián)結類型。但是應該在一起測試他們之前,分別測試每個聯(lián)結。
新聞熱點
疑難解答