TL;DR:為什么我們必須添加ON table1.column = table2.column?
這個問題粗略地問,如果加入沒有它們就可以正常作業,為什么我們需要有外鍵。在這里,我想反過來問。給定最簡單的資料庫,如下所示:
CREATE TABLE class (
class_id INT PRIMARY KEY,
class_name VARCHAR(40)
);
CREATE TABLE student (
student_id INT PRIMARY KEY,
student_name VARCHAR(40),
class_id INT,
FOREIGN KEY(class_id) REFERENCES class(class_id) ON DELETE SET NULL
);
……還有一個簡單的連接,像這樣:
SELECT student_id, student_name, class_name
FROM student
JOIN class
ON student.class_id = class.class_id;
……為什么我們不能省略這個ON子句?
SELECT student_id, student_name, class_name
FROM student
JOIN class;
對我來說,FOREIGN KEY(class_id) REFERENCES class(class_id) …定義中的行student已經包含了FROM student JOIN class具有隱式ON student.class_id = class.class_id條件的所有必要資訊;但我們仍然需要添加它。這是為什么?
uj5u.com熱心網友回復:
- 為此,您必須考慮 JOIN 操作。它不會檢查您的兩個表或集合是否有關系。因此,無條件的簡單連接 (ON) 您將獲得所有可能性的大結果。
- ON 操作過濾器以獲得您的預期結果
uj5u.com熱心網友回復:
轉貼Damien_The_Unbeliever的評論作為一個答案
- 你不必加入外鍵;
- 有時同一對表之間存在多個外鍵。
此外,對于最常見的用例,SQL 是一種硬殼語言,沒有很多快捷方式。
uj5u.com熱心網友回復:
JOIN 條件是指定加工條件的運算式,在 JOIN 程序中進行檢查。只有在發生語法錯誤時才會導致失敗。
FOREIGN KEY 是資料一致性檢查子系統的規則,在資料變化時進行檢查。如果資料狀態(中間和/或最終)與規則不匹配,它將導致失敗。
換句話說,它們之間沒有任何共同點,它們是完全不同且毫無關聯的事物。
我覺得我必須重申部分問題。請再讀一遍 - Dima Parzhitsky
想象一下你的報價被接受了。我有表:
CREATE TABLE users (userid INT PRIMARY KEY);
CREATE TABLE messages (sender INT REFERENCES users (userid),
receiver INT REFERENCES users (userid));
我寫SELECT * FROM users JOIN messages。
加入條件必須使用什么參考?并證明你的假設......
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/389925.html
上一篇:T-SQL查詢以查找所需的輸出
下一篇:使用可為空ID的FK到同一個表
