ORACLESQL:Can有人给我解释一下这两者的区别吗?
ORACLE SQL:Can someone explain me the difference between these two?
我是一名学生,这是我学习 Oracle 的第一年 SQL。在考试中,我使用了这个代码:
SELECT department_id,MAX(salary)
FROM employees
GROUP BY department_id
HAVING INSTR(TO_CHAR(department_id),'5')!=1 AND MAX(salary)<1000;
教授说我应该使用类似
的东西
SELECT DEPARTMENT_ID, MAX(SALARY)
FROM EMPLOYEES
WHERE SUBSTR(TO_CHAR(DEPARTMENT_ID),1,1)<>'5'
GROUP BY DEPARTMENT_ID
HAVING MAX(SALARY) < 1000;
我们得到了相同的 table 所以我的问题是这两者何时可以显示不同的结果。我知道数据处理是不同的,但正如他所说,这不是问题所在。问题不在于使用 INSTR 函数,而在于不使用 WHERE。
Where 子句作用于行的原始内容
因此您过滤了针对 select 子句
评估的数据集
WHERE SUBSTR(TO_CHAR(DEPARTMENT_ID),1,1)<>'5'
不要 select 带有
的行
SUBSTR(TO_CHAR(DEPARTMENT_ID),1,1)='5'
所以这些行不用于
SELECT DEPARTMENT_ID, MAX(SALARY) ..GROUP BY DEPARTMENT_ID
HAVING 处理 selected 结果的结果,因此也应处理带有 SUBSTR(TO_CHAR(DEPARTMENT_ID),1,1)='5' 的行
在您的情况下,列 DEPARTMENT_ID 的每个值总是 selected 因为在分组依据中被提及,然后两个查询应该 return 相同的结果
我是一名学生,这是我学习 Oracle 的第一年 SQL。在考试中,我使用了这个代码:
SELECT department_id,MAX(salary)
FROM employees
GROUP BY department_id
HAVING INSTR(TO_CHAR(department_id),'5')!=1 AND MAX(salary)<1000;
教授说我应该使用类似
的东西SELECT DEPARTMENT_ID, MAX(SALARY)
FROM EMPLOYEES
WHERE SUBSTR(TO_CHAR(DEPARTMENT_ID),1,1)<>'5'
GROUP BY DEPARTMENT_ID
HAVING MAX(SALARY) < 1000;
我们得到了相同的 table 所以我的问题是这两者何时可以显示不同的结果。我知道数据处理是不同的,但正如他所说,这不是问题所在。问题不在于使用 INSTR 函数,而在于不使用 WHERE。
Where 子句作用于行的原始内容 因此您过滤了针对 select 子句
评估的数据集 WHERE SUBSTR(TO_CHAR(DEPARTMENT_ID),1,1)<>'5'
不要 select 带有
的行SUBSTR(TO_CHAR(DEPARTMENT_ID),1,1)='5'
所以这些行不用于
SELECT DEPARTMENT_ID, MAX(SALARY) ..GROUP BY DEPARTMENT_ID
HAVING 处理 selected 结果的结果,因此也应处理带有 SUBSTR(TO_CHAR(DEPARTMENT_ID),1,1)='5' 的行
在您的情况下,列 DEPARTMENT_ID 的每个值总是 selected 因为在分组依据中被提及,然后两个查询应该 return 相同的结果