青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

tbwshc

tbw

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  95 Posts :: 8 Stories :: 3 Comments :: 0 Trackbacks

常用鏈接

留言簿(4)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

六、子查詢的用法

子查詢是一個 SELECT 查詢,它嵌套在 SELECT、INSERT、UPDATE、DELETE 語句或其它子查詢中。

任何允許使用表達式的地方都可以使用子查詢,子查詢可以使我們的編程靈活多樣,可以用來實現一些特殊的功能。但是在性能上,

往往一個不合適的子查詢用法會形成一個性能瓶頸。如果子查詢的條件中使用了其外層的表的字段,這種子查詢就叫作相關子查詢。

相關子查詢可以用IN、NOT IN、EXISTS、NOT EXISTS引入。 關于相關子查詢,應該注意:

(1)

A、NOT IN、NOT EXISTS的相關子查詢可以改用LEFT JOIN代替寫法。

比如: SELECT PUB_NAME FROM PUBLISHERS WHERE PUB_ID NOT IN (SELECT PUB_ID FROM TITLES WHERE TYPE = 'BUSINESS') 可以改寫成: SELECT A.PUB_NAME FROM PUBLISHERS A LEFT JOIN TITLES B ON B.TYPE = 'BUSINESS' AND A.PUB_ID=B. PUB_ID WHERE B.PUB_ID IS NULL

(2)

  1. SELECT TITLE FROM TITLES  
  2. WHERE NOT EXISTS  
  3. (SELECT TITLE_ID FROM SALES  
  4. WHERE TITLE_ID = TITLES.TITLE_ID) 

可以改寫成:

  1. SELECT TITLE  
  2. FROM TITLES LEFT JOIN SALES  
  3. ON SALES.TITLE_ID = TITLES.TITLE_ID  
  4. WHERE SALES.TITLE_ID IS NULL 

