熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL語言 >> 正文

SQL語句的22條法寶[2]

2013-11-13 12:39:33  來源: SQL語言 
    說明列示typevenderpcs字段以type字段排列case可以方便地實現多重選擇類似select 中的case
    select typesum(case vender when A then pcs else end)sum(case vender when C then pcs else end)sum(case vender when B then pcs else end) FROM tablename group by type
    顯示結果
    type vender pcs
    電腦 A
    電腦 A
    光盤 B
    光盤 A
    手機 B
    手機 C

    說明選擇從的記錄
    select top * from (select top * from table order by id asc) table_別名 order by id desc
      
    隨機選擇數據庫記錄的方法(使用Randomize函數通過SQL語句實現)
    對存儲在數據庫中的數據來說隨機數特性能給出上面的效果但它們可能太慢了些你不能要求ASP找個隨機數然後打印出來實際上常見的解決方案是建立如下所示的循環
    Randomize
    RNumber = Int(Rnd*) +
    While Not objRecEOF
    If objRec(ID) = RNumber THEN
     這裡是執行腳本
    end if
    objRecMoveNext
    Wend

    這很容易理解首先你取出范圍之內的一個隨機數(假設就是數據庫內記錄的總數)然後你遍歷每一記錄來測試ID 的值檢查其是否匹配RNumber滿足條件的話就執行由THEN 關鍵字開始的那一塊代碼假如你的RNumber 等於那麼要循環一遍數據庫花的時間可就長了雖然這個數字看起來大了些但相比更為穩固的企業解決方案這還是個小型數據庫了後者通常在一個數據庫內就包含了成千上萬條記錄這時候不就死定了?采用SQL你就可以很快地找出准確的記錄並且打開一個只包含該記錄的recordset如下所示
    Randomize
    RNumber = Int(Rnd*) +
    SQL = SELECT * FROM Customers WHERE ID = & RNumber
    set objRec = ObjConnExecute(SQL)
    ResponseWriteRNumber & = & objRec(ID) & & objRec(c_email)
    不必寫出RNumber 和ID你只需要檢查匹配情況即可只要你對以上代碼的工作滿意你自可按需操作隨機記錄Recordset沒有包含其他內容因此你很快就能找到你需要的記錄這樣就大大降低了處理時間

    再談隨機數
    現在你下定決心要搾干Random 函數的最後一滴油那麼你可能會一次取出多條隨機記錄或者想采用一定隨機范圍內的記錄把上面的標准Random 示例擴展一下就可以用SQL應對上面兩種情況了

    為了取出幾條隨機選擇的記錄並存放在同一recordset內你可以存儲三個隨機數然後查詢數據庫獲得匹配這些數字的記錄
    SQL = SELECT * FROM Customers WHERE ID = & RNumber & OR ID = & RNumber & OR ID = & RNumber

    假如你想選出條記錄(也許是每次頁面裝載時的條鏈接的列表)你可以用BETWEEN 或者數學等式選出第一條記錄和適當數量的遞增記錄這一操作可以通過好幾種方式來完成但是 SELECT 語句只顯示一種可能(這裡的ID 是自動生成的號碼)
    SQL = SELECT * FROM Customers WHERE ID BETWEEN & RNumber & AND & RNumber & +  

    注意以上代碼的執行目的不是檢查數據庫內是否有條並發記錄

    隨機讀取若干條記錄測試過
    Access語法SELECT top * From 表名 ORDER BY Rnd(id)
    Sql server語法select top n * from 表名 order by newid()
    MySql語法Select * From 表名 Order By rand() Limit n
    Access左連接語法(最近開發要用左連接Access幫助什麼都沒有網上沒有Access的SQL說明只有自己測試 現在記下以備後查)
    語法Select tablefdtablefdtablefd From table left join table on tablefdtablefd where
    使用SQL語句 用代替過長的字符串顯示
    語法
    SQL數據庫select case when len(field)> then left(field)+ else field end as news_namenews_id from tablename
    Access數據庫SELECT iif(len(field)>left(field)+field) FROM tablename;

[]  []  []  


From:http://tw.wingwit.com/Article/program/SQL/201311/16331.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.