-1

如果我执行以下查询:
SELECT 1 FROM emp;

我得到:

mysql> SELECT 1 FROM emp;  
+---+  
| 1 |  
+---+  
| 1 |  
| 1 |  
| 1 |  
| 1 |  
| 1 |  
| 1 |  
| 1 |  
| 1 |  
| 1 |  
| 1 |  
| 1 |  
| 1 |  
| 1 |  
| 1 |  
| 1 |  
+---+  

如果我做:

SELECT 1 FROM emp e WHERE 20=e.deptno; 我得到:

mysql> SELECT 1 FROM emp e WHERE 20=e.deptno;  
+---+  
| 1 |   
+---+  
| 1 |  
| 1 |   
| 1 |   
| 1 |   
| 1 |   
| 1 |    
+---+  
6 rows in set (0.00 sec)   

如果我这样做:

mysql> SELECT deptno FROM emp;  
+--------+  
| deptno |  
+--------+  
|     10 |   
|     10 |   
|     10 |   
|     20 |   
|     20 |   
|     20 |   
|     20 |   
|     20 |   
|     20 |  
|     30 |  
|     30 |  
|     30 |  
|     30 |  
|     30 |  
|    100 |  
+--------+  
15 rows in set (0.00 sec)  

20我看到前面 有 6 行和 6 行:SELECT 1 FROM emp e WHERE 20=e.deptno;

但是这些查询有什么关系呢?

4

3 回答 3

3
SELECT 1 FROM emp e WHERE 20=e.deptno;

查询根据您的where条件选择行数,但您没有选择任何列值,而不仅仅是选择1这就是为什么它显示 6 行1

于 2013-04-21T20:16:49.020 回答
3

有六行20 = e.deptno,因此您1在第二个查询中得到六个(1顶部的第七个只是自动生成的列名)。

于 2013-04-21T20:17:41.107 回答
3

如果选择deptno和 文字值,如下所示:

SELECT 1, deptno FROM emp

你得到:

1   10
1   10
1   10
1   20
1   20
1   20
1   20
1   20
1   20
1   30
1   30
1   30
1   30
1   30
1  100

如果你只过滤掉deptno20 个,像这样:

SELECT 1, deptno FROM emp where deptno = 20

你得到上一个查询的这个子集:

1   20
1   20
1   20
1   20
1   20
1   20

如果你从结果中遗漏了deptno

SELECT 1 FROM emp where deptno = 20

你只得到那些:

1
1
1
1
1
1
于 2013-04-21T20:21:24.323 回答