1. 程式人生 > >[SQL] SQL SERVER基礎語法

[SQL] SQL SERVER基礎語法

取消 implicit 全連接 樹結構 需要 強制 rom lec 多行

Struct Query Language

1.3NF

  a.原子性

  b.不能數據冗余

  c.引用其他表的主鍵

2.約束

  a.非空約束

  b.主鍵約束

  c.唯一約束

  d.默認約束

  e.檢查約束

  f.外鍵約束

3.外鍵與關系

  外鍵是約束,不做外鍵處理,關系也是存在的.

4.char varchar nchar nvarchar

  char:是固定字符,如果不夠,會用空格來處理. 不需要計算長度,速度快.

  varchar:是動態的大小.需要計算長度,速度慢,存儲占用小.

  nvarchar:是以unicode編碼存儲.每個字符占2個字節.可以在任何sql server都能正常顯示中文.不帶n的英文占1個字節.中文占2個字節

5.crud

  [select]:

  取前5:select top 5

  取前5%:select top 5 percent

  去除重復:select distinct

  條件:select * from 表名 where

  [insert]:insert into 表名[(字段名,字段名)] values(字段值,字段值)

  [update]:update 表名 set 字段名=字段值 [where]

  [delete]:delete [from] 表名 [where]

6.運算符優先級

  [邏輯運算符]: and or not(!)

  [比較運算符]:< > = !=

  比較運算符一般邏輯運算符優先級要高,除了not.!只比小括號的優先級低.

7.模糊查詢

  like:select * from 表名 where 字段名 like 值

  _:匹配任意一個字符

  %:匹配任意多個字符

  [%]:匹配字符%

8.空值處理

  ISNULL:select ISNULL(english,‘缺考‘) from Scroe 英語成績為空則顯示缺考

  is [not] null:select * from Scroe where english is null 把英語成績為null的查詢出來

9.聚合函數

  SUM AVG COUNT MAX MIN

  聚合函數一般和group by配合使用,having可以對group by後再過濾

10.完整查詢語句順序

  select top 5 distinct * from T where field = fieldValue group by field2 having field2>5 order by field

  1:from T  2:*  3:where  4:distinct  5:group by field2  6:having field2>5  7:order by  8:top 5

  

11.常用函數

  [類型轉換]:CAST(值 as 類型)  CONVERT(類型,值)

  [字符串]:LTRIM(值)  RTRIM(值)  LOWER(值)  UPPER(值)  LEN(值)  SUBSTRING(值,開始位置,長度)

  [日期]:GETDATE()取現在時間  DATEADD(datepart,number,date)加時間date+num  DATEDIFF(datepart,startdate,enddate)取時間差end-start  DATEPART(datepart,date)

取消/強制插入標識列:set identity_insert 表名 off/on

清空表:truncate table 表名

12.復制表

  select * into 新表 from 原表 where 1=1

13.聯合查詢

  當2個結果集列數相同,類型相同,可以合並為一個結果集.

  union:會自動去除重復行

  union all:顯示所有行.

14.連接查詢

  分內連接和外連接

  內連接:[inner ]join

      select * from T1 inner join T2 on T1.ID2 = T2.ID

      自連接是特殊的內連接,樹結構存儲: select * from T as T1 join T as T2 where T2.PID = T1.ID

      

  外連接:

    left [outer] join:左連接,左表內容全部顯示.右邊沒有的用NULL標示

    right [outer] join:右連接,右表內容全部顯示.左邊沒有的用NULL標示

    full [outer] join:全連接,左右表內容全部顯示,沒有的用NULL標示

15.開窗函數

  可以將多行合並為一個區來看待.可以對一個區進行統計.區別於group by,可以查詢所有列.

  開窗函數:over()  裏面可以跟order by和partition by(類似 group by)

  排名:rank() over(order by id)

  排序:row_number() over(order by id)

  小計:avg(cost) over(partition by cost)(平均費用)

16.視圖

  本質封裝一個sql語句,不會存儲任何數據.

  創建:  create view viewName as sql語句

  查看sql: exec sp_helptext viewName

17.事務

  事務是保證多個操作同時成功或者同時失敗

  begin tran(開始事務)  commit tran(提交事務)  rollback tran(回滾事務)

  打開/關閉事務自動提交:set implicit_transactions off/on

18.存儲過程

  存儲過程本質是封裝一段代碼.

  創建:  create proc procName  

[email protected] int,@param2 int output

        as  

[email protected] [email protected] * @param1

  參數默認值:存儲過程只有最後一個參數可以有默認值.

19.索引

  [聚焦索引]:

  [非聚焦索引]:

  create index indexName on tableName(fieldName)

20.觸發器

  對某個表的進行增刪改操作時,自動執行一個操作.有2種方式執行,1是觸發源操作前替換執行 2是觸發源操作後執行

  臨時表:inserted deleted

  2種方式:after | instead of

  3種觸發源:insert update delete

  創建:

    create trigger triggerName

      after insert

      as  begin

      insert into T select * from inserted

      end

  建議:影響效率 謹慎使用

21.遊標

  逐行的操作數據

  對每條數據執行指定的

  使用:(讓T表中每個人的年齡增1)

    declare c1 cursor for

    select id,age from T

    declare @id int

    declare @age int

    open c1

    fetch c1 into @id,@age

    while(@@FETCH_STATU = 0)

    begin

      set @age= 1 + @age

      update T set age = @age where id = @id

      fetch c1 into @id,@age

    end  

    close c1

    deallocate c1

[SQL] SQL SERVER基礎語法