基本的SQLSERVE語句語法

一、數據庫的概念:

1.用自定義文件格式保存數據的劣勢

2.DBMS(DataBase Management System,數據庫管理系統)和數據庫。平時談到“數據庫”可能有兩種含義:MSSQLServer、Oracle等某種DBMS:存放一堆數據表的一個分類(Catalog)。

3、不同品牌的DBMS有自己的不同的特點:MYSQL、MSSQLServer、DB2、Qracle、Access、Sybase等。對於開發人員來講,大同小異。

4、SQL<>SQLServer<>MSSQLServer、最常見的錯誤。

5、除了Access、SQLServerCE等文件型數據庫外,大部分數據庫都需要數據庫服務器才能運行。學習、開發時是連接本機的數據庫。上線運行時是數據庫運行在單獨的服務器中。

6、Catalog(分類)(又叫數據庫DataBase、表空間TableSpace),不同類的數據應該放到不同的數據庫中,好處:

   1)便於對各個Catalog進行個性化管理

   2)避免命名衝突。

   3)安全性高。

7、Table(表):書都放到書架上。碗都放在櫥櫃裏,不同類型的資料放到不同的格子中,將這種區域叫做表(Table)。不同的表根據放的數據不同,進行空間的優化,找起來方便。

8、列(Column),字段(Field)

9、主鍵(PrimaryKey):

  主鍵是數據行的唯一標識。不會重複的列才能當主鍵,一個表可以沒有主鍵,但是會非常難以處理,因此沒有特殊理由都要設定主鍵

  主鍵有兩種選用策略:業務主鍵和邏輯主鍵。業務主鍵是使用有業務意義的字段做主鍵,比如身份證號,銀行賬號等;邏輯主鍵是使用沒有任何業務意義的字段做主鍵,完全給程序看,業務人員不會看的數據。因爲很難保證業務主鍵不會重複(身份證號重複)、不會變化(賬號升位),因此推薦使用邏輯主鍵。

二、SQLServer的管理

1、需要安裝SQLServer2005或者SQLServer2008,若要使用SQLServer管理工具進行開發還要安裝SQLServer Management Studio,還可以使用VisualStudio進行管理。

2、使用免費的SQLServerExpress版本,Express版本的服務器名稱.\SQLEXPRESS,對於開發人員來講和其他版本沒有區別。

3、SQLServer的兩種驗證方式:用戶名驗證和Windows驗證,開發時用Windows驗證就行了。

4、開發人員關注點在開發上,而不是配置、備份等之上,那是DBA做的事情。

5、創建數據庫、創建表、設置主鍵

6、常用字段類型:bit(可選值0、1),datetime、int、varchar、nvarchar(可能含有中文使用nvarchar)

7、varchar、nvarchar和char(n)的區別:char(n)不足長度n的部分用空格填充。

三、SQL語句入門

1、SQL語句是和DBMS“交談”專用的語句,不同的DBMS都認SQL語法。

2、SQL語句中字符串要用單引號。

3、SQL語句是大小寫不敏感,不敏感指的是SQL關鍵字,字符串值還是大小寫敏感的。

4、創建表、刪除表不僅僅可以手工完成,還可以執行SQL語句完成,在自動化的部署、數據導入中用的多,CREATE TABLE T-Person(ID INT NOT NULL,NAME NVARCHAR(50),Age intNULL)、drop tableT-Person是刪除表的意思()。而delete是表刪除爲空。

5、簡單的insert語句:INSERT INYOT-Person(ID,NAME,AGE)values(1,'linhu',20)

6、(*)SQL主要分DDL(數據定義語言)和DML(數據操縱語言)兩類。Create Table、Drop Table 等屬於ddl;select 、insert、update、dalete等屬於dml ,dml不會影響數據表的結構。

四、主鍵設置:

1、SQLServer中兩種常用的主鍵數據類型:int(或bigint)+標識列(又稱自動增長字段);uniqueidentifier(又稱guid、uuid)。

2、用標識列實現字段自增可以避免併發等問題,不要開發人員控制自增。用標識列的字段在insert的時候不用指定主鍵的值。將字段的是“是標識符”設置爲“是”,其中一個表只能有一個標識列。

3、guid算法是一種可以產生唯一標識的高效算法,它使用的網卡MAC、地址、納秒級時間、芯片ID碼等算出來的,這樣保證每次生成的GUID永遠不會重複,無論是同一個計算機上還是不同的計算機。在公元3400年以前產生的GUID與任何其他產生的GUID都不相同。SQLServer中生成的GUID的函數newid(),在.net中生成的GUID方法:GUID.NewGuid(),返回是GUID類型。

4、(*)int 自增字段的優點:佔用的空間小、無需開發人員干預、易讀;缺點:效率低,數據導入導出的時候很痛苦。

5、(*)guid的優點:效率高,數據導入導出快;缺點:佔用的空間大,不容易讀

6、一般業界傾向於使用Guid.

、數據插入:

1、Insert語句可以省略表名後的列名,但是不推薦。

2、如果插入的行中有些字段的值不確定,那麼Insert的時候不指定那些列即可,

3、給可以給的字段默認值,如果Guid類型主鍵的默認值設定爲newid()就會自動生成,很少這麼幹。

4、主鍵:insert into Person3(Name,Age) values('lily',38);insert intoPerson4(Id,Name,Age) values(newid(),'tom',30)

六、數據更新

1、更新一個列:UPDATE T_Person set Age=30

2、更新多個列:Update T_Person Set Age=30,Name='tom';

3、更新一部分數據:UPDATE T_Person Set Age=30 where Name='tom',用where語句表示只要更新Name是‘tom’的行,注意SQL中等於判斷用的單個=,若不是==;

4、Where中還可以使用複雜的邏輯判斷UPDATET_Person Set Age=30 where Name='tom' or Age<25,or相當於C#的||(或者)

5、where 中還可以使用的其他邏輯運算符:or、and、not、<、>、>=、<=、!=(或<>)等

6、改變數據列的類型:ALTER TABLE Student
ALTER COLUMN SBIRTHDAY nvarchar(30) null

七、數據的刪除

1、刪除表中的全部的數據:DELETE FROM T-PERSON

2、Datele只是刪除數據,表還在,只不過這個表的內容爲空了,而Drop Table是將這個表銷燬。

3、Delete也可以帶where子句來刪除一部分數據:DELETE FROM T_PersonWHERE AGE>20

七、數據的檢索

1、執行備註中的代碼創建測試數據表。

2、簡單的數據檢索:Select * From T-Employee.

3、只檢索需要的列:Select FNumber From T-Employee;Select FName,FAge From T-Employee。

4、給列屬性取別名:Select FNumber as 編號,FName AS 姓名,FAge as 年齡 From T-Employee。

5、使用where檢索符合條件的數據:SELECTFName From T-Employee Where FSalary<5000.這個一般是新員工的檢索噩夢哦!

6、還可以檢索不與任何關係的數據:select 1+1;select newid();select getdate();

7、檢索用戶的SQLServer 的版本用 @@Version

八、數據的彙總

1、SQL聚合函數:MAX(最大值)、MIN(最小值)、AVG(平均值)、SUM(和)、COUNT(數量)

2、大於25歲的員工的最高工資:SELECTMAX(FSalary)FROM T_Employee WHERE FAge>25

3、最低工資和最高工資:Select MIN(FSalary),MAX(FSalary)From T_Employee

九、數據排序

1、ORDER BY 子句位於SELECT語句末尾,它允許指定按照一個列或則多個列進行排序,還可以指定排序的方式是升序還是降序(從小到大排列是ASC,從大到小是DESC)

2、按照年份升序排序所有員工的信息的列表:Select * From T-Employee order by FAge ASC,默認爲ASC升序排序,但是個人建議無論什麼情況你還是要指定好你的排序方式

3、按照年齡從大到小排序,如果年齡相同則按照工資從大到小排序:Select * From T-Employee Order FAge DESC ,FSalary DESC

4、ORDER By 子句要放到WHERE子句之後,SELECT *FRom T-Employee WHERE FAge>23ORDER BY FAge DESC,FSalary DESC.

十、通配符過濾

1、通配符過濾使用LIKE

2、單字符匹配的通配符爲半角(英文裏面的下劃線)下劃線"_",它匹配的單個出現的字符。以任意字符開頭,剩餘部分爲"erry":Select* From T_Employee WHERE FName LIKE '_erry'

3、多字符匹配的通配符爲半角的百分號“%”,它匹配的任意次數(零或者多個)出現的任意字符。“K%”匹配以“K”開頭,任意長度的字符串。檢索姓名中包含“n”的員工信息的話用的語句爲:SELECT * FromT_Employee Where FName Like '%n%'.

4、在表中出現NULL字樣,不是表示空值或者沒有值,它表示的是不知道什麼值

十一、空值處理

1、數據庫中,一個列如果沒有指定值,那麼值就爲null,這個null和C#中的null,數據庫中null表示的都是“不知道”的意思,而不是表示沒有,因爲“不知道”加1的結果還是不“不知道”

2、SELECT * From T_Employee Where FName=null;  Select * From T_Employee Where FName !=null;都沒有任何返回結果,因爲數據庫也“不知道”

3、SQL中任何is null 、is not null 來進行空值判斷:Select * From T_EmployeeWhere FName is null;Select * From T_Employee Where FName is not null;

4、多值匹配:Select FAge,FNumber,FName FRom T_Employee Where FAge IN(23,25,28)

範圍值:Select *From T_Employee Where FAge>=23AND FAge<=27;Select * From T_Employee WhereFAge Between 23 AND 27

十二、數據分組

1、按照年齡進行分組統計各個年齡段的人數:Select FAge,count(*)From T-employee Group By Fage

2、Group By 子句必須放到Where語句的之後

3、沒有出現在Group By子句中的列是不能放到Select語句後的列名列表的(聚合函數中除外)比如:

錯誤:Select FAge,FSalary From T_Employee Group ByFAge

正確:Select FAge,AVG(FSalary)From T-employee Group By FAge

十三、Having語句

1、在Where語句中不能使用聚合函數,必須使用Having,其中那個Having要位於Group By之後例子:

Select FAge,Count(*)AS人數From T-employee

Group By FAge

Having Count(*)>1

2、注意Having中不能使用未參數分組的列,Having不能替代Where,作用是不一樣的,Having是對組進行過濾的。

3、having是對分組後的信息的過濾,能用的列和Select中能用的列是一樣的,其中Having是無法用Where替代的,Where是對原始數據進行過濾的。

十四、限制結果集行數

1、select top 5* from T_Employee order by FSalary Desc

2、(*)檢索按照工資從高到低排序檢索從第六名開始一共三個人的信息:Select top 3* From T_Employee Where FNumber Not in(Select top 5FNumber From T_Employee Order By FSalary Desc)Order By FSalary Desc

3、SQLServer 2005之後增加了Row_Number函數簡化實現。

十五、去掉數據重複

1、Select FDepartment From T-employee——>Select Distinct FDepartment From T-employee

2、Distinct是對整個結果進行數據重複處理(也就是針對整行,不是針對整個字段)的,而不是針對每一個列,因此下面的語句並不會保留Fdepartment進行重複值處理:

Select Distinct FDepartment,FSubCompany From T_Employee

十六、聯合結果集

1、簡單的結果集聯合:

 Select FNumber,FName,FAge FromT_Employee UNION Select FIdCardNumber,FName,FAge From T_TemEmployee

2、基本原則:每個結果集必須有相同的的列數;每個結果集的列必須類型相容。

3、如果想去除重複行就不要加上 union all,只要union就可以了

十七、SQL裏面的一些函數:

1、ABS():求絕對值。

2、CEILING():舍入到最大整數。比如:3.33將舍入爲4;2.89將舍入爲3,而那個-3.61被舍入到-3,ceiling——》天花板

3、Floor()。舍入到最小整數,和Ceiling相反。

4、Round():四捨五入。舍入到“離我半徑最近的數”。round->"半徑".。Round(3.141525,2)

5、Len():計算字符串函數長度

6、Lower()、Upper():轉小寫、大寫

7、LTrim():字符串左邊的空格要去掉

8、Rtrim():字符串右側的空格去掉

9、Substring(String,start_position,length)其中參數string爲主字符串,start_position爲子字符串在主字符串中的起始位置,length爲子字符串的最大長度。Select Substring(‘abcdef111’,2,3)

10、日期函數:

1)GetDate():取得當前日期時間

2)Dateadd(datepart,number,date),計算增加的以後的日期。參數date爲待計算的日期;參數date爲增量;參數datepart爲計量單位,可選值見備註。DateAdd(Day,3,date)爲計算日期date的三天後的日期;而DateAdd(MOnth,-8,Date)爲計算日期date的8個月之前的日期。

3)DateDiff(Datepart,startdate,enddate):計算兩個日期之間的差額,datepart爲計量單位,可取值參考DateAdd

4)Datepart(datepart,date);返回一個日期的特定部分

十八、類型轉換函數:

1、Cast(expression asdata_type)

2、Convert(Data_Type,expression)

3、空值處理函數:isnull(expression,value):如果expression不爲空則返回expression,否則返回value.Select Isnull(FName,'佚名')as 姓名 fromT_Employee

4、case函數的用法:

1)單值判斷,相當於switch case

2)CASE expression

  When values1 THEN returnvalues1

  When values2 THEN returnvalues2

  When values3 THEN returnvalues3

  ELSE defaultreturnvalues

  END

3)例子:

Select FName,

 CASE FLevel When 1 then 'VIP客戶'

 WHEN 2 THEN '高級客戶'

 WHEN 3 THEN '普通用戶'

 ELSE '客戶類型錯誤'

END

)as FLevlName

From T_Customer

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章