为什么两个SQL语句的结果不同?

时间:2019-08-14 04:20:51

标签: sql

 SELECT 0100002562 
 FROM 
     (SELECT KEHHAO FROM FIL_BDSKH) FIL_BDSKH

结果:323行

 SELECT KEHHAO 
 FROM FIL_BDSKH 
 WHERE KEHHAO = 0100002562

结果:1​​行

3 个答案:

答案 0 :(得分:1)

 SELECT 0100002562 
 FROM 
 (SELECT KEHHAO FROM FIL_BDSKH) FIL_BDSKH

返回FIL_BDSKH中的所有行,因为您没有WHERE的“选择”。 (SELECT KEHHAO FROM FIL_BDSKH)返回所有行,因此也返回非子查询。

 SELECT KEHHAO 
 FROM FIL_BDSKH 
 WHERE KEHHAO = 0100002562

返回1行,因为您只有KEHHAO = 0100002562一行。 “ WHERE”将返回此特定行。

答案 1 :(得分:0)

这样想:

select 8 from employee;  // this will return 8 the number of times there are as many 
columns in employee table

其中

select sal from employee where sal=200;//here the where will filter the rows 
according to the column having value of 200 

所以在您的情况下:

SELECT 0100002562 
FROM
(SELECT KEHHAO FROM FIL_BDSKH) FIL_BDSKH

这将打印数字,与kehhao被选择的行数一样多。和

 SELECT KEHHAO 
 FROM FIL_BDSKH 
 WHERE KEHHAO = 0100002562

将过滤具有kahhao列等于0100002562的行,并打印该列本身

答案 2 :(得分:0)

这是因为在选择查询中放入硬编码值并不意味着默认情况下会像在第一个查询中一样进行匹配

      SELECT 0100002562 
      FROM 
    (SELECT KEHHAO FROM FIL_BDSKH) 
     FIL_BDSKH

外部查询将打印多次。内部查询从FIL_BDSKH返回值。它不是等于等于的外部硬编码值0100002562 FROM KENHAO会给您。 同时,

在第二个查询中,实际过滤是在where子句中执行的,这意味着在323行中有1行匹配。

         SELECT KEHHAO 
       FROM FIL_BDSKH 
      WHERE KEHHAO = 0100002562