2. 多表關係設計
3. 多表查詢
3.1.2 外連線查詢
3.1.3 各種連線方式的總結
4. 子查詢 (subquery)
5. 資料庫設計
5.2 資料庫反三正規化
員工表中有乙個欄位dept_id 與部門表中的主鍵對應,員工表的這個欄位就叫做 外來鍵
擁有外來鍵的員工表 被稱為 從表 , 與外來鍵對應的主鍵所在的表叫做 主表
#1. 新建表時新增外來鍵
-- [constraint] [外來鍵約束名稱] foreign key(外來鍵欄位名) references 主表名(主鍵欄位名)
#1. 已有表新增外來鍵
-- alter table 從表 add [constraint] [外來鍵約束名稱] foreign key (外來鍵欄位名) references
主表(主 鍵欄位名)
1.2.1 外來鍵約束的注意事項
從表外來鍵型別必須與主表主鍵型別一致 否則建立失敗.
新增資料時, 應該先新增主表中的資料.
刪除資料時,應該先刪除從表中的資料.
1.2.2 級聯刪除操作(了解)
-- 級聯刪除
ondelete
cascade
-- 重新建立新增級聯操作
create
table employee(
eid int
primary
keyauto_increment
, ename varchar(20
),age int
, dept_id int
,constraint emp_dept_fk foreign
key(dept_id)
references department(id)
-- 新增級聯刪除
ondelete
cascade
)
3.1.1 內連線查詢
3.1.1.1 隱式內連線
select 欄位名 from 左表, 右表 where 連線條件;
# 隱式內連線
select
*from products,category where category_id = cid;
3.1.1.2 顯式內連線select 欄位名 from 左表 [
inner
]join 右表 on 條件
-- inner 可以省略
# 顯式內連線查詢
select
*from products p inner
join category c on p.category_id = c.cid;
3.1.2 外連線查詢
3.1.2.1 左外連線
select 欄位名 from 左表 left
[outer
]join 右表 on 條件
-- 左外連線查詢
select
*from category c left
join products p on c.
`cid`
= p.
`category_id`
;
3.1.2.2 右外連線
select 欄位名 from 左表 right
[outer
]join 右表 on 條件
-- 右外連線查詢
select
*from products p right
join category c on p.
`category_id`
= c.
`cid`
;
3.1.3 各種連線方式的總結
子查詢的特點
子查詢常見分類
select 查詢字段 from 表 where 字段=(子查詢);
# 通過子查詢的方式, 查詢**最高的商品資訊
-- 1.先查詢出最**格
select
max(price)
from products;
-- 2.將最**格作為條件,獲取商品資訊
select
*from products where price =
(select
max(price)
from products)
;
select 查詢字段 from (子查詢)表別名 where 條件;
-- 1. 先查詢分類表的資料
select
*from category;
-- 2.將上面的查詢語句 作為一張表使用
select
p.`pname`,p.
`price`
,c.cname
from products p
-- 子查詢作為一張表使用時 要起別名 才能訪問表中字段
inner
join
(select
*from category) c
on p.
`category_id`
= c.cid where p.
`price`
>
500;
注意: 當子查詢作為一張表的時候,需要起別名,否則無法訪問表中的字段。
select 查詢字段 from 表 where 字段 in (子查詢);
# 查詢**小於兩千的商品,來自於哪些分類(名稱)
-- 先查詢**小於2000 的商品的,分類id
select
distinct category_id from products where price <
2000
;-- 在根據分類的id資訊,查詢分類名稱
-- 報錯: subquery returns more than 1 row
-- 子查詢的結果 大於一行
select
*from category
where cid =
(select
distinct category_id from products where price <
2000
);
子查詢如果查出的是乙個字段(單列), 那就在where後面作為條件使用.
子查詢如果查詢出的是多個字段(多列), 就當做一張表使用(要起別名).
5.1.1 第一正規化 1nf
示例:
5.1.2 第二正規化 2nf
示例:
5.1.3 第三正規化 3nf
示例 5.2.1 概念
5.2.2 什麼是冗餘字段 ?
5.2.4 總結
資料庫設計外來鍵
今天心情很煩躁,公司來了新員工,我感覺到自己這個渣渣要晚年不保啊,隨後就隨便網上逛逛,看到這個挺有意思。設計外來鍵竟然還有人不會?哈哈哈,這不是說我呢嘛!外來鍵一般用於一對多的時候,比如說某個型別type下面可能有多個物件。訂單的話,乙個訂單號肯定會有關於這個訂單 號碼 的訂單詳情,這是給客戶看的,...
MySQL 資料庫外來鍵
如果表a的主關鍵字是表b中的字段,則該字段稱為表b的外來鍵,表a稱為主表,表b稱為從表。外來鍵是用來實現參照完整性的,不同的外來鍵約束方式將可以使兩張表緊密的結合起來,特別是修改或者刪除的級聯操作將使得日常的維護工作更加輕鬆。這裡以mysql為例,總結一下3種外來鍵約束方式的區別和聯絡。這裡以使用者...
MySQL資料庫外來鍵
設定外來鍵 外來鍵及功能 成績表 參照表也叫子表 中的學號來自學生表 被參照表也叫父表 成績表中的課程號來自課程表 當要刪除或更新被參照表中的給字段的值時,參照錶該字段的值如何改變。在on delete on update設定參照動作 restrict 限制 cascade 級聯 set null ...