1. 程式人生 > >sql sever 基礎知識及詳細筆記

sql sever 基礎知識及詳細筆記

false 關系型數據庫 保存 ner 影響 平均值 code framwork 綁定

第六章:程序數據集散地:數據庫

6.1:當今最常用的數據庫

sql server:是微軟公司的產品

oracle:是甲骨文公司的產品

DB2:數據核心又稱DB2通用服務器

Mysql:是一種開發源代碼的關系型數據庫管理系統

6.2:數據庫的基本概念

6.2.1:實體和記錄

實體:就是客觀存在的事物

記錄:每一行對應的實體,在數據庫中,通常叫做記錄

6.2.2:數據庫和數據庫表

數據表:不同類型組織在一起,形成了數據庫表,也可以說表示實體的集合,用來存儲數據。

數據庫:並不是簡單地存儲這些實體的,還有實體的關系,這種關系要數據庫來表示,關系是數據庫的一部分

6.2.3:數據庫管理系統和數據庫系統

數據庫管理系統:是系統軟件,由一個相互關聯的數據集合和一組訪問數據構成。這個數據集合稱為數據庫,包含了很多有用信息,數據庫管理系統是基本目標是提供一個有效的存儲數據的環境,維護數據庫。訪問數據庫信息。

數據庫系統:是一個實際可運行的系統,可以對系統數據存儲,維護,信用!

6.2.4:數據冗余和數據庫完整性

數據冗余:數據重復現象

數據完整性:指數據庫數據的準確性

6.3:登錄sql server數據庫

新建數據庫連接:文件----連接對象資源管理器

服務器下拉框選擇已經連接的服務器

選擇身份驗證方式

6.3.2:新建數據庫登錄名

安全性—登錄名----新建登錄名

輸入密碼,登錄名-指定數據庫

賦予操作限權

6.4:創建和管理sql server數據庫

6.5.1:創建數據庫

數據庫文件

事物日誌文件

文件組

步驟:選擇新建數據庫---輸入名字—設置參數

6.5.3:數據庫的管理和維護

分離和附加數據庫

分離:右擊數據庫---任務 ---分離

附加:數據庫右擊—附加----然後添加

備份和還原:

備份:任務---備份----填寫數據

還原:數據庫右擊—還原---目標數據庫---設置位置

收縮數據庫:

屬性—選項----自動收縮

第七章:用表組織數據

7.1:表相關的基本概念

7.1.1:數據的完整性

檢驗每行數據是否符合要求

檢驗每列數據是否符合要求

1:實體完整性:

實體完整性:要求每行數據都反應不同的實體,不能存在相同的數據行 通過索引,唯一約束,主鍵約束或標識列可以實現實體完整性

域完整性:域完整性指給指定列輸入有效性。

引用完整性約束:在輸入或刪除時,引用完整性約束保持表之間的定義關系

自定義完整性約束:用戶自定義完整性來定義的規則

7.1.2:主鍵和外鍵

主鍵:如果在存儲了很多行時,如何判斷表中沒有重復的數據行,這時需要的列,這個列的值用來標識表中的每一行,用於強制表實體完整性,這樣的列就是主鍵。

一個表只能一個主鍵,並且不允許為空

外鍵:外鍵就是用來和主鍵建立引用關系,相對主表,就是從表的列,這個值要求與主鍵想對應,外鍵用來引用完整性,一個表可以有多個外鍵。

7.2:創建數據庫

7.2.1:在數據庫中創建表

步驟:單機數據庫的表節點—獎顯示數據表

7.2.2:數據類型

二進制數據類型

用來儲存非字符的數據

Binary。Varbinary。image

固定長度二進制

可變長度二進制

儲存圖像

文本數據類型

字符數據包括任意字母,符號或數字

Char,varchar,nchar,nvarchar,text,ntext

固定長度非unicode字符

可變長度非unicode字符

固定長度unicode字符

可變長度unicode字符

儲存長文本信息

儲存可變長度的文本

日期和時間數據類型

用於儲存日期

Datetime

日期

數字數據類型

數字,正數,負數,分數

Int,smallint,tinyint,bigint,float,real

整數,浮點型

貨幣數據類型

儲存貨幣值

Money

金錢

Bit數據類型

是/否

Bit

布爾類型

7.3:完善表的設計結構

7.3.1:書否允許為空

數據庫書否允許為空是一項約束,如果該列為空,則輸入這行的時候,這一項可以不輸入

7.3.2:建立主鍵

選擇列---右擊---然後設置主鍵(有個鑰匙說明成功)

默認值:在不輸入的情況下,指點的值!!

7.3.3標識列:

添加了標識列,就可以實現自增,要有種子和標識增量

7.5:建立表間的關系

7.5.1:如何建立標間的關系

在設計表的時候,可以添加關系(右鍵)

