SQLServer的管理
- 常用欄位類型:bit(可選值0、1)、datetime、int、varchar、nvarchar(可能含有中文用nvarchar)
- varchar、nvarchar 和char(n)的區別: char(n)不足長度n的部分用空格填充。Var:Variable,可變的。
SQL語句入門
- SQL語句中字串用單引號。
- SQL語句是大小寫不敏感的。
- 建立表、刪除表不僅可以手工完成,還可以執行SQL陳述式完成,在自動化部署、資料匯入中用的很多,
CREATE TABLE 表名稱
(
列名稱1 資料類型,
列名稱2 資料類型,
列名稱3 資料類型,
....
)
CREATE TABLE T_Person(Id int NOT NULL,Name nvarchar(50),Age int NULL)
Drop table T_Person1
- 簡單的Insert語句。INSERT INTO T_Person(Id,Name,Age) VALUES(1,'Jim',20)
- (*) SQL主要分DDL(資料定義語言 (Data Definition Language))和DML(資料操作語言)兩類。Create Table、Drop Table、Alter Table等屬於DDL,Select、Insert、Update、Delete等屬於DML
主鍵選擇-自動標識和GUID
SQLServer中兩種常用的主鍵資料類型:int(或bigint)+識別欄位(又稱自動成長欄位);uniqueidentifier(又稱Guid、UUID)
SQLServer中產生GUID的函數newid(),.Net中產生Guid的方法:Guid.NewGuid(),返回是Guid類型。
資料更新(UPDATE 表名稱 SET 列名稱)
- 更新一個列:UPDATE T_Person Set Age=30
- 更新多個列: UPDATE T_Person Set Age=30,Name=‘tom’
- 更新一部分資料: UPDATE T_Person Set Age=30 where Name=‘tom’,用where語句表示只更新Name是’tom’的行,注意SQL中等於判斷用單個=,而不是==。
- Where中還可以使用複雜的邏輯判斷UPDATE T_Person Set Age=30 where Name=‘tom’ or Age<25,or相當於C#中的||(或者)
- update Person1 set NickName=N'二十歲' where (Age>20 and Age<30) or(Age=80)
- Where中可以使用的其他邏輯運算子:or、and、not、<、
>、>=、<=、!=(或<>)等
資料刪除(DELETE FROM 表名稱 WHERE 列名稱 = 值)
- 刪除表中全部資料:DELETE FROM T_Person。
- Delete只是刪除資料,表還在,和Drop Table不同。
- Delete 也可以帶where子句來刪除一部分資料:
DELETE FROM T_Person WHERE FAge > 20
資料檢索(select)
- 簡單的資料檢索 :SELECT * FROM T_Employee
- 還可以檢索不與任何錶關聯的資料:select 1+1;select newid();select getdate();
資料匯總(彙總函式的使用)
- SQL彙總函式:MAX(最大值)、MIN(最小值)、AVG(平均值)、SUM (和)、COUNT(數量)
- 大於25歲的員工的最高工資 :SELECT MAX(FSalary) FROM T_Employee WHERE FAge>25
- 最低工資和最高工資:SELECT MIN(FSalary),MAX(FSalary) FROM T_Employee
資料排序(order by)
- ORDER BY子句位於SELECT語句的末尾,它允許指定按照一個列或者多個列進行排序,還可以指定排序方式是升序(從小到大排列,ASC)還是降序(從大到小排列,DESC)。
- 按照年齡升序排序所有員工資訊的列表:
SELECT * FROM T_Employee ORDER BY FAge ASC
- 按照年齡從大到小排序,如果年齡相同則按照工資從大到小排序 :
SELECT * FROM T_Employee ORDER BY FAge DESC,FSalary DESC
- ORDER BY子句要放到WHERE子句之後 :SELECT * FROM T_Employee WHERE FAge>23 ORDER BY FAge DESC,FSalary DESC
萬用字元過濾
- 萬用字元過濾使用LIKE 。單字元匹配的萬用字元為半形底線“_”,它匹配單個出現的字元。以任一字元開頭,剩餘部分為“erry” :
SELECT * FROM T_Employee WHERE FName LIKE '_erry'
- 多字元匹配的萬用字元為半形百分比符號“%”,它匹配任意次數(零或多個)出現的任一字元。 “k%”匹配以“k”開頭、任意長度的字串。檢索姓名中包含字母“n”的員工資訊 :
SELECT * FROM T_Employee WHERE FName LIKE '%n%'
空值處理
- 資料庫中,一個列如果沒有指定值,那麼值就為null,這個null和C#中的null,資料庫中的null表示“不知道”,而不是表示沒有。因此select null+1結果是null,因為“不知道”加1的結果還是“不知道”。
- SELECT * FROM T_Employee WHERE FNAME=null ;
SELECT * FROM T_Employee WHERE FNAME!=null ;
都沒有任何返回結果,因為資料庫也“不知道”。
- SQL中使用is null、is not null來進行空值判斷:
SELECT * FROM T_Employee WHERE FNAME is null ;
SELECT * FROM T_Employee WHERE FNAME is not null ;
多值匹配
- SELECT FAge,FNumber,FName FROM T_Employee WHERE FAge IN (23,25,28)
- 範圍值:SELECT * FROM T_Employee WHERE FAGE>=23 AND FAGE <=27 ;
SELECT * FROM T_Employee WHERE FAGE BETWEEN 23 AND 27 ;