如果我执行以下查询:
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)
我看到前面有6行20
和6行:SELECT 1 FROM emp e WHERE 20=e.deptno;
但这些查询是如何相关的?
答案 0 :(得分:3)
SELECT 1 FROM emp e WHERE 20=e.deptno;
查询根据您的where
条件选择行数,但您没有选择任何列值,而只选择1
这就是为什么它显示6行1
答案 1 :(得分:3)
有六行20 = e.deptno
,因此您在第二个查询中获得六个1
(顶部的第七个1
只是一个自动生成的列名称。)
答案 2 :(得分: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
如果您只过滤掉deptno
20,请执行以下操作:
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