sql sever 基礎知識及詳細筆記
第六章:程序數據集散地:數據庫
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() |
關閉數據庫連接 |
建立數據庫與應用程序建立聯系三步走:
- 定義連接字符串(不同的數據庫連接,格式不同)
- Data Source =服務名;Initial CataLog=數據庫; user id =用戶名; pwd=密碼
- 創建Connection對象 使用定義好的字符串創建Connection對象.
- 打開與數據庫的連接:調用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()方法讀取一行記錄
步驟:
- 創建Commend對象
- 調用Commend的對象ExecuteReader方法返回一個DataReader對象.假設已創建一個Commend對象,名為commend,
- 調用Datareader的Reader()方法逐行讀取結果集的記錄,若能讀取到數據,則返回true,否則返回false----- dataReader.Reader();
- 讀取當前行的某一列的數據. 象數組一樣,用方括號一樣來讀取一列的值,如(Type) Reader[“StudentName”];
例:(string)dataReader[“StudentName”];
- 關閉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();
步驟:
- 創建Connection對象Conn.
- 編寫要執行的sql語句.
- 創建Commend對象
- 執行ExcuteNonquery() 註意:完成操作後不要忘記忘記關閉了conn對象.
- 根據ExcuteNonquery() 方法的返回值進行後續的處理,如果返回值小於或等於0,說明沒有記錄影響!!
sql sever 基礎知識及詳細筆記