幾個SQL小知識

来源:http://www.cnblogs.com/xiaoxiaojia/archive/2016/04/15/5394106.html
-Advertisement-
Play Games

寫在前面的話:之前做的一個項目,資料庫及系統整體構架設計完成之後,和弟兄們經過 一段時間的編碼,系統如期上線,剛開始運行一切良好,後來隨著數據量的急劇膨脹,慢慢出現了很多莫名其妙的問題,經過調試,修改了資料庫中幾個存儲過程的 一些問題。有意思的是,有一個存儲過程里,為了實現一個小的功能,寫了好多好多 ...


寫在前面的話:之前做的一個項目,資料庫及系統整體構架設計完成之後,和弟兄們經過 一段時間的編碼,系統如期上線,剛開始運行一切良好,後來隨著數據量的急劇膨脹,慢慢出現了很多莫名其妙的問題,經過調試,修改了資料庫中幾個存儲過程的 一些問題。有意思的是,有一個存儲過程里,為了實現一個小的功能,寫了好多好多的代碼,又是游標又是迴圈的,其實用系統的一個預設函數就能解決掉。這裡想 說的是,學習工作之餘,在沒有要解決問題的壓力之下,還是建議系統的看看書,對於一些認為沒啥用的知識點,也建議去仔細的看看,練練手,說不定什麼時候就用到了,到時也好有針對性的去查,不至於盲目的按照自己的思路,重覆的創造一些低效的解決方法。

應用sql資料庫的源碼http://www.jinhusns.com/Products/Download/?type=xcj

======正文開始===========

1.[]的使用

  當我們所要查的表是系統關鍵字或者表名中含有空格時,需要用[]括起來,例如新建了兩個表,分別為user,user info,那麼select * from user和select * from user info就要報錯,需要寫成:select * from [user] 和 select * from [user info],不過千萬不要因為有[]的幫助,就隨意起名了,那是自找麻煩,不過我確實看到有人把用戶表起名為user的。

2.NULLIF函數

  NULLIF(Expression1,Expression2):給定兩個參數Expression1和Expression2,如果兩個參數相等,則返回NULL;否則就返回第一個參數。

  等價於:Case WHEN Expression1=Expression2 Then NULL ELSE Expression1。

  例如Select NULLIF(1,1)返回NULL,Select NULLIF(1,2)返回1。

  有一個實際的應用,例如防止除0操作的放生,可以使用a/NULLIF(b,0),這樣就不怕b是0了,當然除0操作也可以通過別的方式判斷。

3.NULL

  NULL是個神奇的東西,表示空值,未知值,任何數與它加減乘除都返回NULL。

4.ISNULL函數

  ISNULL(Expression1,Expression2):給定兩個參數Expression1和Expression2,如果Expression1是NULL,那麼返回Expression2,否則返回Expression1。

  等價於:Case WHEN Expression1 is NULL Then Expression2 ELSE Expression1。

  例如Select ISNULL(NULL,1)返回1,Select ISNULL(1,2)返回1。

  有一個實際的應用,可以對空值進行預設值替代,例如SELECT ISNULL(email,'沒有填寫email') from table1,所有email為null的,用'沒有填寫email'來替代。

 5.COALESCE函數

  COALESCE(Expression1,Expression2,Expression3,......):接受一系列的表達式或列,返回第一個非空的值。

      例如SELECT COALESCE(NULL,NULL,4,NULL,NULL,5),那麼返回4,如果裡面的參數都為NULL,那麼會報錯。

6.WITH TIES

  與top()和order by 一起用,可以返回多於top的行。防止丟失想要的信息。

  例如:有個表table1

(1)select * from table1 order by name desc :結果如下:

(2)select top(3) * from table1 order by name desc:結果如下:(只有三條)

(3)select top(3) with ties * from table1 order by name desc:結果如下:

7.ORDER BY NEWID():返回隨機排序結果。

8.BETWEEN a AND b:返回大於等於a,小於等於b的結果。如果a>b,那麼返回NULL。

9.不要在where條件中使用函數,會強制每一行都計算該函數,無法使用索引查找。

  例如:select * from table1 where id+3>5和select * from table1 where id>5-3,後者效率比前者高。

10.許多以_desc結尾的列,是為了更友好的表示一個列的含義。

  例如:SELECT * FROM sys.databases

11.推薦一個小插件,SQL Prompt,配合Microsoft SQL Server Management Studio,使用起來非常方便,同時再加上以下幾個快捷鍵:

  (1)ctrl+5或F5,運行代碼,如果想運行特定的語句,那麼只是選中該語句,然後F5或ctrl+E即可。

  (2)ctrl+L:顯示執行計劃。

  (3)ctrl+R:顯示隱藏下麵的結果視窗,增大自己書寫sql的空間。

  (4)ctrl+K,然後按Y,格式化SQL代碼。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、in和exists in是把外表和內表作hash(字典集合)連接,而exists是對外表作迴圈,每次迴圈再對內表進行查詢。一直以來認為exists比in效率高的說法是不准確的,如果查詢的兩個表大小相當,那麼用in和exists差別不大;如果兩個表中一個較小一個較大,則子查詢表大的用exists, ...
  • ...
  • 1、定義游標:列出每個員工的姓名、部門名稱並編程顯示第10個到第20個記錄。 2、定義游標:從雇員表中顯示工資大於3000的記錄,只要姓名、部門編號和工資。編程顯示其中的奇數記錄。 3、計算下麵級數當末項小於0.001時的部分和。 1/(1*2)+1/(2*3)+1/(3*4)+…+1/(n*(n+ ...
  • 癥狀:前一天在MySQL中刪除了幾個不用的資料庫後登陸MySQL出現以下錯誤: mysql -u root -p passwd ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysql ...
  • 轉載: http://www.cnblogs.com/stephen-liu74/archive/2012/03/09/2328757.html http://www.runoob.com/sqlite/sqlite-tutorial.html ...
  • 資料庫系統的 三級模式結構 資料庫系統是由外模式,模式和內模式三級構成 1.模式(schema) 模式也稱邏輯模式,是資料庫中全體數據的邏輯結構和特征的描述,是所有用戶的公共數據視圖。 2.外模式(external schema) 外模式也稱子模式(subschema)或用戶模式,它是資料庫用戶(包 ...
  • SQLite的SQL語法 SQLite的SQL語法 SQLite庫可以解析大部分標準SQL語言。但它也省去了一些特性並且加入了一些自己的新特性。這篇文檔就是試圖描述那些SQLite支持/不支持的SQL語法的。查看關鍵字列表。 如下語法表格中,純文本用藍色粗體顯示。非終極符號為斜體紅色。作為語法一部分 ...
  • 官網上面的例子是在phoenix-4.6.0-HBase-1.1-client.jar完成的,這個jar包含了phoenix4.6連接hbase1.1.2所有的依賴,真是包羅萬象(裡面竟然還包括了servlet)。如下圖: 如果把這個jar放入到工程中,必然與現有工程諸多jar產生衝突。 經查找資料... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...