本篇內(nèi)容主要講解“怎么掌握MySQL多表操作”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么掌握mysql多表操作”吧!
十年的銀海網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都營銷網(wǎng)站建設的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整銀海建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“銀海網(wǎng)站設計”,“銀海網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

一對一(一般是合并表),
一對多/多對一(部門和員工),
多對多(學生和課程)--用中間表
專門用于多表關系的約束
通過主表的主鍵來控制從表的外鍵
1、主表必須已經(jīng)存在,或者正在創(chuàng)建
2、必須要給主表設置主鍵列
3、主鍵不能包括空值,但是外鍵可以包括空值
4、在主表的表名后面指定的列明或者列名的組合。 這個列或列的組合必須是主表的主鍵或者候選鍵
5、外鍵中列的數(shù)目必須和主鍵中列的數(shù)目相同
6、外鍵中列的數(shù)據(jù)類型必須和主鍵中對應列的數(shù)據(jù)類型相同
? 創(chuàng)建外鍵約束 foreign key
在創(chuàng)建表之前添加外鍵約束
在創(chuàng)建表之后添加外鍵約束

1、數(shù)據(jù)插入:
要先給主表添加約束
從表添加約束要依賴于主表,主表沒有的數(shù)據(jù)不能添加
2、數(shù)據(jù)刪除
主表的數(shù)據(jù)被從表依賴時,不能刪除,否則可以刪除
從表的數(shù)據(jù)可以任意刪除
eg:
delete from dept where deptno = '1001';-----不可以刪除(被依賴了)delete from dept where deptno = '1004'; ------可以刪除delete from emp where eid = '7'; -----可以刪除
刪除之后,表與表之間就沒有關系了
語法:
alter table 表名字 drop foreign key 外鍵約束名alter table emp2 drop foreign key emp2_fk;

? 多對多關系-構(gòu)建外鍵約束
A表的一行對應B表的多行,B表的一行對應A表的多行,這時候需要再重新建立一個中間表,記錄表關系
注意:
修改和刪除時,中間從表可以隨便刪除和修改,但是兩邊從表手主表依賴的數(shù)據(jù)不能刪除或者修改。
? 概念
就是同時 查詢兩個或者兩個以上的表,因為有時候用戶在查看數(shù)據(jù)的時候,需要顯示的數(shù)據(jù)來自多張表
? 數(shù)據(jù)準備
注意:
外鍵約束只對數(shù)據(jù)的增刪改起作用,對于數(shù)據(jù)查詢沒有影響
? 交叉連接查詢 select * from A ,B;---會產(chǎn)生冗余數(shù)據(jù)
1、交叉連接查詢返回返回被連接的兩個表所有數(shù)據(jù)行的笛卡爾積
2、笛卡爾集可以理解為一張表的每一行去和另外一張表的任意一行進行匹配
3、假如A表有 m 行數(shù)據(jù),B表有 n 行數(shù)據(jù),則返回 m * n 行數(shù)據(jù)
4、笛卡爾積會產(chǎn)生很多冗余的數(shù)據(jù),后期的其他查詢可以在該集合的基礎上進行條件篩選
求的是兩個表之間的交集
inner 可以省略
隱式內(nèi)連接(SQL92標準):
select * from A,B where 條件;
顯式內(nèi)連接(SQL99標準);
select * from A inner join B on 條件
---查詢每個部門的所屬員工 //隱式內(nèi)連接
select* from dept3,emp3 where dept3.deptno = emp3.dept_id; //這樣寫標準
還可以給表起別名,如;
select* from dept3 a ,emp3 b where a.deptno = b.dept_id;
---查詢每個部門的所屬員工 //顯式內(nèi)連接select *from dept3 inner join emp3 on dept3.deptno = emp3.dept_id; //這樣寫標準
還可以給表起別名,如;
select *from dept3 a join emp3 b on a.deptno = b.dept_id;



分為:(outer可以 省略)
左外連接left outer join、
select* from A left outer join B on 條件;
右外連接right outer join、
select* from A right outer join B on 條件;
滿外連接full outer join
select* from A full outer join B on 條件;
注意:
Oracle 里面有 full join ,可是在mysql 對 full join 支持的不好,我們可以使用 union來達到目的
----外連接查詢
----查詢哪些部門有員工,哪些部門沒有員工
use mydb3;select* from dept3 left outer join emp3 on dept3.deptno =emp3.dept_id;
----查詢哪些員工有對應的部門,哪些沒有
select* from dept3 right outer join emp3 on dept3.deptno =emp3.dept_id;
----使用 union 關鍵字實現(xiàn)左外連接和右外連接的并集
select* from dept3 left outer join emp3 on dept3.deptno=emp3.dept_idunionselect* from dept3 right outer join emp3 on dept3.deptno =emp3.dept_id;

----外連接查詢
----查詢哪些部門有員工,哪些部門沒有員工
usemydb3;select* from dept3 a left outer join emp3 b on a.deptno = b.dept.idselect* from dept3 a left join emp3 b on a.deptno = b.dept_id;
----外連接多個表
select* from Aleft join B on 條件1left join C on 條件2left join D on 條件3;

----查詢哪些員工有對應的部門,哪些沒有
select * from dept3 a right outer join emp3 b on a.deptno = b.dept_id;select* from dept3 a right join emp3 b on a.deptno = b,dept_id;select*from Aright joinB on條件1,right joinC on條件2,right joinD on條件3;

----實現(xiàn)滿外連接: full join
----使用 union 關鍵字實現(xiàn)左外連接和右外連接的并集
----select * from dept3 a full join emp3 b on a.deptno = b.dept_id; --不能執(zhí)行
----union是將兩個查詢結(jié)果上下拼接,并去重
select* from dept3 a left join emp3 b on a.deptno = b.dept_idunionselect* from dept3 a right join emp3 b on a.deptno = b.dept_id
----union all 是將兩個查詢結(jié)果上下拼接,不去重
select* from dept3 a left join emp3 b on a.deptno = b.dept_idunion allselect* from dept3 a right join emp3 b on a.deptno= b.dept_id

? 基本子查詢
? 子查詢關鍵字-ALL
? 子查詢關鍵字-ANY ,SOME
? 子查詢關鍵字-IN
? 子查詢關鍵字-EXISTS
? 自關聯(lián)查詢
到此,相信大家對“怎么掌握mysql多表操作”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
文章題目:怎么掌握mysql多表操作
本文URL:http://chinadenli.net/article8/pgpcip.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設、做網(wǎng)站、網(wǎng)站制作、建站公司、外貿(mào)建站、網(wǎng)站設計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)