?大家好侈百,我是IT修真院成都分院第8期的JAVA學(xué)員鄒蘇吩谦,一枚正直純潔善良的java程序員藕届。 今天給大家分享一下,修真院官網(wǎng)Java任務(wù)1鲸湃,深度思考中的知識點————Mysql的多表查詢.
多表查詢:
多表查詢就是在多個有邏輯聯(lián)系的表之間進(jìn)行的查詢赠涮,邏輯關(guān)系主要是指主外鍵之間的聯(lián)系,
? ? ? ? ? ? ? ? ? 在主表中的某個字段的值取自另一個表中的一個字段暗挑,就是說主表中的一個字段的值包含于另一個表的一個字段的值的集合里 笋除。
這樣的話,如果要在主表里插入數(shù)據(jù)炸裆,就必須是對應(yīng)的字段的值在相應(yīng)的表中存在垃它,才有可能插入成功,如果不存在烹看,
? ? ? ? ? ? ? ? ? 則肯定插入不成功(除非此字段可以為空) 国拇。要實現(xiàn)多表之間的查詢就要依靠表連接或者是子查詢的方式實現(xiàn)
表連接:
普通多表查詢:
? ? ? ? ? ? ? ? select 列1... from 表1,表2...
? ? ? ? ? ? ? ? where...
? ? ? ? ? ? ? ? 在from之后可以有很多表惯殊,每個表之間用酱吝,隔開,from后面的表會做笛卡爾積
? ? ? ? ? ? ? ? 表與表之間做笛卡爾積靠胜,然后就能查詢出來了
兩個集合X和Y的笛卡尓積(Cartesian product)掉瞳,
? ? ? ? ? ? ? ? 又稱直積,表示為X × Y浪漠,第一個對象是X的成員而第二個對象是Y的所有可能有序?qū)Φ钠渲幸粋€成員陕习。
內(nèi)連接:
語法:select 列from 表1 別名 inner join 表2 別名 on 表1.列=表2.列,...
? ? ? ? ? ? ? ? from開始址愿,表1與表2進(jìn)行笛卡爾積该镣,每匹配一行的數(shù)據(jù),就會通過on后條件判斷
? ? ? ? ? ? ? ? 是否成立响谓,就將該行匹配的信息存放到臨時表损合,否則不存放
外連接:
左外連接:左表中所有的記錄都會被放到結(jié)果集中,無論是否在右表是否存在匹配記錄
語法:select 列
? ? ? ? ? ? ? ? from 表1 left outer join 表2 on 表1.列=表2.列
右外連接:不管是否成功匹配連接條件都會返回右表中的所有記錄
語法: select 列
? ? ? ? ? ? from 表1 right outer join 表2 on 表1.列=表2.列
全外連接:在mysql中沒有全外連接娘纷,可以使用union實現(xiàn)
? ? ? ? ? ? ? ? 即是select...左連接 union select? ... 右連接...
? ? ? ? ? ? ? ? 表1 full outer join 表2 on ...
3.常見問題
表之間的約束
數(shù)據(jù)庫中的完整性約束用來防止對數(shù)據(jù)的意外破壞嫁审,來保證數(shù)據(jù)的安全性和一致性。
? ? ? ? ? ? ? ? ? ? 通常我們都需要對數(shù)據(jù)庫的某些列加上合適的約束來防止程序bug等導(dǎo)致的數(shù)據(jù)不一致赖晶,
? ? ? ? ? ? ? ? ? ? 因為這類數(shù)據(jù)不一致的問題排查起來很困難律适。mysql中的完整性約束主要包括主鍵辐烂、外鍵
? ? ? ? ? ? ? ? ? ? (參照完整性約束)、唯一約束捂贿、非空約束等纠修。
外鍵約束
外鍵用來指定參照完整性約束,被指定為外鍵的列必需要有索引厂僧,外鍵參考列必需為另一個表的主鍵扣草。
語法:CONSTRAINT 外鍵約束名 FOREIGN KEY (本表字段名) REFERENCES 參照表名 (參照表字段名)
alter table 表名 add constraint 外鍵約束名 FOREIGN KEY(本表字段名) REFERENCES 參照表名 (參照表字段名);
5.編碼實戰(zhàn)
6.擴(kuò)展思考
關(guān)系數(shù)據(jù)庫的三范式:
一范式就是屬性不可分割,原子性颜屠。
二范式就是要有主鍵辰妙,要求其他字段都依賴于主鍵。
三范式就是要消除傳遞依賴汽纤,方便理解上岗,可以看做是“消除冗余”
PPT :PPT
騰訊視頻:
7.參考文獻(xiàn)
http://blog.csdn.net/jintao_ma/article/details/51260458
http://blog.csdn.net/github_37767025/article/details/67636061
http://blog.csdn.net/u012723798/article/details/47189479
問題:
多表的查詢的性能和單表的比怎么樣?
數(shù)據(jù)量大的話蕴坪,多表查詢一定是低效的肴掷。
在建表的時候不用外鍵約束可以嗎?
可以不用背传,但是數(shù)據(jù)庫正確性沒有了保障呆瞻。
感謝大家觀看!
今天的分享就到這里啦径玖,歡迎大家點贊痴脾、轉(zhuǎn)發(fā)、留言梳星、拍磚~
技能樹.IT修真院
“我們相信人人都可以成為一個工程師赞赖,現(xiàn)在開始,找個師兄冤灾,帶你入門前域,掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷迷隙郑”匿垄。
這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學(xué)習(xí)路線归粉,學(xué)習(xí)透明化椿疗,成長可見化,師兄1對1免費指導(dǎo)糠悼〗扉快來與我一起學(xué)習(xí)吧~
我的邀請碼:17701057,或者你可以直接點擊此鏈接:http://www.jnshu.com/login/1/17701057