SQL开发人员-返回重复属性的查询

SQL开发人员-返回重复属性的查询,sql,database,oracle,Sql,Database,Oracle,我是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, Di

我是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
它将返回所有具有重复值的姓名和电影(例如,莱昂纳多·迪卡普里奥的姓名将与“永不让我走”一起出现,即使他不在电影中)


希望我没有太多需要编辑的内容,也不会浪费你的时间,但如果你回复我一些线索/答案,我将非常感激

您可能想要加入

SELECT * FROM Film INNER JOIN Actors ON Film.Actor_ID = Actors.Actor_ID

你可能想加入

SELECT * FROM Film INNER JOIN Actors ON Film.Actor_ID = Actors.Actor_ID

您的查询是交叉连接而不是内部连接

交叉联接将返回与其他行匹配的每一行。内部联接将仅返回包含在on 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
你只能在你声明演员在电影中的地方得到电影


您的查询是交叉连接,而不是内部连接

交叉联接将返回与其他行匹配的每一行。内部联接将仅返回包含在on 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
你只能在你声明演员在电影中的地方得到电影


问题似乎更适合于问题似乎更适合于真正理解这一点,现在一切都有意义了。谢谢!:)真的很感激这一点,现在一切都有意义了。谢谢!:)