久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      完全掌握mysql多表操作

      本篇文章給大家?guī)砹岁P(guān)于mysql的相關(guān)知識,其中主要介紹了多表操作的相關(guān)問題,包括了多表關(guān)系、外鍵約束、多表聯(lián)合查詢、內(nèi)連接查詢和外連接查詢等等,希望對大家有幫助。

      完全掌握mysql多表操作

      推薦學(xué)習(xí):mysql教程

      多表關(guān)系

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

      外鍵約束概念

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

      外鍵約束:

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

      ? 創(chuàng)建外鍵約束 foreign key
      在創(chuàng)建表之前添加外鍵約束
      完全掌握mysql多表操作

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

      完全掌握mysql多表操作

      驗證外鍵約束的作用

      1、數(shù)據(jù)插入:
      要先給主表添加約束
      從表添加約束要依賴于主表,主表沒有的數(shù)據(jù)不能添加
      完全掌握mysql多表操作

      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';  -----可以刪除

      刪除外鍵約束

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

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

      完全掌握mysql多表操作

      ? 多對多關(guān)系-構(gòu)建外鍵約束
      A表的一行對應(yīng)B表的多行,B表的一行對應(yīng)A表的多行,這時候需要再重新建立一個中間表,記錄表關(guān)系
      完全掌握mysql多表操作

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

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

      ? 概念
      就是同時 查詢兩個或者兩個以上的表,因為有時候用戶在查看數(shù)據(jù)的時候,需要顯示的數(shù)據(jù)來自多張表

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

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

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

      內(nèi)連接查詢

      求的是兩個表之間的交集
      完全掌握mysql多表操作

      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 條件
      ---查詢每個部門的所屬員工  //隱式內(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;
      	---查詢每個部門的所屬員工   	//顯式內(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;

      完全掌握mysql多表操作

      完全掌握mysql多表操作
      完全掌握mysql多表操作

      外連接查詢

      分為:(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來達(dá)到目的
      完全掌握mysql多表操作

      ----外連接查詢
      ----查詢哪些部門有員工,哪些部門沒有員工

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

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

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

      ----使用 union 關(guān)鍵字實現(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多表操作

      ----外連接查詢
      ----查詢哪些部門有員工,哪些部門沒有員工

      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;

      完全掌握mysql多表操作

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

      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多表操作

      ----實現(xiàn)滿外連接: full join
      ----使用 union 關(guān)鍵字實現(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

      完全掌握mysql多表操作

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

      推薦學(xué)習(xí):mysql視頻教程

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號