天天看點

[SQL] SQL SERVER基礎文法

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  

        @param1 int,@param2 int output

        as  

        set  @param2 =@param1 * @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

繼續閱讀