第15章 聯(lián)結(jié)表
15.1聯(lián)結(jié)
聯(lián)結(jié)查詢(join)盲链,是SQL最強(qiáng)大的功能之一拙毫。
15.1.1關(guān)系表
關(guān)系數(shù)據(jù)庫依许,主鍵、外鍵恬偷。
15.2創(chuàng)建聯(lián)結(jié)
例:列出每個供應(yīng)商的產(chǎn)品和價(jià)格:select vend_name,prod_name,prod_price from vendors,products where vendors.vend_id=products.vend_id order by vend_name,prod_name;
15.2.1笛卡爾積(叉聯(lián)結(jié))
上面例子中悍手,where子句作為聯(lián)結(jié)條件,如果不設(shè)聯(lián)結(jié)條件袍患,將會出現(xiàn)笛卡爾積坦康。
所有,注意:不要忘了使用诡延,或不正確的使用where聯(lián)結(jié)條件滞欠。
笛卡爾積:不設(shè)聯(lián)結(jié)條件,查詢兩個表時(shí)肆良,行數(shù)為兩個表行數(shù)相乘筛璧,列數(shù)為兩個表列數(shù)相加(如果顯示所有列時(shí))。
例:select vend_name,prod_name,prod_price from vendors,products order by vend_name,prod_name;
15.2.2內(nèi)部聯(lián)結(jié)(inner join)
上面第一個例子中惹恃,from 表A,表B where聯(lián)結(jié)條件夭谤,也可改為另一種格式,
內(nèi)聯(lián)結(jié):表A inner join 表B on 聯(lián)結(jié)條件
例:列出每個供應(yīng)商的產(chǎn)品和價(jià)格:select vend_name,prod_name,prod_price from vendors inner join products on vendors.vend_id=products.vend_id order by vend_name,prod_name;
15.2.3聯(lián)結(jié)多個表
一條select語句中巫糙,可以聯(lián)結(jié)的表數(shù)目沒有限制朗儒,但是聯(lián)結(jié)表越多,查詢耗費(fèi)資源越多参淹,性能越下降厲害醉锄。
創(chuàng)建聯(lián)結(jié)的規(guī)則也相同:列出所有的表,然后定義表間關(guān)系浙值。
例:顯示訂單20005中的所有貨品:select prod_name,vend_name,prod_price,quantity from products,orderitems,vendors where products.prod_id=orderitems.prod_id and products.vend_id=vendors.vend_id and order_num=20005;
再看第14章中的例子恳不,可以改寫如下:
例:列出訂購TNT2貨品的所有客戶信息:select cust_name,cust_contact from customers,orderitems,orders where customers.cust_id=orders.cust_id and orders.order_num=orderitems.order_num and prod_id='TNT2';
《mysql必知必會》是一本好書,是一本sql語言入門書开呐,豆瓣評分很高烟勋。
作者是英國的Ben Forta规求,世界知名的技術(shù)作家,由人民郵電出版社發(fā)行神妹,我覺得原作名: MySQL Crash Course颓哮,直譯為:《MYSQL速成》更具暢銷書潛質(zhì)家妆,只是比較俗吧鸵荠,呵呵。
書中從介紹簡單的數(shù)據(jù)檢索開始伤极,逐步深入一些復(fù)雜的內(nèi)容蛹找,包括聯(lián)結(jié)的使用、子查詢哨坪、正則表達(dá)式和基于全文本的搜索庸疾、存儲過程、游標(biāo)当编、觸發(fā)器届慈、表約束,等等忿偷。
前三章是基礎(chǔ)概念金顿,講了SQL和數(shù)據(jù)庫的基本概念,Mysql數(shù)據(jù)庫的概念和使用方法鲤桥,第四章開始SQL實(shí)操練習(xí)揍拆,這里是本書的一些實(shí)操練習(xí)筆記,有興趣的話可以按這個練習(xí)幾遍茶凳,相信對新手會很有幫助嫂拴,讓你不經(jīng)意間功力大增。