1. 程式人生 > >MySql二(多表關係和操作)

MySql二(多表關係和操作)

1、多表關係

多表關係

1、一對多/多對一: 在多的一方加入另一方的外來鍵

這裡寫圖片描述

2、多對多: 使用中間表,分別引用兩方的ID
如下圖:學生s1有兩個老師,而老師t1,有兩個學生t1,t2對應關係如下

這裡寫圖片描述
3、一對一:

  1. 主鍵同步 兩個表中有關係的記錄id一致
  2. 在一方加入 另一方的外來鍵
  3. 在另一方加入外來鍵

    這裡寫圖片描述

2、外來鍵和外來鍵完事性約束

外來鍵能夠使多表關聯,起到聯合查詢使用。外來鍵的完事性關係到查詢資料的完整性。外來鍵的修改和刪除可能對別的表產生影響,因此要對外來鍵進行約束。比如當我們刪除第二個表中計算機的時候,第一個表中有對它的引用,造成表的不完整。
下面兩張表
這裡寫圖片描述

這裡寫圖片描述
1、增加一個外來鍵約束

ALTER TABLE 表名 ADD CONSTRAINT 外來鍵標識 FOREIGN KEY (表中欄位) REFERENCES 表名(表中欄位);

ALTER TABLE `t_student` ADD CONSTRAINT `fk_sclass` FOREIGN KEY (`sclass`) REFERENCES `t_teacher`(`sclass`); 

2、刪除一個外來鍵約束
ALTER TABLE 庫名.表名 DROP FOREIGN KEY 外來鍵名;

ALTER TABLE `student`.`t_student`
DROP FOREIGN KEY `fk_sclass`;

3、多表查詢

1、笛卡爾積:把兩表的列合併,很多無效資料。

SELECT * FROM t_student,t_teacher;

查詢結果
這裡寫圖片描述

2、內連線

這裡寫圖片描述

select * from t_student,t_teacher  where t_student.sclass = t_teacher.sclass;

3、外連線

左外連結:左外連線就是在左邊資訊顯示全的情況下與右邊的錶鏈接。能連線上就顯示右邊的資訊,連線不上顯示左這表的資訊。

INSERT INTO t_student(sid,sname,sage,sclass)  VALUES
('0011','s11',20,NULL) ;

假如在t_student表中有一個學生專業的空。那麼如果有內連結,這個同學資訊應該查詢不到。因此有了,左外連線和右外連線
查詢結果
這裡寫圖片描述

右外連線與左外連線相似

4、子查詢

當一個查詢是另一個查詢的條件時,稱之為子查詢。

comparison 一個表示式及一個比較運算子,將表示式與子查詢的結果作比較。
expression 用以搜尋子查詢結果集的表示式。
sqlstatement SELECT 語句,遵從與其他 SELECT 語句相同的格式及規則。它必須括在括號之中。

示例1 :全部單價比任何以 25% 或更高的折扣賣出的產品高的產品:

SELECT * FROM Products
WHERE UnitPrice > ANY
(SELECT UnitPrice FROM OrderDetails
WHERE Discount >= .25);

示例2、查出年齡大於s2的學生

SELECT * FROM t_student WHERE sage>= (SELECT sage FROM t_student WHERE sname='s2');

查詢結果:
這裡寫圖片描述