2013-04-21 73 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只是一個自動生成的列名稱)。