幾個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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...