MySQL入門基礎(3):多表操作
阿新 • • 發佈:2018-12-11
(一)多表操作
實際開發中的表之間是存在關係的, 用於描述現實生活中的物件關係
(1)資料關係
- 資料之間的關係
- 一對一
- 一對多
- 多對多
(2)外來鍵約束
- 在一對多時,給從表新增外來鍵約束
- 主表:也叫一表
- 從表:也叫多表
alter table 多表名稱 add foreign key(外來鍵名稱) references 一表名稱(主鍵)
- 外來鍵約束的特點
- 主表中不能刪除從表中已經引用的資料
- 外來鍵約束的作用是維護資料庫資料的有效性和完整性
(3)多對多
- 如何處理表單之間的多對多關係
- 在兩張表A、B之間建立一箇中間表C,存放兩張表的主鍵,然後將兩個主鍵設定成中間表的聯合主鍵
- 則A和C之間是一對多關係,C和B之間是一對多關係
- 為了保證資料的完整性和有效性,對於中間表新增兩個外來鍵約束
- 在兩張表A、B之間建立一箇中間表C,存放兩張表的主鍵,然後將兩個主鍵設定成中間表的聯合主鍵
(4)內連線
- 內連線
- 顯示的內連線(使用join關鍵詞)
- 隱式的內連線 (使用where關鍵詞)
select a.*,b.* from a join b on ab連線條件 //顯示的內連線,join之前表是主表
select a.*,b.* from a,b where ab連線條件 //隱式的內連線
- 使用內連線查詢的例子:
//使用者和訂單之間是一對多的關係,一個使用者可以有多個訂單
select user.*,orders.* from user join orders on user.id=orders.user_id;
select user.*,orders.* from user,orders where user.id=orders.id;
(5)外連線
- 外連結
- 左外連線(關鍵詞left join):先展示join左邊表的資料,對於join右邊表的資料,如果符合篩選條件則展示,否則用NULL表示
- 右外連線(關鍵詞right join) :先展示join
//a、b表示兩張表
select a.*,b.* from a left join b on 條件 //左外連線
select a.*,b.* from a right join b on 條件 // 右外連線
- 外連線的例子:
select user.*,orders.* from user left join orders on user.id=orders.user_id; //左外連線
select orders.*,user.* from user right join orders on user.id=orders.user_id; //右外連線
- 左外連線使用比較頻繁
(6)子查詢
- 子查詢
- 定義:一個查詢的結果是另外一個查詢的結果
- 客觀上也就是將兩個查詢語句結合在一起,用一句語句得到結果
- 案例:
select * from orders where user_id= (select id from user where username='mio');
select user.*,tmp.* from user,(select * from orders where totalprice>300) as tmp where user.id=tmp.user_id; //將一張表查詢的結果作為一張臨時表進行查詢