經典SQL基礎回顧


     孔子有雲:溫故而知新,可以為師矣。既然孔老聖人都雲了,咱今天就一起來重溫一下MS SQL吧。開篇聲明一下:大部分都是基礎內容,SQL非常熟練的就別浪費您的時間了,因為這年頭,大家時間都挺寶貴的。但是如果您堅持看完了,肯定也不會讓您失望的,其中有幾點很常用,但是也很少有人知道,希望能對您有所幫助。由於大部分都是記的筆記,所以可能有點亂,還望見諒。      

      首先要連接數據庫服務器,就得啟動服務,關於啟動服務,我介紹我所用的三種方式:

      1、開始-->運行-->cmd-->NET START MSSQLSERVER;

      2、開始-->運行-->services.msc  然后找到SQL Server服務,設置為啟動;

      3、通過SQL Server配置管理器啟動服務。服務啟動之后,就可以連數據庫了。

       另外順帶介紹幾個命令行操作數據庫服務的:

       暫停SQL Server服務--> NET PAUSE MSSQLSERVER

       重新啟動暫停的SQL Server服務--> NET CONTINUE MSSQLSERVER

       停止SQL Server服務--> NET STOP MSSQLSERVER

      

       一些常用知識:

       select @@version 可查看數據庫版本

       關於SQL 值類型需要注意的地方:

       bit常用來表示bool類型的變量,取值為0和1,這里0常表示false,1常表示true(約定大於熟成);

       varchar 類型不含中文,nvarchar可能含有中文,nvarchar(max)相當於無窮大,SQL中查詢或者賦值時字符串須用單引號括起來;

       varchar和char(n)的區別在於char(n)不足n的部分會用空格填充,而varchar不會,這里細微的差別很多時候會造成數據不一致。

      常用做主鍵的數據類型有:int(或bigint)、uniqueidentifier。在表格中可通過設置標識列來實現自動增長,而且一個表只允許有一個標識列。SQL 2005以上的版本設置標識列的方法為:選中需要設置標識的列,然后點開標識規范,設置標識,如圖-1所示。通常設置自動標識之后,插入值的時候不需要再給值,如果再給值,則會報錯,這時需要我們執行如下語句允許顯示為設置為標識的列給值(設置標識之后默認是不允許給值的):set IDENTITY_INSERT 表名 on,值插入之后再通過  set IDENTITY_INSERT 表名 off語句關閉。

                                                                                                    圖-1

      另外也可以通過GUID算法來生成不同的值來作為主鍵,C#中也有:Guid id=Guid.newGuid();若Guid類型的主鍵默認值設定為new()就會自動生成。關於int類型的主鍵和Guid類型主鍵的優缺點,這里作一個簡單的比較:首先int自增主鍵的優點是占用空間小、無序開發人員干預、易讀;缺點是效率低,速度比較慢;而GUID主鍵的優點是效率高、數據導入導出方便;缺點是占用空間大、不易讀。

     SQL語句創建表用Create Table而更新表用Update Table,刪除表用Delete和Drop,注意Delete刪除表中數據而Drop則刪除整個表。

     一般查詢的順序是:

      select  列名 from 表名 where 條件 group by 分組依據 having 組提取條件 order by 排序依據列

      select getdate()獲得當前時間,select 列名 as 別名,通過這種方式可以為列取別名(圖-3) ,select count(*) 獲取表中數據總條數(行數)

      SQL 中聚合函數有:max,min,avg,sum,依次是求最大,最小,平均,和

      以下舉例所用到的表為簡單的學生表,結構和表中的初始數據如圖-2所示。

                                                                                        圖-2

      查詢語句中,列名本身是可以參加運算的,參考圖-3的結果。order by排序的時候可以根據多列排序,asc(ascend)升序,desc(descend)降序,用法如圖-3.

   

                                                                                                                    圖-3

      注意:where 必須在order by 之前。單字符匹配通配符為半角下划線“_",用於匹配單個出現的字符。多字符匹配的通配符為半角百分號”%“,用於匹配任意次數出現的任意字符。SQL語句中NULL表示不知道而不是沒有,表中NULL和null是有區別的,NULL表示為空。查找某項為NULL時:

       select 列名 from 表名 where 列名 is NULL而不是列名=NULL。SQL語句中也有or,and和in等關鍵字。

       查詢的時候注意了,沒有出現在Group by子句中的列是不能放到select語句后列的各列表中的(聚合函數除外,圖-4例。

      解決辦法是在沒有出現在Group by之后的列前加聚合函數。 

      聚合函數不出現在where子句中,但可用having,它放Group by 之后,是對分組后的信息的過濾。

      top x,表示取某列中前x個,如:select top 5 ……

      distinct加於列前表示取列的不同的值;union將兩個表連在一起(條件是兩個列相同,數據類型相同),對重復的只保留一個,若不想合並則在union后加all。

      常用函數:

      ABS():求絕對值;CEILING():舍入到最大整數;FLOOR():舍入到最小整數;ROUND():四舍五入----->select ROUND(2.365,2)=>2.370

      LEN():計算字符串長度  LOWER、UPPER 轉小寫、大寫  LTRIM():去掉字符串左側空格 RTRIM():去掉字符串右側空格

      SUBSTRING(string,startposition,length)--------->同C#,在制定字符串中,從氣勢位置取指定長度的字符

      DATEADD(datepart,number,date)---------------->DATEADD(hour,3,getdate())在當前時間上加上3小時

      DATEDIFF(datepart,startdate,enddate)------>計算兩個日期間的差額

      DATEPART(datepart,date)--------------------->返回一個日期的特定部分

      CAST(expression As data_type)

      Convert(data_type,expression)(以上兩種方式常做類型轉換用)

      isnull函數 select isnull(Sno,'暫無')as 學號 from student  從Student表中選擇Sno的值作為學號,當Sno為空時則返回暫無。

      case函數用法,當對單值判斷時相當於Switch case

      如:

select case  expression
when value1 then returnvalue1
whern value2 then returnvalue2
       ..............
else defaultreturnvalue
end from table
//實例
select Fname
(case Flevel
when 1 then '普通用戶'
when 2 then '會員'
when 3 then 'VIP'
end )
as '客戶類型' from Customer
View Code

      由於篇幅原因,上篇到此告一段落。總的來說上篇基本上都是些較基本,但也很常見的零零散散的知識。下篇將從索引,模糊匹配,精確匹配,自連接以及外連接,試圖,存儲過程,事務這幾個方面來總結,敬請期待!

 

         

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM