簡體   English   中英

SQL Developer-查詢返回重復屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM