SQL數據庫開發知識總結:基礎篇

1數據庫概述

  (1) 用自定義文件格式保存數據的劣勢。算法

  (2) DBMS(DataBase Management System,數據庫管理系統)和數據庫,平時談到」數據庫」可能有兩種含義:MSSQL Server,Oracle等某種DBMS;存放一堆數據庫的    一個分類(CateLog)。數據庫

  (3) 不一樣品牌的DBMS有本身不一樣的特色:MYSQL,MSSQLServer,DB2,Oracle,Access,Sybase等。對於開發人員來說,大同小異。數組

  (4) 除了Access,SQLServerCE等文件型數據庫以外,大部分數據庫都須要數據庫服務器才能運行。學習,開發時是鏈接本機的數據庫,上線運行時是數據庫運行在單獨的服        務器。安全

2數據庫中的概念服務器

  (1) CataLog(類)(又叫數據庫DataBase,表空間TableSpace),不一樣類的數據因該放到不一樣的數據庫中。併發

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

    2) 避免命名衝突函數

    3) 安全性更高學習

  (2) Table(表);不一樣類型的資料放到不一樣的」格子」中,將這種區域叫作」表」,不一樣的表根據放的數據不一樣進行空間的優化,找起來也方便。優化

  (3) 列(Column),字段(Field)。

  (4)主鍵(Primarykey)

    (1) 主鍵就是數據行的惟一標示,不會重複的列才能當主鍵,一個表能夠沒有主鍵,可是會很是難以處理,所以沒有特殊理由表都會設定主鍵。

     (2) 主鍵有兩種選用策略;業務主鍵和邏輯主鍵。業務主鍵是使用有業務意義的字段作主鍵,好比身份證號,銀行帳號等。邏輯主鍵是使用沒有任何業務意義的字段作主         鍵,由於很難保證業務主鍵不會重複(身份證號重複),不會變化(帳號升位),所以推薦用邏輯主鍵。

    (3) 邏輯主鍵:徹底給程序看的,業務員不會看的數據。

3.SQL Server管理

    (1) SQL Server的兩種驗證方式:用戶名驗證和Windows驗證,開發時用Windows驗證就好了。

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

    (3) varchar(),nvarchar().char(n)的區別:char(n)不足長度n的部分用空格填充。Var: variable:可變的。

4.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 int null

        )

      刪除表:drop table T_Person

    (5) 執行簡單的Insert語句:      insert into T_Person(ID,Name,Age) values(1,’Jim’,39)

    *(熟悉):SQL主要分DDL(數據定義語言)和DML(數據操做語言)兩類,create table,drop table,alter table等屬於DDL,select,insert,Update,delete等屬      於DML。

5. 主鍵選擇

  (1) SQL Server中兩種經常使用的主鍵數據類型:int(或bigint)+標識列(又稱自動增加字段);uniqueidentifier(又稱Guid)。

  (2) 用標識列實現字段自增能夠避免併發等問題,不用開發人員控制自動增加,用標識列的字段在insert的時候不用指定主鍵的值,將字段的」是標識列」設置爲」是」,一個表只    能有一個標識列。

  (3) Guid算法是一種能夠產生惟一標示的高效算法,它使用網卡MAC地址,納秒級時間,芯片ID碼算出來的,這樣保證每次生成的GUID永遠不會重複,不管 是同一個計算機    上仍是不一樣的計算機,SQL Server中生成GUID的函數newid(),.NET中生成GUID的方法:Guid.NewGuid(),返回值是GUID類型。

    例如:SQL Server:select newID()

             C#代碼中 :Guid id=Guid.NewGuid();

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

  (5) (*)Guid的優勢:效率高,數據導入導出方便,缺點:佔用空間大,不易讀。

6. 數據的基本操做

  1. 數據插入

    (1) insert語句能夠省略表名後的列名,可是不推薦。Insert into Person2 values(‘lucy’,’38’)

    (2) 若是插入的行中有些字段的值不肯定,那麼insert的時候不指定那些列便可。

    (3) 給字段能夠設置默認值,若是Guid類型主鍵的默認值設定爲newid()就會自動生成,不多這樣幹: insert into person3(ID,Name,Age) values(newid(),’tom’,30)

  2. 數據更新

    (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中還可使用複雜的邏輯判斷:

        update T_Person set Age=30 where Name=’Tom’ or Age<25. or至關於C#中的||(或者)。

    (5) where中可使用的其餘邏輯運算符是:or,and,not,<,>,>=,<=,!=(或< >)等。

  3. 數據刪除

    (1) 刪除表中的所有數據:delete from T_Person。

    (2) delete只是刪除數據,表還在,和drop table不一樣。

    (3) delete也能夠帶where子句來刪除一部分數據:delete from T_Person where FAge>30。

  4. 數據檢索

    (1) 簡單的數據檢索:select * from T_Employee。

    (2) 只檢索須要的列:select FName from T_Employee。

    (3) 列別名:select FNumber as 編號,FName as 姓名 from T_Employee。

    (4) 還能夠檢索不與任何表關聯的數據:select 1+1,select newId(),select getDate()。

  5. 數據彙總

    (1) SQL聚合函數:max(最大值),min(最小值),avg(平均值),sum(和),count(數量)。

  6. 數據排序

    (1) order by子句位於select語句的末尾,它容許指定按照一個列或者多個列進行排序,還能夠指定排序方式是升序(從小到大排序,ASC)仍是降序(從大到小排          序,DESC)。

    (2) 按照年齡從大到小排序,若是年齡相同則按照工資從大到小排序

        select * from T_Employee order by FAge Desc,FSalary Desc

    (3) order by子句要放到where子句以後:

        select * from T_Employee where FAge>23 order by FAge Desc,FSalary Desc

  7. 通配符過濾(模糊匹配)

    (1) 通配符過濾使用Like。

    (2) 單字符匹配的通配符爲半角下劃線」_」,它匹配單個出現的字符,以任意字符開頭,剩餘部分爲」erry」:

          select * from T_Employee where FName like ‘_erry’

    (3) 多字符匹配的通配符爲半角百分號」%」,它匹配任意次數(零或者多個)出現的任意字符,」K%」匹配以K開頭,任意長度的字符串。檢索姓名中包含」n」的員工的信息:

          select * from T_Employee where FName like ‘%n%’

  8. 空值處理

    (1) 數據庫中,一個列若是沒有指定值,那麼值就爲null,這個null和C#中的null不同,數據庫中的null表示」不知道」,而不是表示沒有,所以select null+1結果是null,        由於」不知道」加1的結果仍是」不知道」。

    (2) select * from T_Employee where FName=null    and     select * from T_Employee where FName!=null。都沒有任何返回結果,由於數據庫」不知道」。

    (3) SQL中使用is null,is not null來進行空值判斷。

         select * from T_Employee where FName is null

         select * from T_Employee where FName is not null

  9. 多值匹配

    (1) select FAge,FNumber,FName from T_Employee where FAge in(34,23,35)

    (2) 範圍值:

      1) select * from T_Emploee where FAge>=23 and FAge<=27

      2) select * from T_Employee where Fage Between 23 and 27

  10. 數組分組

    (1) 按照年齡進行分組統計各個年齡段的人數:

      select FAge,Count(*) from T_Employee Group by Fage

    (2) Group by子句必須放在where語句的後面

    (3) 沒有出如今Group by子句中的列是不能放到select語句後的列名列表中的(聚合函數除外)。

      1) 錯誤:select FAge,FSalary from T_Employee group by Fage。

      2) 正確:select Fage,Avg(FSalary) from T_Employee group by Fage。

  11. 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是對組進行過濾。

  12. 限制結果集行數

    (1) select top 5 * from T_Employee order by FSalary Desc

    (2) (*)檢索按照工資從高到低排序檢索從第六名開始一共三我的的信息

      select top 3 * from T_Employee where FNumber not in (select top 5 FNumber from T_Employee order by Fsalary desc) order by FSalary Desc。

    (3) SQL Server2005後增長了Row_Number函數簡化實現

  13. 去掉數據重複

    (1) select FDepartment from T_Employee——>select distinct FDepartment from T_Employee

    (2) distinct是對整個結果集進行數據重複處理的,而不是針對某一個列,所以下面的語句並不會只保留Fdepartment進行重複值處理。

       select distinct FDepartment,FSubcompany from T_Employee

相關文章
相關標籤/搜索