B、 如果保證子查詢沒有重復 ,IN、EXISTS的相關子查詢可以用INNER JOIN 代替。比如:

  1. SELECT PUB_NAME  
  2. FROM PUBLISHERS  
  3. WHERE PUB_ID IN 
  4. (SELECT PUB_ID  
  5. FROM TITLES  
  6. WHERE TYPE = 'BUSINESS'

可以改寫成:

  1. SELECT A.PUB_NAME --SELECT DISTINCT A.PUB_NAME  
  2. FROM PUBLISHERS A INNER JOIN TITLES B  
  3. ON B.TYPE = 'BUSINESS' AND 
  4. A.PUB_ID=B. PUB_ID 

(3)

C、 IN的相關子查詢用EXISTS代替,比如

  1. SELECT PUB_NAME FROM PUBLISHERS  
  2. WHERE PUB_ID IN 
  3. (SELECT PUB_ID FROM TITLES WHERE TYPE = 'BUSINESS'

可以用下面語句代替:

  1. SELECT PUB_NAME FROM PUBLISHERS WHERE EXISTS  
  2. (SELECT 1 FROM TITLES WHERE TYPE = 'BUSINESS' AND 
  3. PUB_ID= PUBLISHERS.PUB_ID) 

D、不要用COUNT(*)的子查詢判斷是否存在記錄,最好用LEFT JOIN或者EXISTS,比如有人寫這樣的語句:

  1. SELECT JOB_DESC FROM JOBS  
  2. WHERE (SELECT COUNT(*) FROM EMPLOYEE WHERE JOB_ID=JOBS.JOB_ID)=0 

應該改成:

  1. SELECT JOBS.JOB_DESC FROM JOBS LEFT JOIN EMPLOYEE  
  2. ON EMPLOYEE.JOB_ID=JOBS.JOB_ID  
  3. WHERE EMPLOYEE.EMP_ID IS NULL 
  4. SELECT JOB_DESC FROM JOBS  
  5. WHERE (SELECT COUNT(*) FROM EMPLOYEE WHERE JOB_ID=JOBS.JOB_ID)<>0 

應該改成:

  1. SELECT JOB_DESC FROM JOBS  
  2. WHERE EXISTS (SELECT 1 FROM EMPLOYEE WHERE JOB_ID=JOBS.JOB_ID) 


七:盡量使用索引

建立索引后,并不是每個查詢都會使用索引,在使用索引的情況下,索引的使用效率也會有很大的差別。只要我們在查詢語句中沒有強制指定索引,

索引的選擇和使用方法是SQLSERVER的優化器自動作的選擇,而它選擇的根據是查詢語句的條件以及相關表的統計信息,這就要求我們在寫SQL

語句的時候盡量使得優化器可以使用索引。為了使得優化器能高效使用索引,寫語句的時候應該注意:

A、不要對索引字段進行運算,而要想辦法做變換,比如

SELECT ID FROM T WHERE NUM/2=100

應改為:

SELECT ID FROM T WHERE NUM=100*2

-------------------------------------------------------

SELECT ID FROM T WHERE NUM/2=NUM1

如果NUM有索引應改為:

SELECT ID FROM T WHERE NUM=NUM1*2

如果NUM1有索引則不應該改。

--------------------------------------------------------------------

發現過這樣的語句:

SELECT 年,月,金額 FROM 結余表 WHERE 100*年+月=2010*100+10

應該改為:

SELECT 年,月,金額 FROM 結余表 WHERE 年=2010 AND月=10

B、 不要對索引字段進行格式轉換

日期字段的例子:

WHERE CONVERT(VARCHAR(10), 日期字段,120)='2010-07-15'

應該改為

WHERE日期字段〉='2010-07-15' AND 日期字段<'2010-07-16'

ISNULL轉換的例子:

WHERE ISNULL(字段,'')<>''應改為:WHERE字段<>''

WHERE ISNULL(字段,'')=''不應修改

WHERE ISNULL(字段,'F') ='T'應改為: WHERE字段='T'

WHERE ISNULL(字段,'F')<>'T'不應修改

C、 不要對索引字段使用函數

WHERE LEFT(NAME, 3)='ABC' 或者WHERE SUBSTRING(NAME,1, 3)='ABC'

應改為: WHERE NAME LIKE 'ABC%'

日期查詢的例子:

WHERE DATEDIFF(DAY, 日期,'2010-06-30')=0

應改為:WHERE 日期>='2010-06-30' AND 日期 <'2010-07-01'

WHERE DATEDIFF(DAY, 日期,'2010-06-30')>0

應改為:WHERE 日期 <'2010-06-30'

WHERE DATEDIFF(DAY, 日期,'2010-06-30')>=0

應改為:WHERE 日期 <'2010-07-01'

WHERE DATEDIFF(DAY, 日期,'2010-06-30')<0

應改為:WHERE 日期>='2010-07-01'

WHERE DATEDIFF(DAY, 日期,'2010-06-30')<=0

應改為:WHERE 日期>='2010-06-30'

D、不要對索引字段進行多字段連接

比如:

WHERE FAME+ '. '+LNAME='HAIWEI.YANG'

應改為:

WHERE FNAME='HAIWEI' AND LNAME='YANG'

八:多表連接的連接條件對索引的選擇有著重要的意義,所以我們在寫連接條件條件的時候需要特別注意。

A、多表連接的時候,連接條件必須寫全,寧可重復,不要缺漏。

B、連接條件盡量使用聚集索引

C、注意ON、WHERE和HAVING部分條件的區別

ON是最先執行, WHERE次之,HAVING最后,因為ON是先把不符合條件的記錄過濾后才進行統計,它就可以減少中間運算要處理的數據,按理說應該速度是最快的,WHERE也應該比 HAVING快點的,因為它過濾數據后才進行SUM,在兩個表聯接時才用ON的,所以在一個表的時候,就剩下WHERE跟HAVING比較了

1考慮聯接優先順序:

2INNER JOIN

3LEFT JOIN (注:RIGHT JOIN 用 LEFT JOIN 替代)

4CROSS JOIN

其它注意和了解的地方有:

A、在IN后面值的列表中,將出現最頻繁的值放在最前面,出現得最少的放在最后面,減少判斷的次數

B、注意UNION和UNION ALL的區別。--允許重復數據用UNION ALL好

C、注意使用DISTINCT,在沒有必要時不要用

D、TRUNCATE TABLE 與 DELETE 區別

E、減少訪問數據庫的次數

還有就是我們寫存儲過程,如果比較長的話,最后用標記符標開,因為這樣可讀性很好,即使語句寫的不怎么樣但是語句工整,C# 有region

sql我比較喜歡用的就是

  1. --startof 查詢在職人數  
  2.           sql語句  
  3. --end of 

正式機器上我們一般不能隨便調試程序,但是很多時候程序在我們本機上沒問題,但是進正式系統就有問題,但是我們又不能隨便在正式機器上操作,那么怎么辦呢?我們可以用回滾來調試我們的存儲過程或者是sql語句,從而排錯。

  1. BEGIN TRAN  
  2.    UPDATE a SET 字段='' 
  3. ROLLBACK 

作業存儲過程我一般會加上下面這段,這樣檢查錯誤可以放在存儲過程,如果執行錯誤回滾操作,但是如果程序里面已經有了事務回滾,那么存儲過程就不要寫事務了,這樣會導致事務回滾嵌套降低執行效率,但是我們很多時候可以把檢查放在存儲過程里,這樣有利于我們解讀這個存儲過程,和排錯。

  1. BEGIN TRANSACTION 
  2. --事務回滾開始  
  3. --檢查報錯  
  4. IF ( @@ERROR > 0 )  
  5.         BEGIN 
  6.         --回滾操作  
  7.                 ROLLBACK TRANSACTION 
  8.                 RAISERROR('刪除工作報告錯誤', 16, 3)  
  9.                 RETURN 
  10.         END 
  11. --結束事務  
  12. COMMIT TRANSACTION 

好久沒有寫博文了,工作項目一個接一個,再加上公司人員流動,新人很多事情接不下來,加班成了家常便飯,倉促寫下這些希望對大家有幫助,不對的也歡迎指點,交流互相提高。

有錯誤的地方歡迎大家拍磚,希望交流和共享。

 

posted on 2012-07-01 12:17 tbwshc 閱讀(1010) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区日韩在线| 久久国产加勒比精品无码| 另类酷文…触手系列精品集v1小说| 亚洲一区视频在线观看视频| 国产精品久久久久一区二区三区| 亚洲视频一区在线观看| 这里只有精品视频在线| 国产日韩欧美精品在线| 久久亚洲精品欧美| 麻豆精品在线视频| 9i看片成人免费高清| 一区二区三区四区国产精品| 国产美女高潮久久白浆| 狂野欧美激情性xxxx| 免费人成精品欧美精品| 夜夜夜精品看看| 午夜国产不卡在线观看视频| 极品中文字幕一区| 99re在线精品| 韩国一区二区三区美女美女秀| 男女精品视频| 国产精品扒开腿爽爽爽视频| 久久精品亚洲一区二区三区浴池| 玖玖玖国产精品| 亚洲午夜一级| 久久夜色精品国产噜噜av| aa国产精品| 久久久99国产精品免费| 一本色道久久88综合亚洲精品ⅰ| 欧美在现视频| 亚洲午夜电影网| 毛片基地黄久久久久久天堂 | 亚洲视频一区二区在线观看| 国产区亚洲区欧美区| 欧美大片免费观看| 国产精品网站视频| 亚洲国产一区二区a毛片| 国产精品色午夜在线观看| 欧美护士18xxxxhd| 国产午夜亚洲精品理论片色戒| 亚洲黄色免费电影| 黄色成人在线免费| 亚洲在线成人| 亚洲视屏在线播放| 欧美成人一品| 另类激情亚洲| 国产资源精品在线观看| 亚洲香蕉伊综合在人在线视看| 亚洲激情中文1区| 久久精品国产免费看久久精品 | 国产亚洲综合性久久久影院| 亚洲三级影院| 亚洲人成在线观看| 久久久xxx| 久久亚洲精选| 国产日韩欧美在线播放不卡| 一本色道久久综合亚洲精品小说| 亚洲激情校园春色| 久久久久久久久久久久久女国产乱| 午夜精品福利一区二区三区av| 欧美日韩国产一区二区| 亚洲国产综合91精品麻豆| 136国产福利精品导航| 久久精品一二三| 老司机亚洲精品| 在线观看成人av| 久久久一本精品99久久精品66| 久久精品一区二区三区不卡| 国产亚洲美州欧州综合国| 午夜精彩国产免费不卡不顿大片| 亚洲欧美日韩国产一区二区| 国产精品乱码人人做人人爱| 中文亚洲免费| 久久国产精品99久久久久久老狼| 国产伦精品一区二区三区四区免费| 亚洲视频成人| 久久精品一区四区| 极品日韩久久| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美电影免费| 亚洲精品中文字幕有码专区| 欧美日产在线观看| 亚洲视频专区在线| 久久精品国产视频| 在线看片欧美| 欧美绝品在线观看成人午夜影视| 亚洲精品久久久一区二区三区| 一区二区三区 在线观看视| 欧美天堂亚洲电影院在线播放 | 麻豆精品一区二区综合av| 在线免费不卡视频| 欧美片第1页综合| 亚洲综合色噜噜狠狠| 快播亚洲色图| 一本色道久久综合亚洲精品不| 国产精品久久毛片a| 久久经典综合| 日韩小视频在线观看| 欧美一区二区三区婷婷月色| 永久555www成人免费| 欧美日韩国内| 久久国产精彩视频| 亚洲精品免费一二三区| 久久av最新网址| 一本色道婷婷久久欧美| 国产在线日韩| 欧美午夜一区二区三区免费大片| 久久国产精品高清| 99亚洲精品| 欧美96在线丨欧| 欧美影院久久久| 99精品国产热久久91蜜凸| 欧美国产欧美综合| 亚洲欧美国产日韩天堂区| 亚洲黄网站在线观看| 国产乱码精品| 欧美日韩精品系列| 免费成人网www| 欧美一区二区三区四区高清| 亚洲精选中文字幕| 亚洲第一网站| 久色婷婷小香蕉久久| 午夜久久久久久| 一区二区三区欧美视频| 亚洲国产高清在线观看视频| 国产目拍亚洲精品99久久精品| 欧美精品日韩www.p站| 久久久综合免费视频| 欧美尤物巨大精品爽| 亚洲夜晚福利在线观看| 9国产精品视频| 亚洲日本va午夜在线影院| 亚洲二区视频| 欧美激情小视频| 欧美韩国一区| 欧美黄色一级视频| 欧美福利电影网| 欧美成人影音| 欧美国产成人精品| 欧美激情五月| 亚洲国产精品激情在线观看| 亚洲成色777777女色窝| 欧美高清在线视频观看不卡| 老司机亚洲精品| 欧美高潮视频| 亚洲夫妻自拍| 亚洲狼人综合| 在线一区日本视频| 亚洲自拍偷拍麻豆| 欧美一区二区三区在线免费观看 | 先锋a资源在线看亚洲| 亚洲视频观看| 香蕉视频成人在线观看 | 亚洲国产精品欧美一二99| 亚洲承认在线| 日韩午夜av在线| 亚洲综合色婷婷| 久久成人精品视频| 免费视频亚洲| 欧美日韩一区国产| 国产日韩欧美精品| 极品裸体白嫩激情啪啪国产精品| 亚洲福利精品| 中文欧美在线视频| 午夜精品久久久久| 久久久久久自在自线| 欧美岛国在线观看| 日韩写真视频在线观看| 亚洲欧美日韩国产综合| 久久亚洲美女| 欧美日韩高清在线播放| 国产精品视频免费观看www| 国产一区二区三区奇米久涩 | 国产伦精品一区二区三区视频孕妇 | 欧美激情亚洲一区| 国产精品一区二区三区观看| 国内揄拍国内精品少妇国语| 亚洲片在线资源| 欧美一级夜夜爽| 欧美国产一区在线| 亚洲一区二区三区在线| 久久免费视频在线观看| 欧美午夜电影网| 在线精品视频一区二区三四| 亚洲淫性视频| 亚洲电影免费在线观看| 亚洲欧美电影院| 欧美日韩第一页| 伊人狠狠色j香婷婷综合| 亚洲影视在线播放| 欧美黄色免费| 久久国产精品黑丝| 欧美性猛交xxxx免费看久久久| 亚洲成色999久久网站| 午夜精品一区二区在线观看 | 午夜精品一区二区三区在线视| 亚洲第一黄色| 久久视频精品在线| 国产日韩欧美综合一区| 亚洲视频在线观看网站|