[英]SQL Developer - Queries Returning Repeating Attributes
我是Oracle的初學者(使用SQL Developer),所以我決定繼續進行一個小項目,以測試自己。 我已經創建了5個表並在所有表中插入了值,但是當我運行查詢時,它返回的值甚至不應該存在,所以我不確定我哪里寫錯了。
這是我的代碼:
CREATE table Directors
(
Director_ID NUMBER(10) NOT NULL PRIMARY KEY,
Genre_ID NUMBER(10),
Director_fName VARCHAR2(20) NOT NULL,
Director_lName VARCHAR2(20) NOT NULL,
FOREIGN KEY (Genre_ID) REFERENCES Details (Genre_ID)
);
CREATE table Actors
(
Actor_ID NUMBER(10) NOT NULL PRIMARY KEY,
Film_ID NUMBER(10),
Actor_fName VARCHAR2(20) NOT NULL,
Actor_lName VARCHAR2(20) NOT NULL,
FOREIGN KEY (Film_ID) REFERENCES Film (Film_ID)
);
CREATE table Film
(
Film_ID NUMBER(10) NOT NULL PRIMARY KEY,
Actor_ID NUMBER(10),
Film_Len CHAR(5) NOT NULL,
Film_Title VARCHAR2(30) NOT NULL,
FOREIGN KEY (Actor_ID) REFERENCES Actors (Actor_ID)
);
CREATE table Details
(
Genre_ID NUMBER(10) NOT NULL PRIMARY KEY,
Director_ID NUMBER(10),
Genre VARCHAR2(30) NOT NULL,
Year_Released DATE,
FOREIGN KEY (Director_ID) REFERENCES Directors (Director_ID)
);
CREATE table Studio
(
Studio_ID NUMBER(10) NOT NULL PRIMARY KEY,
Studio_name VARCHAR2(15) NOT NULL,
);
INSERT INTO Directors VALUES(1,'Martin','Scorsese');
INSERT INTO Directors VALUES(2,'Baz','Luhrmann');
INSERT INTO Directors VALUES(3,'Mark','Romanek');
INSERT INTO Actors VALUES(1,'Matthew','McConnaughy');
INSERT INTO Actors VALUES(2,'Leonardo','DiCaprio');
INSERT INTO Actors VALUES(3,'Margot','Robbie');
INSERT INTO Actors VALUES(4,'Joanna','Lumley');
INSERT INTO Actors VALUES(5,'Carey','Mulligan');
INSERT INTO Actors VALUES(6,'Tobey','Maguire');
INSERT INTO Actors VALUES(7,'Joel','Edgerton');
INSERT INTO Film VALUES(1,180,'The Wolf of Wall Street');
INSERT INTO Film VALUES(2,143,'The Great Gatsby');
INSERT INTO Film VALUES(3,103,'Never Let Me Go');
INSERT INTO Details VALUES(1,'Comedy',2013);
INSERT INTO Details VALUES(2,'Romance',2013);
INSERT INTO Details VALUES(3,'Science Fiction',2008);
INSERT INTO Studio VALUES(1,'Paramount');
INSERT INTO Studio VALUES(2,'Warner Bros');
INSERT INTO Studio VALUES(3,'Film4');
所以畢竟,即使是一個簡單的查詢,例如
SELECT Actor_fName, Actor_sName, Film_Title
FROM Actors, Film
它將返回所有具有重復值的名稱和電影(例如,萊昂納多·迪卡普里奧的名字將與“永不放手”一起出現,即使他不在電影中也是如此)
希望我不需要做太多編輯,並且我不會浪費您的時間,但是如果您以一些線索/答案作答,我將非常感謝!
您的查詢是交叉聯接,而不是內部聯接。
交叉聯接將返回與其他行匹配的每一行。 內部聯接將僅返回包含您在table1.columnid = table2.columnid(或定義該關系的where子句)中指定的關系的行。
例如:
您的查詢
SELECT Actor_fName, Actor_sName, Film_Title
FROM Actors, Film
將以所有可能的組合返回所有演員姓名和所有電影標題。
相反,如果您使用
SELECT Actor_fName, Actor_sName, Film_Title
FROM Actors INNER JOIN Film
ON Film.Actor_ID = Actors.Actor_ID
您只能在聲明演員在電影中的地方觀看電影。
您可能想要加入。
SELECT * FROM Film INNER JOIN Actors ON Film.Actor_ID = Actors.Actor_ID
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.