SQL:这两个查询之间有区别吗
给定此数据库模式: 以下两个查询之间是否存在差异:SQL:这两个查询之间有区别吗,sql,Sql,给定此数据库模式: 以下两个查询之间是否存在差异: SELECT NAME, MIN(MOVIEYEAR - YEAR(BIRTHDATE)) AS DEBUT_AGE FROM STARSIN JOIN MOVIESTAR ON STARNAME = NAME GROUP BY NAME; SELECT NAME, MOVIEYEAR - YEAR(BIRTHDATE) AS DEBUT_AGE FROM MOVIESTAR LEFT JOIN STARSIN ON NAME = STAR
SELECT NAME, MIN(MOVIEYEAR - YEAR(BIRTHDATE)) AS DEBUT_AGE
FROM STARSIN
JOIN MOVIESTAR ON STARNAME = NAME
GROUP BY NAME;
SELECT NAME, MOVIEYEAR - YEAR(BIRTHDATE) AS DEBUT_AGE
FROM MOVIESTAR
LEFT JOIN STARSIN ON NAME = STARNAME
WHERE MOVIEYEAR IS NOT NULL
GROUP BY NAME
HAVING MIN(MOVIEYEAR);
我想他们会返回相同的结果,我错了吗?你的第二个条件是不完整的。
第二个也会跳过第一个未处理的Movieyear为NULL的任何行(当然,这可能是多余的,取决于Movieyear是否为NULL)第二个不应该编译-在
HAVING MIN(Movieyear)
之后需要一些东西,比如HAVING MIN(Movieyear)='2010'
为什么不运行它们并查看它生成的结果或执行计划?您是否尝试运行这两个程序以查看它们是否返回相同的结果?什么;通过空检查将内部联接
转换为左联接
的意义是什么?您使用的是哪种DBMS?@DanielRusev您使用的是哪种数据库服务器?我从未见过一个系统允许在没有操作员的情况下拥有。有MIN(MOVIEYEAR)
应该是什么意思?MOVIEYEAR不可为null,因为它是主键的一部分,所以,我认为,两个查询都会跳过MOVIEYEAR可能为null的行。是的,那么就不需要where MOVIEYEAR不为null。第二个条件如何,您希望它做什么?