今天我們來說sql命令中得參數top
top
- top【 最前面若干個記錄,專屬於SqlServer2005的語法,不可移植到其他庫。oracle中是用rownum<6來實現輸出前5行記錄。】
下面我們引入一個題目來分析一下這個top參數
請查詢在scott這個庫中的emp表的前三條記錄
select top 3 * from emp // --這里的top 3是指前3條記錄,*是指所有字段的值
// -- 所以在執行的時候首先會找到emp表,然后開始查詢表中的
//-- 第一條記錄,發現符合top 3 這個參數的特質,於是就輸出
//-- 這條記錄的所有字段的值
//--然后開始查詢第二條記錄......一直這樣查詢下去,直到查詢
//--到第四條記錄的時候
//--發現不符合這個top 3這個參數的特征,於是
//--就,不進行輸出了,也不在進行下一條記錄的查詢了
下面我們來看一下上面這一條sql命令所執行的結果

我們可以發現只輸出了前emp表的前三條記錄
- top還可以和百分比的結合的來使用。
例如
select top 15 percent * from emp //--這里我們可以把top 15 percent作為一個整體
//-- 表示輸出emp表的前%15個記錄
//-- 注意:如果表的前%15不是一個整數的話
// -- 就進位
//-- 假如emp表有14條,那么14*%15=2.1。
//-- 則就會輸出前三條記錄的所有字段的值
//-- 執行的順序的話,可以參照上一條sal命令的
//注釋
下面我們來看一下上面這一條sql命令所執行的結果

我們會發現,也只輸出了emp表前面的三條記錄
- 注意下面這條sql命令是錯誤的
select top 2 from emp //之所以這條命令是錯誤的,是因為當,查詢到前面兩條記錄的時
//侯,這條sql命令卻並沒有有告訴你應該查詢那個字段的值
//或者那幾個字段的值,或者所有字段的值
我們再來分析一個題目
- --把工資在1500到3000(包括1500 到3000)員工的工資最高前4個按降序輸出
select top 4 * (4)
from emp (1)
where sal between 1500 and 3000 (2)
order by sal desc(3)
//-- order by 是排序的意思,以后我會詳細的說,desc是降序的意思,默認情況下是升序的意思。
//--我們來看這個命令的執行情況
//--首先會執行(1)步找到emp這個表,然后查詢第一條記錄
//--然后執行第(2)步where后面的語句,對原始的數據進行過濾
// --然后會執行(3)步,按照sal這個字段進行降序排序。
//--注意這個第(3)步這個sql命令不好理解,我認為,在這個sql命令的底層中應該用了某種算法。
//-- 當第一次執行到order by sal desc的時候,他應該就能遍歷整個emp表然后按照sal這個字段的值降序。
//-- 然后就會執行最后的第(4)步
下面我們來看一下上面這一條sql命令所執行的結果

我們可以發現輸出的是4條記錄,sal這個字段的值都是在1500到3000這個范圍,並且這個字段的值是降序的
今天的這一講就到這里,下一講我們來講 null參數
***如果你們還有什么不懂的,可以加我qq485536603
