国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

怎么了解mysql多表操作

2024-07-24 12:33:15
字體:
來源:轉載
供稿:網友
  本篇內容主要講解“怎么掌握mysql多表操作”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么掌握mysql多表操作”吧!
 
  多表關系
  一對一(一般是合并表),
  一對多/多對一(部門和員工),
  多對多(學生和課程)--用中間表
 
  外鍵約束概念
  專門用于多表關系的約束
  通過主表的主鍵來控制從表的外鍵
 
  外鍵約束:
  1、主表必須已經存在,或者正在創建
  2、必須要給主表設置主鍵列
  3、主鍵不能包括空值,但是外鍵可以包括空值
  4、在主表的表名后面指定的列明或者列名的組合。 這個列或列的組合必須是主表的主鍵或者候選鍵
  5、外鍵中列的數目必須和主鍵中列的數目相同
  6、外鍵中列的數據類型必須和主鍵中對應列的數據類型相同
 
  • 創建外鍵約束 foreign key
  在創建表之前添加外鍵約束

  驗證外鍵約束的作用
  1、數據插入:
  要先給主表添加約束
  從表添加約束要依賴于主表,主表沒有的數據不能添加
  怎么掌握mysql多表操作
 
  2、數據刪除
  主表的數據被從表依賴時,不能刪除,否則可以刪除
  從表的數據可以任意刪除
 
  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;
  怎么掌握mysql多表操作
 
  • 多對多關系-構建外鍵約束
  A表的一行對應B表的多行,B表的一行對應A表的多行,這時候需要再重新建立一個中間表,記錄表關系
  怎么掌握mysql多表操作
 
  注意:
  修改和刪除時,中間從表可以隨便刪除和修改,但是兩邊從表手主表依賴的數據不能刪除或者修改。
 
  多表聯合查詢(非常重要)
  • 概念
  就是同時 查詢兩個或者兩個以上的表,因為有時候用戶在查看數據的時候,需要顯示的數據來自多張表
 
  • 數據準備
  注意:
  外鍵約束只對數據的增刪改起作用,對于數據查詢沒有影響
 
  • 交叉連接查詢 select * from A ,B;---會產生冗余數據
 
  1、交叉連接查詢返回返回被連接的兩個表所有數據行的笛卡爾積
  2、笛卡爾集可以理解為一張表的每一行去和另外一張表的任意一行進行匹配
  3、假如A表有 m 行數據,B表有 n 行數據,則返回 m * n 行數據
  4、笛卡爾積會產生很多冗余的數據,后期的其他查詢可以在該集合的基礎上進行條件篩選
 
  內連接查詢
  求的是兩個表之間的交集
  怎么掌握mysql多表操作
 
  inner 可以省略
 
  隱式內連接(SQL92標準):
 
  select * from A,B where 條件;
  顯式內連接(SQL99標準);
 
  select * from A inner join B on 條件
  ---查詢每個部門的所屬員工  //隱式內連接
  select* from dept3,emp3 where dept3.deptno = emp3.dept_id;  //這樣寫標準
  還可以給表起別名,如;
 
  select* from dept3  a ,emp3 b  where a.deptno = b.dept_id;
   ---查詢每個部門的所屬員工  
   //顯式內連接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來達到目的
 
 ?。膺B接查詢
  ----查詢哪些部門有員工,哪些部門沒有員工
 
  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 關鍵字實現左外連接和右外連接的并集
 
  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;

  ----外連接查詢
 ?。樵兡男┎块T有員工,哪些部門沒有員工
 
  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;

 ?。樵兡男﹩T工有對應的部門,哪些沒有
 
  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;

 ?。瓕崿F滿外連接: full join
 ?。褂?union 關鍵字實現左外連接和右外連接的并集
  ----select * from dept3 a full join emp3 b on a.deptno = b.dept_id; --不能執行
 
 ?。璾nion是將兩個查詢結果上下拼接,并去重
 
  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
 ?。璾nion all 是將兩個查詢結果上下拼接,不去重
 
  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
  • 自關聯查詢
 
  到此,相信大家對“怎么掌握mysql多表操作”有了更深的了解,不妨來實際操作一番吧!

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 县级市| 留坝县| 柳州市| 平原县| 吉水县| 将乐县| 常州市| 三河市| 遂昌县| 石景山区| 墨江| 皮山县| 汉寿县| 雅江县| 南郑县| 云南省| 汉阴县| 新绛县| 肥乡县| 大宁县| 江孜县| 平武县| 炎陵县| 芦溪县| 天津市| 临桂县| 永寿县| 化州市| 东丰县| 黔江区| 饶平县| 乳源| 磐安县| 沈丘县| 荥经县| 韶山市| 阜南县| 徐水县| 万安县| 小金县| 镇康县|