MySql二(多表關係和操作)
阿新 • • 發佈:2019-01-28
1、多表關係
多表關係
1、一對多/多對一: 在多的一方加入另一方的外來鍵
2、多對多: 使用中間表,分別引用兩方的ID
如下圖:學生s1有兩個老師,而老師t1,有兩個學生t1,t2對應關係如下
3、一對一:
- 主鍵同步 兩個表中有關係的記錄id一致
- 在一方加入 另一方的外來鍵
在另一方加入外來鍵
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');
查詢結果: