經典SQL基礎回顧

     孔子有云:溫故而知新,能夠爲師矣。既然孔老聖人都雲了,咱今天就一塊兒來重溫一下MS SQL吧。開篇聲明一下:大部分都是基礎內容,SQL很是熟練的就別浪費您的時間了,由於這年頭,你們時間都挺寶貴的。可是若是您堅持看完了,確定也不會讓您失望的,其中有幾點很經常使用,可是也不多有人知道,但願能對您有所幫助。因爲大部分都是記的筆記,因此可能有點亂,還望見諒。      算法

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

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

      二、開始-->運行-->services.msc  而後找到SQL Server服務,設置爲啓動;服務器

      三、經過SQL Server配置管理器啓動服務。服務啓動以後,就能夠連數據庫了。ide

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

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

       從新啓動暫停的SQL Server服務--> NET CONTINUE MSSQLSERVERspa

       中止SQL Server服務--> NET STOP MSSQLSERVER命令行

      

       一些經常使用知識:code

       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

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

相關文章
相關標籤/搜索