查询类似于'%t%'不区分大小写?为什么使用它两次显示不同的结果?

时间:2014-10-27 07:06:46

标签: sql

我对以下两个查询感到困惑,为什么在主查询中出现'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

2 个答案:

答案 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中默认情况下字符串比较区分大小写。