T-SQL語言
按用途分四部分
- 數據定義語言(CREATE,DROP,ALTER)
- 數據操作語言(INSERT,DELETE,UPDATE)
- 數據查詢語言(SELECT)
- 數據控制語言(GRANT,REVOKE,DENY)
數據類型
- 系統數據類型
- 用戶自定義數據類型(建立方式:a.圖形化方式 b.命令方式)
1 use TEST 2 EXEC sp_addtype sno,'varchar(10)','nonull' 3 EXEC sp_droptype sno
變量
命名規則:
字母、下划線、@或#開頭,但不能全為下划線、@或#
不能為“關鍵字”,不能嵌入空格及其他特殊字符,如需使用則需要雙引號或方括號括起
1.局部變量:
由用戶聲明,必須以@開頭,只在定義該變量的過程中有效,局部變量必須先聲明后使用
注意:
- 第一次聲明變量時,其值設置為NULL。
- 局部變量不能使用“變量=變量值”的格式進行初始化,必須使用SELECT或SET語句來設置其初始值。
- 如果聲明字符型的局部變量,一定要在變量類型中指明其最大長度,否則系統默認其長度為1。
- 若要聲明多個局部變量,請在定義的第一個局部變量后使用一個逗號,然后指定下一個局部變量名稱和數據類型。
1 USE student 2 DECLARE @var1 char(10),@var2 int 3 SET @var1='number' 4 select @var2=cgrade 5 from sc 6 where sno='201810010' 7 8 print @var1+"s"
2.全局變量:
由系統定義,供SQL server系統內部使用的變量,任何程序任何時間都可以調用。通常以“@@”開頭。
T-SQL語句
1.注釋語句
(1) --
(2) /*……*/
2.批處理--GO
3.控制流程語句
(1) begin...end語句(相當於C語言中的{} )
(2) if...else語句(可嵌套)
(3)case語句(多條件選擇語句)
(4)print語句(屏幕輸出語句)
(5)while語句(有條件的循環語句)
(6)goto語句(無條件跳轉語句)
(7)break語句
(8)continue語句
4.常用函數(系統函數、用戶自定義函數)
一些系統函數:
(1)字符串函數
(2)數學函數
(3)日期和時間函數
(4)聚合函數
注意:
用戶自定義函數:
1.分類:
標量值函數:返回單個值
內聯表值函數:返回可更新的表
多語句表值函數:返回不可更新的表
2.標量值函數命令方式創建
1 CREATE FUNCTION f2(@a real,@b real) 2 RETURNS real 3 AS 4 BEGIN 5 IF @a>=@b 6 RETURN @a 7 RETURN @b 8 END 9 10 PRINT '最大值為' 11 PRINT dbo.f2(77,56)
1 CREATE FUNCTION f3(@n real) 2 RETURNS real 3 AS 4 BEGIN 5 DECLARE @i real,@sum real 6 SET @i=0 7 SET @sum=0 8 WHILE @i<@n 9 BEGIN 10 SET @i=@i+1 11 SET @sum=@sum+@i 12 END 13 RETURN @sum 14 END 15 16 PRINT dbo.f3(10)
3.自定義函數的調用
(1)標量值函數可以使用select、print、exec調用
(2)表值函數只能用select調用
4.刪除方式
drop function 函數名
數據庫
數據庫概述
1.數據庫常用對象:
表、數據類型、視圖、索引、存儲過程、觸發器
系統數據庫:
master、model、tempdb、msdb
2.數據庫存儲結構(數據庫文件、數據庫文件組):
數據庫文件:
存放數據庫數據和數據庫對象的文件。一個數據庫文件只屬於一個數據庫。
(1)主數據文件
是數據庫的起點,指向數據庫中文件的其他部分。每個數據庫都有一個主數據文件。主數據文件的擴展名是 .mdf
(2)次數據文件
包含除主數據文件外的其他數據文件。有些數據庫可能沒有次數據文件,而有些數據庫則有多個次數據文件。次數據文件的擴展名是 .ndf
(3)日志文件
包含恢復數據庫所需的所有日志信息。每個數據庫必須至少有一個日志文件,但可以不止一個。日志文件的擴展名是 .ldf
數據庫文件組:
文件組允許多個數據庫文件組成一個組,並對它們整體進行管理。
文件組是將多個數據文件集合起來形成的一個整體(主文件組+次文件組)
一個數據文件只能存在於一個文件組中,一個文件組也只能被一個數據庫使用
日志文件不分組,他不屬於任何文件組
創建數據庫
1 CREATE DATABASE student 2 ON PRIMARY 3 ( 4 NAME=student_data, 5 FILENAME='d:\student_mdf.mdf', 6 SIZE=20, 7 MAXSIZE=unlimited, 8 FILEGROWTH=25% 9 ), 10 ( 11 NAME=student_data1, 12 FILENAME='d:\student_ndf.ndf', 13 SIZE=20, 14 MAXSIZE=25, 15 FILEGROWTH=25% 16 ) 17 LOG ON 18 ( 19 NAME=student_log1, 20 FILENAME='d:\student_ldf1.ldf', 21 SIZE=3, 22 MAXSIZE=10, 23 FILEGROWTH=1 24 ), 25 ( 26 NAME=student_log2, 27 FILENAME='d:\student_ldf2.ldf', 28 SIZE=3, 29 MAXSIZE=10, 30 FILEGROWTH=1 31 )
修改數據庫
ALTER DATABASE 語句的選項較多,但一次只能選擇其中一項,所以還是比較簡單的。
刪除數據庫
對於不再使用的數據庫應該刪除它以釋放數據庫所占用的存儲空間。
只有處於正常狀態下的數據庫,才能使用drop語句刪除(當數據庫正在使用或正在恢復等不能刪除)
DROP DATABASE tsg1,tsg2,tsg3
表
表的概述
數據表也簡稱為表,它是數據庫中唯一用來存儲數據的對象,是整個數據庫的核心和基礎。
1.數據庫與數據表的關系
- 數據庫包含數據表,一個數據庫可以包含多個數據表。數據表是數據庫的對象。
- 一個數據庫對應一個文件。一個數據庫對應一個主題。
- 先創建數據庫,再創建數據表。先打開數據庫,再打開數據表。
2.數據表的組織
不同的數據模型組織表的方式不同,在基於關系模型創建的數據表中,數據是以行和列的形式進行組織和保存的,我們也稱為“二維表”。
3.數據表的組成
數據表一般由以下三部分組成
(1)表名
表名既用於概括表中的信息,也方便引用。可以根據需要對表重新命名,但重新命名前,需要將數據表關閉。
(2)表結構
所謂表結構就是不包括任何記錄的數據表,也稱為“空表”。空表通常只有字段名及其屬性,沒有任何數據。
(3)表記錄
數據表中除字段名外的每行稱為一條“記錄”。
每一條記錄的內容由其對應的數據項組成,反應某個事物相關信息的原始數據。
只有在建立了表結構后才能向表中輸入記錄。記錄的內容隨時可以根據需要更改。
4.數據表的創建與修改
創建表的過程,實際上是定義表的結構,確定表的組織形式的過程。
具體講就是定義表中屬性的個數、屬性名、屬性的數據類型、屬性大小、定義索引、主鍵以及完整性等。
在創建表之前要設計號表的結構,確定上述內容,並確定無誤才開始具體的建表操作。
SQL語句創建表
1 USE stu 2 CREATE TABLE student 3 ( 4 sno varchar(10) not null primary key, 5 sname varchar(20) , 6 sgender char(2) , 7 sage int , 8 sdept varchar(20) 9 ) 10 11 USE stu 12 CREATE TABLE course 13 ( 14 cno varchar(10) not null primary key, 15 cname varchar(20) , 16 ccredit smallint 17 ) 18 19 USE stu 20 CREATE TABLE sc 21 ( 22 sno varchar(10) not null, 23 cno varchar(10) not null, 24 cgrade smallint , 25 primary key(sno,cno), 26 foreign key (sno) references student(sno), 27 foreign key (cno) references course(cno) 28 )
SQL語句修改表結構
SQL語句刪除表
SQL語句插入元組
SQL語句修改表
SQL語句刪除元組
視圖
視圖的概念
視圖概述
視圖(View) 是一種數據庫對象,是從若千個表或已經存在的視圖中按照某種條件提取的數據組成的“虛表”。
之所以說它是“虛表”,是因為視圖本身並不保存任何數據,其數據仍然存儲在視圖所引用的基本表中。
相對於視圖,我們將以前所學過的數據表稱為基本表。
視圖和表類似,也是包括被定義的數據列和多個數據行,但這些數據列和數據行是建立在對基本表查詢的基礎上的,就本質而言,這些數據行和列來源於視圖所引用的表。被引用的表也稱為“數據源”。
在數據庫中保存的視圖實際上是創建視圖時提取數據的規則和方法!
視圖可以是一個數據表的一部分,也可以是多個基表的聯合。
關於視圖
- 視圖一經定義便存儲在數據庫中,其保存的是視圖創建的方法和提取數據的規則。
- 只有在運行視圖時,才能看到視圖中的數據, 這些數據在運行視圖時按照某種條件從指定的數據源提取,並按視圖定義的布局顯示出來。
- 當通過視圖對所看到的數據進行修改時,其所引用的數據源中的數據也會發生變化。反之,當數據源中的數據發生變化時,這種變化后的數據將自動反映到視圖中。因此視圖與其引用的數據源(基本表、 已經存在的視圖)是彼此相關聯的。
視圖的優點
與表相比較,視圖具有如下優點:
(1)視圖可以屏蔽數據的復雜性,簡化用戶對數據庫的操作。
(2)視圖可以讓不同的用戶以不同的方式看到不同或者相同的數據集。利用視圖對數據源的數據直觀地進行瀏覽和編輯。
(3)可以使用視圖重新組織數據。根據需要從指定數據源中提取滿足條件的數據,從而實現定制數據。
(4)從若干個表或視圖中提取更多、更有用的綜合信息,從而實現高效率地處理、加工數據。
(5)可以對提取的數據進行瀏覽、篩選、排序、檢索、統計和更新等操作。
(6)視圖可以定制不同用戶對數據的訪問權限。
視圖與表的區別
1.視圖是已經編譯好的SQL語句,而表不是。
2.視圖不保存數據記錄,而表保存數據記錄。
3.視圖是查看數據表的一種方式,只是一些SQL語句的集合。
4.表是實表,視圖是虛表。
5.視圖的創建和刪除只影響視圖本身,不影響其引用的表。
使用CREATE VIEW 命令創建視圖
使用Transact-SQL語句中的CREATE VIEW 命令創建視圖,其語法形式如下:
CREATE VIEW <視圖名> [(字段名)[,……n]]
[WITH ENCRYPTION] ] --對視圖進行加密
AS
SELECT sname, sdept
FROM studentinfo
WHERE sdept = 'cs'
[WITH CHECK OPTION]
說明:
[WITH ENCRYPTION] --對視圖進行加密
[WITH CHECK OPTION] --強制針對視圖執行的所有數據修改語句必須符合在子查詢中設置的條件
例:在產品銷售數據庫CPXS中創建價格不大於2000的有關產品情況的視圖VIEW_CP_PRICE2000,要求加密並保證對該視圖的更新都要符合價格不大於2000這個條件
USE CPXS go create view VIEW_CP_PRICE2000 with encryption -- 加密 as select * from 產品 where 價格<=2000 with check option -- 檢查
例:基於VIEW_GMQK視圖,查詢各客戶在2006年10月9日購買產品的情況。
USE CPXS select * from VIEW_GMQK where 銷售日期='2006-10-09'
例:利用T-SQL語句對於視圖VIEW_CP_PRICE2000進行以下數據更新。(1)插入一條產品記錄( '0042','數碼相機',1500,2)(2)刪除產品編號為’ 0042’的產品
USE CPXS insert into VIEW_CP_PRICE2000 values('0042','數碼相機',1500,2) USE CPXS delete from VIEW_CP_PRICE2000 where 產品編號='0042'
例:將VIEW_CP_PRICE2000視圖不加密。
USE CPXS go alter view VIEW_CP_PRICE2000 as select * from 產品 where 價格<=2000 with check option
例:將VIEW-GMQK視圖刪除。
USE CPXS go drop view VIEW_GMQK
例:對產品表,在產品名稱上定義一個唯一非聚簇的索引ind_cp,降序。
USE CPXS create unique nonclustered index ind_cp on 產品(產品名稱 DESC)
例:通過執行系統存儲過程,顯示產品表的索引文本。
exec sp_helpindex 產品
exec sp_rename 原視圖名稱, 新視圖名稱
use 學生課程數據庫 go exec sp_rename 'old_name','new_name'
例:刪除ind_cp索引。
USE CPXS drop index 產品.ind_cp