專案中我寫了一條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.判斷字段數 目的 找到有幾列,...