2013-04-21 51 views
-1

如果我下面的查询:
SELECT 1 FROM emp;困惑在SELECT 1 FROM

我得到:

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

其实我不认为这个问题应该被关闭。是的,它显示了对SQL选择如何工作的知识缺乏,但它不太定位。 – 2013-04-22 10:50:15

回答

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 
3
SELECT 1 FROM emp e WHERE 20=e.deptno; 

查询选择行根据您的where条件的号码,但你不选择任何列值,而不是只选择1这就是为什么它是表示具有1

3

没有与20 = e.deptno六行6列,因此您在第二个查询中获得六个1(上面的第七个1只是一个自动生成的列名称)。