SQL的ORDER BY 的使用注意

2021-08-30 11:04:24 字數 1593 閱讀 1098

專案中我寫了一條sql語句

select

s.student_number as studentnumber,

s. name,

s.***,

class. name as studentclass,

m. name as professiona,

d. name as department,

c. name as college

from

student_info as s,

major as m,

department as d,

college as c,

class

where

s.student_number not in (

select

b.student_id

from

bed as b

where

b.student_id is not null

)and s.class_id = class.id

and class.major_id = m.id

and m.department_id = d.id

and d.college_id = c.id

order by s.student_number

limit 0,13

乍眼一看,是沒有問題的,在資料量少的時候也是可以跑得動,當我們拿到實際專案使用中的時候發現,sql跑不動了,按照我的想法是,因為在外部進行了多重的關聯,當資料量大的時候關聯的資料也需要排序。基於這一點我就把sql修改為下面的形式,然後sql就能跑了。

select

s.student_number as studentnumber,

s. name,

s.***,

class. name as studentclass,

m. name as professiona,

d. name as department,

c. name as college

from

student_info as s,

major as m,

department as d,

college as c,

class

where

s.student_number not in (

select

b.student_id

from

bed as b

where

b.student_id is not null

order by

b.student_id

)and s.class_id = class.id

and class.major_id = m.id

and m.department_id = d.id

and d.college_id = c.id

limit 0,13

通過這個事件我忽然想到,sql的排序不一定也不能完全放在最外面,當資料量大或外連線多的時候,能早一步進行排序就早一步進行排序,這樣也算是對sql的一種優化

group by和order by配合使用注意

對於sql server來說 group by和order by同時存在的情況是,order by對group by後的結果再進行排序的,所以order by後面的排序字段需要在select裡出現的,即orderby子句中的列必須包含在聚合函式或groupby子句中。如 下面這個就是錯的 sql c...

SQL游標中Order By的使用限制

在建立游標的select語句中使用了order by子句,與非游標中select語句中的order by子句不同,只有在查詢的select子句中出現的列才可以作為order by子句中出現的列。例子 declare book cusor cursor forselect bookid,booknam...

sql手注的思路

1.首先,你需要乙個好的靶場練習和題型模擬,我在這裡給大家推薦一些,比如 烽神台等,簡單註冊即可。以貓舍為例 1.尋找注入點 一般去和資料庫互動的地方找,構造 and 1 1 回車 構造 and 1 2 回車 如果第一次頁面不變,第二次頁面異常的話,可能存在注入點 2.判斷字段數 目的 找到有幾列,...