SQL开发人员-返回重复属性的查询
我是Oracle(使用SQL Developer)的初学者,我决定继续并启动一个小项目来测试自己。我已经创建了5个表,并在所有表中插入了值,但当我运行查询时,它会返回甚至不应该存在的值,因此我不确定我错在哪里 这是我的密码: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
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
你只能在你声明演员在电影中的地方得到电影
问题似乎更适合于问题似乎更适合于真正理解这一点,现在一切都有意义了。谢谢!:)真的很感激这一点,现在一切都有意义了。谢谢!:)