單擊表和列最右側,彈出建立關系,及主鍵對話框,

選擇表,主鍵列對應的外鍵列,單擊確定,並保存結構,這樣就確立了關系

7.6:建立檢查約束

Check約束:用來控制輸入的值得範圍的,(如果輸入不在範圍就報錯)

7.8:刪除數據庫

右擊數據庫表,右擊刪除(如果有建立的關系,一定要先刪除從表的數據,在刪主表的數據)

第八章:用sql語句操作數據

8.1:Sql簡介

8.1.1:Sql做什麽

數據需要一套指令集,能夠識別指令,執行相應的操作並微程序提供數據。

Sql語言:是針對數據庫的一門語言,他可以創建數據庫,數據表,可以進行增 刪 改 插,可以創建視圖,存儲過程

8.1.2:sql組成

DML 用來插入,修改,刪除,數據庫,(關鍵詞:insert,update,delete)

DDL:用來建立數據庫,數據庫對象和定義其列,以create完成指令,如create table(建表)

DQL用來查詢數據庫的,如SELECt(查詢關鍵詞)

DCL用來控制數據庫組件許可

8.1.4:SQL中的運算符

+

-

*

/

取商

%

取余

=

賦值運算符,等於

=

比較運算符

>

大於

<

小於

>=

大於等於

<=

小於等於

<>

不等於

And

並且

Or

或者

Not

邏輯運算符 不是

8.2:使用T-Sql插入數據

8.2.1:使用Insert插入數據

語法:insert 【into】 表名 (列名) values(列值)

8..2.2:一次插入多行數據(不是真正意義上的插入,是在其他表賦值)

Insert select(必須先創建表)

語法:insert into 新表名(列名) select 列名(舊表中的列)1,2,3 from 舊表

Select into (會自動創建表)

Select 舊表的列1,列2,列3 into 新表 from 舊表

插入標識列: select identity(數據類型,種子,增長量) as 別名 into 新表 from 舊表

通過Union 插入多條數據

Insert 表名(列名)

Select 列值 union

Select 列值 union

Select 列值 union

最後一個不要union

8.3:使用更新數據

Update 表名 set 列名=值 [where 條件]

8.4:使用刪除數據

1:使用DELETE刪除數據

語法:DELETE 【from】 表名 【where 條件】

2:使用truncate + table +表名 徹底刪除

第九章:數據查詢基礎

T-Sql查詢基礎

數據在接收查詢請求時,可以理解為逐行判斷,判斷是否符合查詢條件,如果符合,就抽取出來,形成一個類似於表的結構,這就是記錄集

9.1.2:使用select查詢

語法:select 列名(或者*全部) from 表名 where +條件 order by +列名(asc/desc)

查詢所有:select * from 表名

查詢部分列:select 列名1,列名2,from 表名 where +條件

在查詢中取別名:select 列 as +別名 列的別名

在查詢中取別名:select 表 as +別名 表的別名

查詢空值:select 列名 from 表 where 列名(另一個) is null

查詢中使用常量:select 姓名=Sname ,地址=address as 學校 from 表名

查詢返回的行數:select top 5 name,address from 表 where sex=0

查詢排序

9.2.1:如何使用order by

Order by+列名 desc /asc

在查詢中使用函數

9.3.1:字符串函數

Charindex

查找指定字符串其始位置

Select charindex (‘值’,字符串,1)返回數字

Len

返回字符串長度

Select len (字符串)

Ltrim

清除左空格

Select trim (字符串)

Ritrim

清除右空格

