1. 程式人生 > >MySQL入門基礎(3):多表操作

MySQL入門基礎(3):多表操作

(一)多表操作

實際開發中的表之間是存在關係的, 用於描述現實生活中的物件關係

(1)資料關係

  • 資料之間的關係
    • 一對一
    • 一對多
    • 多對多

(2)外來鍵約束

  • 在一對多時,給從表新增外來鍵約束
    • 主表:也叫一表
    • 從表:也叫多表
alter table 多表名稱 add foreign key(外來鍵名稱) references 一表名稱(主鍵)
  • 外來鍵約束的特點
    • 主表中不能刪除從表中已經引用的資料
    • 外來鍵約束的作用是維護資料庫資料的有效性和完整性

(3)多對多

  • 如何處理表單之間的多對多關係
    • 在兩張表A、B之間建立一箇中間表C,存放兩張表的主鍵,然後將兩個主鍵設定成中間表的聯合主鍵
    • 則A和C之間是一對多關係,C和B之間是一對多關係
    • 為了保證資料的完整性和有效性,對於中間表新增兩個外來鍵約束

(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; //將一張表查詢的結果作為一張臨時表進行查詢