要用到的表以下
書上寫到,上面的查詢結果排序是隨機的,再執行幾回結果可能不一樣,可是我執行屢次後,查詢結果的排序都是如此,是由於oracle的默認處理方式是按照物理儲存順序查詢的,而我在插入記錄的時候都是按照id順序插入的,因此查詢出來的結果好像是按照id來排序的同樣,實際上並非。
若是要對查詢結果排序,能夠使用ORDER BY子句。sql
SELECT <列名1> <列名2> <列名3>... FROM <表名> ORDER BY<排序基準列1> <排序基準列2>...;
例如按照售價從高到低排序查詢結果:oracle
SELECT * FROM Product ORDER BY sale_price DESC;
若是是從低到高,就把DESC換成ASC。若是ORDER BY子句沒有指定排列順序,默認使用升序排序。
若是排序基準列有相同的值,那麼相同的值排序順序又會隨機。那麼能夠指定多個排序基準列,查詢結果會優先按照左邊的標準排序,若是同樣,再考慮右邊的標準。如3d
SELECT * FROM Product ORDER BY sale_price ,product_id;
這樣就會優先按照售價的升序排列,若是售價同樣,就按照商品id排序。
若是排序鍵中有NULL值,那麼含NULL的記錄會在結果開頭或者結尾彙總,oracle是在查詢結果開頭彙總。code
列表號是指SELECT子句的列按照從左到右的編號。ORDER BY子句能夠經過列編號排序,如blog
SELECT product_id,product_name, sale_price FROM Product ORDER BY 3 DESC;
可是不推薦這樣用,由於閱讀很麻煩。並且該功能之後可能會被刪除。排序
ORDER BY能夠使用別名,可是GROUP不能使用別名。由於SELECT的語句執行順序實際上是:
FROM——WHERE——GROUP BY——HAVING——SELECT——ORDER BY
設置別名是在SELECT這裏設置的,因此在它以前的GROUP BY是不能使用別名的。class