Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL/ORACLE查询练习18c_Sql_Oracle - Fatal编程技术网

SQL/ORACLE查询练习18c

SQL/ORACLE查询练习18c,sql,oracle,Sql,Oracle,按字母顺序显示1980年至1985年间每年至少演过一部电影的演员 电影(CODFILM,TITLE,YEAR,流派)——YEAR是数字,它只包含年份 演员(配角、姓名、姓氏、国籍) 演员阵容(配角、配角、补偿) 我不确定这个解决方案,有人能检查一下吗 SELECT * FROM ACTOR WHERE CODACTOR IN ( SELECT CODACTOR FROM FILM NATURAL JOIN CAST WHERE YEAR = 1980 AND YEAR = 1981 AND

按字母顺序显示1980年至1985年间每年至少演过一部电影的演员

  • 电影(CODFILM,TITLE,YEAR,流派)——YEAR是数字,它只包含年份
  • 演员(配角、姓名、姓氏、国籍)
  • 演员阵容(配角、配角、补偿)
我不确定这个解决方案,有人能检查一下吗

SELECT *
FROM ACTOR
WHERE CODACTOR IN (
SELECT CODACTOR
FROM FILM NATURAL JOIN CAST
WHERE YEAR = 1980 AND YEAR = 1981 AND YEAR = 1982 AND YEAR = 1983 AND YEAR = 1984 AND YEAR = 1985)
ORDER BY COGNOME;
我认为的另一个解决方案是(更改子查询中的位置):


必须联接所有表,按参与者分组,并在having子句中设置条件:

SELECT a.CODACTOR, a.SURNAME, a.NAME
FROM ACTOR a 
INNER JOIN CAST c ON c.CODACTOR = a.CODACTOR
INNER JOIN FILM f ON f.CODFILM = c.CODFILM
WHERE f.YEAR BETWEEN 1980 AND 1985
GROUP BY a.CODACTOR, a.NAME, a.SURNAME
HAVING COUNT(DISTINCT f.YEAR) = 1985 - 1980 + 1
ORDER BY a.SURNAME, a.NAME

谢谢有时我用JOIN。连接和内部连接有什么区别?Just JOIN与内部连接相同。@Uomolepre,而
JOIN
Internal JOIN
是相同的(因此这取决于开发人员的偏好)。我仍然指定
内部
,以便快速区分
内部
左侧
右侧
完整
,以及(非常、非常、很少)交叉连接。有关更多信息,请查看
选择
文档。好的,我会的,谢谢你的建议
SELECT a.CODACTOR, a.SURNAME, a.NAME
FROM ACTOR a 
INNER JOIN CAST c ON c.CODACTOR = a.CODACTOR
INNER JOIN FILM f ON f.CODFILM = c.CODFILM
WHERE f.YEAR BETWEEN 1980 AND 1985
GROUP BY a.CODACTOR, a.NAME, a.SURNAME
HAVING COUNT(DISTINCT f.YEAR) = 1985 - 1980 + 1
ORDER BY a.SURNAME, a.NAME