久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么掌握mysql多表操作

共計(jì) 3149 個(gè)字符,預(yù)計(jì)需要花費(fèi) 8 分鐘才能閱讀完成。

本篇內(nèi)容主要講解“怎么掌握 mysql 多表操作”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓丸趣 TV 小編來(lái)帶大家學(xué)習(xí)“怎么掌握 mysql 多表操作”吧!

多表關(guān)系

一對(duì)一(一般是合并表),
一對(duì)多 / 多對(duì)一(部門和員工),
多對(duì)多(學(xué)生和課程)--用中間表

外鍵約束概念

專門用于多表關(guān)系的約束
通過(guò)主表的主鍵來(lái)控制從表的外鍵

外鍵約束:

1、主表必須已經(jīng)存在,或者正在創(chuàng)建
2、必須要給主表設(shè)置主鍵列
3、主鍵不能包括空值,但是外鍵可以包括空值
4、在主表的表名后面指定的列明或者列名的組合。這個(gè)列或列的組合必須是主表的主鍵或者候選鍵
5、外鍵中列的數(shù)目必須和主鍵中列的數(shù)目相同
6、外鍵中列的數(shù)據(jù)類型必須和主鍵中對(duì)應(yīng)列的數(shù)據(jù)類型相同

? 創(chuàng)建外鍵約束 foreign key
在創(chuàng)建表之前添加外鍵約束

在創(chuàng)建表之后添加外鍵約束

驗(yàn)證外鍵約束的作用

1、數(shù)據(jù)插入:
要先給主表添加約束
從表添加約束要依賴于主表,主表沒(méi)有的數(shù)據(jù)不能添加

2、數(shù)據(jù)刪除
主表的數(shù)據(jù)被從表依賴時(shí),不能刪除,否則可以刪除
從表的數(shù)據(jù)可以任意刪除

eg:

delete from dept where deptno =  1001 ----- 不可以刪除(被依賴了)delete from dept where deptno =  1004 
------ 可以刪除 delete from emp where eid =  7  ----- 可以刪除 

刪除外鍵約束

刪除之后,表與表之間就沒(méi)有關(guān)系了
語(yǔ)法:

alter table  表名字  drop foreign key  外鍵約束名 alter table emp2 drop foreign key emp2_fk;

? 多對(duì)多關(guān)系-構(gòu)建外鍵約束
A 表的一行對(duì)應(yīng) B 表的多行,B 表的一行對(duì)應(yīng) A 表的多行,這時(shí)候需要再重新建立一個(gè)中間表,記錄表關(guān)系

注意:
修改和刪除時(shí),中間從表可以隨便刪除和修改,但是兩邊從表手主表依賴的數(shù)據(jù)不能刪除或者修改。

多表聯(lián)合查詢(非常重要)

? 概念
就是同時(shí) 查詢兩個(gè)或者兩個(gè)以上的表,因?yàn)橛袝r(shí)候用戶在查看數(shù)據(jù)的時(shí)候,需要顯示的數(shù)據(jù)來(lái)自多張表

? 數(shù)據(jù)準(zhǔn)備
注意:
外鍵約束只對(duì)數(shù)據(jù)的增刪改起作用,對(duì)于數(shù)據(jù)查詢沒(méi)有影響

? 交叉連接查詢 select * from A,B;---會(huì)產(chǎn)生冗余數(shù)據(jù)

1、交叉連接查詢返回返回被連接的兩個(gè)表所有數(shù)據(jù)行的笛卡爾積
2、笛卡爾集可以理解為一張表的每一行去和另外一張表的任意一行進(jìn)行匹配
3、假如 A 表有 m 行數(shù)據(jù),B 表有 n 行數(shù)據(jù),則返回 m * n 行數(shù)據(jù)
4、笛卡爾積會(huì)產(chǎn)生很多冗余的數(shù)據(jù),后期的其他查詢可以在該集合的基礎(chǔ)上進(jìn)行條件篩選

內(nèi)連接查詢

求的是兩個(gè)表之間的交集

inner 可以省略

隱式內(nèi)連接(SQL92 標(biāo)準(zhǔn)):

select * from A,B where  條件;

顯式內(nèi)連接(SQL99 標(biāo)準(zhǔn));

select * from A inner join B on  條件 
---查詢每個(gè)部門的所屬員工  // 隱式內(nèi)連接 
select* from dept3,emp3 where dept3.deptno = emp3.dept_id; // 這樣寫標(biāo)準(zhǔn) 

還可以給表起別名,如;

select* from dept3 a ,emp3 b where a.deptno = b.dept_id;
---查詢每個(gè)部門的所屬員工  
 // 顯式內(nèi)連接 select *from dept3 inner join emp3 on dept3.deptno = emp3.dept_id; 
 // 這樣寫標(biāo)準(zhǔn) 

還可以給表起別名,如;

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 對(duì) full join 支持的不好,我們可以使用 union 來(lái)達(dá)到目的
怎么掌握 mysql 多表操作

----外連接查詢
----查詢哪些部門有員工,哪些部門沒(méi)有員工

use mydb3;select* from dept3 left outer join emp3 on dept3.deptno =emp3.dept_id;

----查詢哪些員工有對(duì)應(yīng)的部門,哪些沒(méi)有

select* from dept3 right outer join emp3 on dept3.deptno =emp3.dept_id;

----使用 union 關(guān)鍵字實(shí)現(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;

怎么掌握 mysql 多表操作

----外連接查詢
----查詢哪些部門有員工,哪些部門沒(méi)有員工

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;

----外連接多個(gè)表

select* from Aleft join B on  條件 1left join C on  條件 2left join D on  條件 3;

怎么掌握 mysql 多表操作

----查詢哪些員工有對(duì)應(yīng)的部門,哪些沒(méi)有

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;

怎么掌握 mysql 多表操作

----實(shí)現(xiàn)滿外連接:full join
----使用 union 關(guān)鍵字實(shí)現(xiàn)左外連接和右外連接的并集
----select * from dept3 a full join emp3 b on a.deptno = b.dept_id; --不能執(zhí)行

----union 是將兩個(gè)查詢結(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 是將兩個(gè)查詢結(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

怎么掌握 mysql 多表操作

? 基本子查詢
? 子查詢關(guān)鍵字-ALL
? 子查詢關(guān)鍵字-ANY ,SOME
? 子查詢關(guān)鍵字-IN
? 子查詢關(guān)鍵字-EXISTS
? 自關(guān)聯(lián)查詢

到此,相信大家對(duì)“怎么掌握 mysql 多表操作”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是丸趣 TV 網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-13發(fā)表,共計(jì)3149字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 新建县| 周宁县| 独山县| 同心县| 扬州市| 托里县| 静海县| 彰化市| 大城县| 丹巴县| 安阳县| 涿州市| 武隆县| 达拉特旗| 邯郸市| 济阳县| 乌兰察布市| 太康县| 额敏县| 吉林省| 绵阳市| 墨玉县| 安阳县| 连州市| 汉源县| 论坛| 调兵山市| 尚义县| 福建省| 青浦区| 武义县| 林甸县| 博野县| 商洛市| 德昌县| 偃师市| 高阳县| 广饶县| 桐庐县| 拉萨市| 福州市|