資料庫基礎 二

2021-10-03 17:19:57 字數 1704 閱讀 1919

title: 資料庫基礎(二)

author: 軟帝學院

summary: 多表關聯,三階正規化

categories:

表與表之間有引用的關係

將乙個表的資料拆分為多個表:降低冗餘,但是查詢效率會變低

設計資料庫的乙個標準:

​ 正規化等級越高,冗餘越低,一般的專案達到三階正規化就ok(傳統專案)

一階正規化:表中不能套表(現在所設計的資料庫系統,都不會違反一階正規化)

**二階正規化:**首先滿足一階正規化,飛主鍵列必須依賴主鍵,即乙個表中必須要有主鍵

​ 二階正規化問題:刪除異常/更新異常/插入異常

**三階正規化:**滿足二階正規化,不存在傳遞依賴

針對於查詢需要分析出三個主要目標

t1表 join t2表 on 條件 

-- t1表叫驅動表

-- t2表叫匹配表

等值連線下,驅動表跟匹配表可以互換,不會影響查詢結果

等值:兩個表的關聯欄位是全部對應匹配的

-- 注:emp與dept是兩張表,dno是兩個表的關聯字段

-- 查詢出所有員工資訊以及部門資訊

select * from emp,dept where emp.dno = dept.dno;

-- select * from emp inner join dept on emp.dno = dept.dno;

**外連線的特點:**如果驅動表在匹配表中找不到匹配的記錄,則匹配一行空行

**left outer join:**以左邊的表為驅動表

right outer join:以右邊的表為驅動表

**full outer join :**全外連線驅動表和匹配表位置可以互換

full outer join :mysql不支援這個關鍵字,可以通過union實現全外連線

小技巧:要把哪個表的資料全部都顯示出來,就設定哪個表為驅動表

全外連線示例

-- 查詢出所有的員工資訊部門資訊,以及沒有部門的員工資訊,以及沒有員工的部門資訊(全外連線)

select * from emp left outer join dept on emp.dno = dept.dno

union

select * from emp right outer join dept on emp.dno = dept.dno;

-- 將兩個表全部查出來,中間使用union連線,實現全外連線

先查詢出乙個表(虛表),然後再在查出的表中進行查詢

示例:

例1:

-- 查詢每個部門有多少個人

select t.dno,d.dname,t.ct

from (select dno,count(*) ct from emp group by dno) t,dept d

where t.dno = d.dno;

例2:

-- 顯示研發部的所有員工(使用子查詢實現)

select * from emp where dno = (select dno from dept where dname = '研發部');

資料庫基礎二

主要有create select insert update delete和drop 資料定義 create prop 資料操縱 select insert update delete 資料控制 grant reroke create 建立新的表 檢視或者其他資料庫中的物件create table ...

oracle資料庫基礎二

1.查詢等待資源的會話的檢視 v session和v session wait 2.三中收集advisory statistics buffer cache advice,segment level statistics,timed statistics 3.檢視資料庫的時區 select dbti...

mysql資料庫基礎(二)

1.的用法 2.not 的用法 where end isnull andnot title hello dept id select dept id from department where name loans date between 2005 01 01 and 2005 12 31 1.b...