我对以下两个查询感到困惑,为什么在主查询中出现'emplastname如'%t%'可以过滤'Tang'的记录?是否意味着两次使用它可以过滤大写?命令'%t%'不区分大小写,不是吗?
首先查询:
SELECT e.empno, e.emplastname, e.empphone, e.empcommrate
FROM employee e
WHERE e.empcommrate =
( SELECT max(empcommrate)
FROM employee
WHERE emplastname like '%t%');
empno | emplastname | empphone | empcommrate
E8843211 Tang (303) 556-4321 0.040
E9345771 White (303) 221-4453 0.040
第二次查询:
SELECT e.empno, e.emplastname, e.empphone, e.empcommrate
FROM employee e
WHERE e.emplastname like '%t%'
AND e.empcommrate =
( SELECT max(empcommrate)
FROM employee
WHERE emplastname like '%t%');
empno | emplastname | empphone | empcommrate
E9345771 White (303) 221-4453 0.040
答案 0 :(得分:4)
您首先查询说:
归还
empcommrate
等于最大值的所有员工empcommrate
任何名字中“t”的员工。{/ p>
你的第二个问题是:
归还所有姓名“t”且拥有“t”的员工
empcommrate
等于任何员工的最高empcommrate
他们名字中的“t”。
所以他们是两个不同的查询。要更清楚地看到差异,请考虑以下问题:
SELECT e.empno, e.emplastname, e.empphone, e.empcommrate
FROM employee e
WHERE e.empcommrate = 0.040;
和
SELECT e.empno, e.emplastname, e.empphone, e.empcommrate
FROM employee e
WHERE e.emplastname like '%t%'
AND e.empcommrate = 0.040;
在这些查询中,我将子选择替换为该子选择返回的值。您可以看到,子选择中的'%t%'不会限制最终返回的员工。
答案 1 :(得分:1)
案例1:内部查询获取值0.040,然后列出empcommrate = 0.040的所有员工 案例2:内部查询如前所述提取0.040,但现在您已经添加了一个附加条件,这些条件将仅列出姓氏中具有“t”(小写)的员工。注意Oracle中默认情况下字符串比较区分大小写。