Select ritrim (字符串

Right

重右邊截取字符串

Select right(字符串,3)(3表示截取長度)

Replace

替換一個字符串的字符

Selct replace (字符串,替換額字符,替換為那個字符)

Stuff

在字符串中刪除一定長度,在該文置插入另一個

Select stuff(之前的很字符串,替換的坐標,替換的長度,替換為什麽)

9.3.2:日期函數

Getedate()

取得當前系統時間

Select getdate()

Dateadd()

Datediff

將制定的值添加到日期的指定日期後面

Select date (mm,4,日期

返回:)相當於月份增加4,最後返回日期

Datename

兩個日期指定位置的差

Select datediff(mm,日期一,當前日期)

dateprat

日期以字符串的形式顯示

Select datename(dw,日期。返回日期的形式(dw,表示周))

日期中指定的部分顯示出來

Select datepart (day,日期),返回 日

9.3.3:數學函數

Rand

返回0~1的隨機數

Select rand()

Abs

取絕對值

Select abs(數值)

Celing

向上取整

Floor

向下取整

Power

去表達式的冪值

Select power(5,2) 五的二次方

Round

將表達式四舍五入

Sign

正數取1,負數取-1,0取0

Select sign (-23)返回-1

Sqrt

取浮點的平方根

Select sort(9) 返回3

第十章:模糊查詢和聚合函數

10.1:模糊查詢

10,1.1:通配符

_

輸入一個字符

A like ‘C_’ cs/cd 都符合

%

輸入任意長度

B like ‘o%’ const/coke 都符合

[ ]

括號中表示範圍值

C like ‘9wo[1-2]’ 9wo1/9wo2 f符合

[^ ]

不在 括號裏面

D like ‘9w0[^1-2]’ 9w03/9wo7符合

[01]

表示值是0或者1

C like ‘[01]’,

10.1.2:使用like 進行模糊查詢

例:select * from student where sname like ‘張%’ 表示後面任意

例:select * from student where sname like ‘%張%’ 只要有張字符就合法

Select * from student where sex like ‘[01]’, 表示性別可以選擇0 或者 1

In來進行匹配

Select * from student where gradeId in (“0” , ”1”), 表示gradeId的值是0或則1都符合條件

10.1.3:使用between and 在某個範圍找

Select * from scroe where score (not) between 60 and 80

使用in在列舉值中查詢

例:select sname as 學生姓名,from student where address in (’北京’,’上海’,’廣州’) order by address

10.2:T-sql中的聚合函數

(group by)用於對列進行分組,前面必須先select 後面有列(此列),才能使用 group by 加此列

Having也是相當於where條件關鍵詞:但having用於使用了聚合函數的表達式進行加條件 having +用於聚合函數使用的表達式(條件)

Sum函數

SUM(列名) 返回一個值,返回的是此列名的所有值的和

AVG()函數

AVG(列名) 返回的是此列的所有的值的平均值

MAX() 和 MIN()函數

max返回此列所有值得最大值,min返回此列所有值得最小值

第十一章:連接查詢和分組查詢

11.1:分組查詢

11.1.1:使用group分組查詢

分組查詢就是把列進行不同值得分組,然後在分組的基礎上分開查詢! 分組查詢一般結合著聚合函數一起使用!

例子(語法):select couseID ,(第二個分組列) AVG(Score) as 別名 from 表名 group by couseID,(第二個分組列)

註意:如果是多分列的話,直接在couseID後面和group by 後面的cousrID加列就行了

如果使用了group by 關鍵詞查詢,在select 後面指定的列是有限的,允許:

要分組的列

值得表達式 :如聚合函數

11.1.2:使用having進行分組後篩選

Having和where條件類似,不過having條件只能用於group by 分組過後進行加條件

順序:(where group by having)

11.2:多表連接查詢

11.2.1:多表連接查詢分類

內連接查詢

內連接查詢一般用於兩個表有朱外鍵關系的表,(更具表中的共同的列匹配)

語法1:select 列,列 from 表名,表名 where 表.列名=表.列名(兩個列有朱外鍵關系)

語法2:select 列,列 from 表名 inner join 表名 on表.列名=表.列名(兩個列有朱外鍵關系)

(如果是多個表,直接在列後面加,或者在後面加inner join on 條件)

外連接查詢

外連接查詢至少返回表中的所有記錄,根據匹配的有選擇的返回另一章表的記錄

(一般,如果主表中有的記錄可能沒有,也會以null的形式返回,一主表為中心,返回主表那麽多條數據)

左外鏈接:

語法:select 列,列 from 表名 left join 表名 on表.列名=表.列名(兩個列有朱外鍵關系)

右外鏈接:

語法:select 列,列 from 表名 right join 表名 on表.列名=表.列名(兩個列有朱外鍵關系)

(一般以from後面的表為主表)外連接查詢,以主表為中心,返回主表那麽多條數據你,即使有的數據可能沒有,以null顯示

如果要給列的值另去別名(例如要把性別為0或1變成男或女)

u Case when 列 =值 then ‘別名值’ when 列 =值 then ‘別名值’ end

第十四章:使用ADO.NET訪問數據庫

14.1:ADO.NET概述

ADO.Framwork組件:NET.Framework數據庫提供 程序專門的數據處理及快速地只進,只能訪問數據設計的組件.使用它可以連接數據源,執行命令和檢索結果,直接對數據源進行操作,.

DataSet:是專門為獨立任何數據源的數據訪問而設計的.使用它,可以不必直接和數據源打交道,大批量的獨立操作,也可以將數據綁定在空件上.

ADO.Framwork數據提供包含量訪問各種數據庫的對象,它是和數據類型有關的,目前有四種類型的數據提供程序:

導入命名空間:Using system.Data.SqlClient 才能使用數據庫相關的東西

Connetion

建立數據源的連接功能

Commend

對數據庫執行命令(比如sql語句)

DataReader

從數據源中讀取只進且只讀的數據源

DateAdpter

用數據源填充DateSet並解析更新

14.2:使用Connetion對象

導入命名空間:using System Data.sqlclient

Connection對象::是NET.Framwork數據提供程序核心對象之一,它的作用是建立應用程序與數據庫的連接

Connection對象的常用屬性和方法

屬性

說明

ConnectionString

設置/獲取應用程序連接數據庫的連接字符串

方法

說明

Void open()

使用connectionString屬性打開數據庫連接

Viod Close()

關閉數據庫連接

建立數據庫與應用程序建立聯系三步走:

  1. 定義連接字符串(不同的數據庫連接,格式不同)
  2. Data Source =服務名;Initial CataLog=數據庫; user id =用戶名; pwd=密碼
  3. 創建Connection對象 使用定義好的字符串創建Connection對象.
  4. 打開與數據庫的連接:調用Connection對象的Open() 方法打開數據庫連接. Connection.open();

14.3:異常處理

Try-catch-finally:

Try:一般把容易出現問題的代碼的語句放在try結構裏面.

Catch:可以補貨異常,在catch(exaption e) ------輸出e.message

Finally:一定會執行的代碼,一般把關閉數據庫連接的代碼放在裏面

14.4:使用Commend對象

例子:SqlCommend commend=new sqlcommend(string sql, sqlconnection conn);

Commend對象的主要屬性和方法

屬性

說明

Connection

Commend對象使用數據庫連接

CommandText

執行sql語句

方法

說明

IntExcuteNonQuery()

執行不返回的語句,如增,刪,改

sqlDataReader ExcuteReader()

執行sql語句,返回dataReader對象,用於查詢

Object ExcuteScalar()

返回單個值,,如執行count(*),返回首行的第一列

第十五章:使用ADO.NET查詢操作數據

15.1:String和StringBuffer

創建:SringBuffer stb=new StringBuffer();

例子: Stb.Append(“hello”)---------stb.Append(“world”)

可以節省空間,應為在後面用AppendLine追加字符串的時候不會從新創建空間

String Buffer常用的屬性和方法

屬性

說明

Capacity

獲取或設置可包含在當前對象所分配的內存中的最大字符個數

Lenth

獲取當前對象長度

方法

說明

String Budffer AppendFroma(string fromat,object arg0,object arg1)

添加特點格式的字符串

StringBuffer Insert (int index,string Value

在指定的位置插入指定的字符串

String Buffer Append (string value)

在尾部追加字符串

Remove (int startInedx,int length)

移除指定字符串

To.String()

Z轉化為字符串格式的字符

15.2:查詢數據

Commend對象:ExcuteReader()方法,返回的是dataReader對象,通過DataReader就可以從據庫讀取多條數據了.

ADO.NET的DataReader對象可以從數據庫中檢索,只讀,只進的數據流,每次從數據源中提取一條記錄!

SqlDataReader reader =c ommend.ExcuteReader();

DataReader對象的主要屬性和方法

屬性

說明

HasRows

判斷是否讀到記錄,reader.HasRows這個會返回一個布爾類型的值

FieldCount

當前的行數

方法

說明

Bool Read()

Reader.reader() 讀取數據庫中的記錄,返回true/false

Void Colse()

關閉DataReader對象

DataReader對象的用法

創建一個DataReader對象需要調用Commend對象的ExcuteReader() 方法,返回值是一個DataReader對象,可以調用Reader()方法讀取一行記錄

步驟:

  1. 創建Commend對象
  2. 調用Commend的對象ExecuteReader方法返回一個DataReader對象.假設已創建一個Commend對象,名為commend,
  3. 調用Datareader的Reader()方法逐行讀取結果集的記錄,若能讀取到數據,則返回true,否則返回false----- dataReader.Reader();
  4. 讀取當前行的某一列的數據. 象數組一樣,用方括號一樣來讀取一列的值,如(Type) Reader[“StudentName”];

例:(string)dataReader[“StudentName”];

  1. 關閉DataReader對象,調用它的Close()方法.

DataReader.Close()

Return comm.ExcuteReader(CommendBEhavior.CloseConnection)

如果在()裏面加了CommendBEhavior.CloseConnection如果關閉了這個reader.Close() , conn.Close()也將關閉了

15.3:更新數據

EXcuteNonQuery() 此方法是用來進行增,刪,改 用comm. EXcuteNonQuery()方法,

15.3:commend對象的ExcuteNonQuery()方法用於執行指定的sql語句,如update,dalete,它返回的是受影響的記錄行數,現在使用Commend對象的ExcuteNonquery();

步驟:

  1. 創建Connection對象Conn.
  2. 編寫要執行的sql語句.
  3. 創建Commend對象
  4. 執行ExcuteNonquery() 註意:完成操作後不要忘記忘記關閉了conn對象.
  5. 根據ExcuteNonquery() 方法的返回值進行後續的處理,如果返回值小於或等於0,說明沒有記錄影響!!

sql sever 基礎知識及詳細筆記