?? 編程技巧 sql 使用子查詢選擇最末幾條數據.txt
字號:
作者:rick1126
email: rickzhang@sina.com.cn
日期:2001-4-15 9:50:52
BOTTOM ROWS USING SUBSELECT
你可以通過使用(>|<)從一個表格中獲得最后三條記錄:
要獲得前三條記錄:
Select username From dba_users outcust
Where 3 > (Select count(*)
From dba_users incust
Where outcust.username > incust.username)
order by username;
要獲得后三條記錄:
Select username From dba_users outcust
Where 3 > (Select count(*)
From dba_users incust
Where outcust.username < incust.username)
order by username;
USERNAME
---------
SYS
SYSTEM
TESTTTS
通過下面的結果分析可以更容易理解:
SQL>
Select outcust.username OUTCUST_USERNAME, incust.username INCUST_USERNAME
From dba_users incust, dba_users outcust
Where outcust.username < incust.username
order by outcust.username, incust.username
/
OUTCUST_USERNAME INCUST_USERNAME
---------------- ---------------
DBSNMP DMDEV
DBSNMP DMTEST
DBSNMP OUTLN
DBSNMP SYS
DBSNMP SYSTEM
DBSNMP TESTTTS
DMDEV DMTEST
DMDEV OUTLN
DMDEV SYS
DMDEV SYSTEM
DMDEV TESTTTS
DMTEST OUTLN
DMTEST SYS
DMTEST SYSTEM
DMTEST TESTTTS
OUTLN SYS
OUTLN SYSTEM
OUTLN TESTTTS
SYS SYSTEM
SYS TESTTTS
SYSTEM TESTTTS
21 rows selected.
注意: username 中具有最高比較值得記錄 (TESTTTS) 沒有顯示在左面的列中, 這顯示了兩件事:
1. 查詢允許較慢是因為產生了一個笛卡兒運算
2. 該查詢通過比較數字 -- 針對第三種情況 -- 來計算 where 子句需要的記錄數. 在第三種情況下, 3 大于 outcust_usernames 小于 incust_usernames. 這僅僅保留了三個值: SYS, SYSTEM 而且最低值沒有作為一個 outcust_username 列顯示, TESTTTS.
在使用這項技術的時候, 允許一個性能測試確保查詢可以在一個可以接收的時間范圍內運行.
-----------
Tim Quinlan
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -