天天看點

黑馬程式員--SQL中的知識點和案例

  ------- Windows Phone 7手機開發、.Net教育訓練、期待與您交流! -------

  1、資料庫概述

    DBMS(DateBase Management  System,資料庫管理系統)。平時談到資料庫有倆種含義:MSSQLServer、Oracel等某種DBMS:存放一堆表的分類(Catalog)。

   Catalog(分類)(又叫做資料庫Database、表空間TableSpace),不同類的資料庫應放到不同類的資料庫中

       便于對各個Catalog進行個性化管理

        避免命名沖突

        安全性更高

2、Table(表):書放到書架上,碗放到櫥櫃中,不同類型的資料放到不同的格子中,将這種區域叫做表(Table)。不同的表根據放的資料不同進行空間的優化,找起來也友善。  列(Column)、字段(Field)

3、主鍵(PrimaryKey)

  主鍵是資料行的唯一辨別。不會重複的列才能當主鍵,一個表可以沒有主鍵,但是會非常難以處理,是以沒有特殊理由表都要設定主鍵。

  主鍵有倆種:業務主鍵和邏輯主鍵。因為業務主鍵很難保證不會重複,是以推薦使用邏輯主鍵。

4、SQLServer的管理

  首先需要安裝SQLServer2005或者SQLServer2008,若要使用SQLServer管理工具進行開發還要安裝SQLServer Mangement Studio,還可以使用VS進行管理。

 SQLServer有倆種驗證方式:使用者名驗證和Windows驗證,開發時用Windows驗證就行。

 建立資料庫,建立表,設定主鍵

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

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

5、SQL語句

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

  SQL中字元串用單引号。

  SQL語句是大小寫不敏感的,不敏感指的是SQL關鍵字,字元串值還是大小寫敏感的

  建立表、删除表不僅可以手工完成,還可以執行SQL語句完成,CREATE  TABLE T_Person(Id int NOT NULL,Name nvarchar(50),Age int NULL)、Drop table T_Person

  簡單的insert語句。insert into T_Person(Id,Name,Age) values(1,'Jim',23)

  (*)SQL主要分DDL(資料定義語言)和DML(資料操作語言)倆類。Create Table、Drop Table等屬于DDL,Select、Insert等屬于DML

6、主鍵選擇

 SQLServer中倆種常用的資料類型:int(或bigint)+辨別列(又稱自動增長字段);uniqueidentifier(又稱Guid、UUID)

 用辨別列實作字段自增可以避免并發等問題,不要開發人員控制自增。

 用辨別列的字段在insert的時候不用指定主鍵的值,将字段的是辨別列設定為“是”,一個表隻能有一個辨別列

  Guid算法是一種可以産生唯一辨別的高效算法,它使用網卡MAC、位址、納秒級時間、晶片ID碼等算出來的,這樣保證每次生成的Guid永遠不會重複,無論是同一個計算機上還是不同計算機上。SQLServer中生成的Guid函數newid(),.Net中生成的Guid的方法:Guid.NewGuid(),傳回是Guid類型

(*)Int自增字段的優點:占用空間小、無需開發人員幹預、易讀;缺點:效率低,資料導入導出的時候很痛苦。

(*)Guid的優點:效率高、資料導入導出友善;缺點:占用空間大、不易讀。業界主流傾向于Guid插入:

  主鍵:insert into Person3(Name,Age) values('lily',38);

          insert  into Person4(Id,Name,Age) values(newid(),tom',30);

7、資料删除  

   删除表中全部資料:DELETE FROM T_Person。

  Delete隻是删除資料,表還在,和Drop Table不同。

   Delete還可以帶where子句來删除部分資料:DELETE FROM T_Person where  FAge>20

8、資料檢索

 簡單的資料檢索:select * from T_Employee

 隻檢索需要的列:select FNumber from T_Employee、select FName,FAge from T_Employee

      列别名:select FNumber as 編号,FName as  姓名,FAge as 年齡 from T_Employee

  使用where檢索符合條件的資料:select FName from T_Employee  where FSalary<5000.

  還可以檢索不與任何表有關的資料:select 1+1;select newid();select getdate();

9、資料分組

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

      select FAge,Count(*) from T_Employee

       Group by FAge

Group by 子句必須放到where語句之後

 沒有出現在Group by子句中的列是不能放到select語句後的列名清單中的(聚合函數除外)

   錯誤:select FAge,FSalary from T_Employee Group by FAge

  正确:select FAge,AVG(FSalary)from T_Employee Group by FAge

10、Having語句

  在where中不能使用聚合函數,必須使用Having,Having要位于GROUP BY之後:

             select FAge,Count(*) as 人數 from T_Employee

             Group by FAge

             Having Count(*)>1

注意:Having中不能使用未參數分組的列,Having不能替代where。作用不一樣,Having是對分組後的結果進行過濾

11、限制結果集行數

  select top 5 * from T_Employee order by FSalary Desc

(*)檢索按照工資從高到低的順序檢索從第六名開始共計3個人的資訊:

  select top 3 FSalary * from T_Employee where FNumber not in

     (select  top 5 FNumber  from T_Employee

     order by FSalary DESC) order by FSalary DESC

 12、去掉重複資料

  例:select FDepartment from T_Employee

      select  Distinct FDepartment from T_Employee  //加Distinct去掉重複資料

 Distinct是對整個結果集進行資料重複處理的,而不是針對每一個列,是以下面的語句并不會 隻保留FDepartment進行重複值處理:

       select Distinct FDepartment,FSubCompany from T_Employee

13、聯合結果集

 簡單的結果集聯合

 select FNumber,FName,FAge from T_Employee

  union

 select FIdCardNumber,FName,FAge from T_Employee

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

案例:

   要求查詢員工的最低年齡和最高年齡,臨時員工和正式員工要分别查詢

   select '正式員工最高年齡',MAX(FAge) from T_Employee

   union all

   select '正式員工最低年齡',MIN(FAge) from T_Employee

    union all

   select '臨時工最高年齡',MAX(FAge) from T_TempEmployee

    union all

   select '臨時工最低年齡',MIN(FAge) from T_TempEmployee

14、數字函數

 ABS():求絕對值;   CELING():舍入到 最大整數。3.33将被舍入到4、-3.61将被舍入到-3;   FLOOR():舍入到最小整數。3.33将被舍入到3、-3.61将被舍入到-4; ROUND():四舍五入,舍入到離我半徑最近的數。ROUND(3.1425,2).

15、字元串函數

LEN():計算字元串長度;  LOWER()、UPPER():轉小寫、大寫;  LTRIM():字元串左側的空格去掉;  RTRIM():字元串右側的空格去掉;  SUBSTRING(string,start_position,length)參數string為主字元串,start_position為子字元串,在主字元串的起始位置,length為子字元串的最大長度。select SubString(abcdef111',2,3)

16、空值處理函數

   ISNULL(expression,value):如果expression不為空則傳回value。select Isnull(FName,'佚名') as 姓名from T_Employee

17、CASE函數用法

  單值判斷,相當于switch-case

  CASE expression

  WHEN value1 THEN returnvalue1 

  WHEN value2 THEN returnvalue2

  WHEN value3THEN returnvalue3

   ELSE defaultreturnvalue

   END

  例子:

  SELECT  FName,

   (  CASE FLevel

    WHEN 1 THEN 'VIP客戶'

    WHEN 2 THEN '進階客戶'

    WHEN 3 THEN '普通客戶'

     ELSE '客戶類型錯誤'

      END) AS FLevelName from T_Customer

通過今天的視訊學習,了解并掌握了SQL中的一些知識點。

  ------- Windows Phone 7手機開發、.Net教育訓練、期待與您交流! -------

轉載于:https://www.cnblogs.com/junhan/archive/2012/11/23/2784226.html