范例建立资料表的索引课件.ppt

上传人:牧羊曲112 文档编号:4084815 上传时间:2023-04-03 格式:PPT 页数:60 大小:989.50KB
返回 下载 相关 举报
范例建立资料表的索引课件.ppt_第1页
第1页 / 共60页
范例建立资料表的索引课件.ppt_第2页
第2页 / 共60页
范例建立资料表的索引课件.ppt_第3页
第3页 / 共60页
范例建立资料表的索引课件.ppt_第4页
第4页 / 共60页
范例建立资料表的索引课件.ppt_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《范例建立资料表的索引课件.ppt》由会员分享,可在线阅读,更多相关《范例建立资料表的索引课件.ppt(60页珍藏版)》请在三一办公上搜索。

1、第10章 SQL定義、操作與控制指令,10-1 SQL語言的基礎10-2 SQL查詢工具10-3 資料庫的實體資料模型10-4 資料定義語言10-5 資料操作語言10-6 資料控制語言10-7 產生SQL Server指令碼精靈,10-1 SQL語言的基礎,10-1-1 SQL結構化查詢語言10-1-2 關聯式資料庫管理系統的查詢最佳化,10-1-1 SQL結構化查詢語言-說明,SQL(Structured Query Language)的全名是結構化查詢語言,筆者簡稱為SQL語言,SQL語言是ANSI(American National Standards Institute)制定的標準資料

2、庫語言,其版本分為:1989年的ANSI-SQL 891992年制定的ANSI-SQL 92,也稱為SQL 2,這是目前關聯式資料庫的標準語言最新版ANSI-SQL 99稱為SQL 3,適用在物件關聯或導向式資料庫的SQL語言。,10-1-1 SQL結構化查詢語言-種類,SQL語言依指令功能,可以分成三類,如下所示:資料定義語言DDL(Data Definition Language):建立資料表、視界和索引等的SQL指令。資料操作語言DML(Data Manipulation Language):資料表記錄插入、刪除、更新和查詢指令。資料控制語言DCL(Data Control Langua

3、ge):資料庫安全管理的權限設定指令。,10-1-2 關聯式資料庫管理系統的查詢最佳化-執行順序圖例,SQL指令需要轉換成低階機器語言指令來執行查詢,其轉換的步驟即查詢處理模組(Query Processor)子系統的執行順序,如下圖所示:,10-1-2 關聯式資料庫管理系統的查詢最佳化-SQL查詢的步驟,第一步:在查詢剖析器檢查SQL語言的語法是否正確,且驗證屬性和關聯表名稱是否存在。第二步:在查詢最佳化模組將它轉換成中間格式關聯式代數建立的查詢樹(Query Tree),然後執行最佳化處理產生執行計劃(Execution Plan)。第三步:使用RDBMS提供的選擇、合併、投影等關聯代數運

4、算子的演算法,從執行計劃產生所需的程式碼。第四步:使用直譯或編譯方式將程式碼轉換成機器語言後,就可以執行SQL指令產生查詢結果。,10-1-2 關聯式資料庫管理系統的查詢最佳化-查詢樹(Query Tree),查詢樹(Query Tree)是一棵關聯式代數運算式的樹狀結構,查詢樹的節點規則,如下所示:關聯表是樹的葉節點(Leaf Nodes)。關聯式代數運算子是中間節點(Internal Nodes)。,10-1-2 關聯式資料庫管理系統的查詢最佳化-查詢樹圖例,SELECT Students.name,Classes.roomFROM Students,ClassesWHERE Studen

5、ts.sid=Classes.sid and Students.GPA=3.0 and Classes.c_no=CS222,10-1-2 關聯式資料庫管理系統的查詢最佳化-查詢最佳化模組,查詢最佳化模組(Query Optimizer)的功能是在最佳化查詢樹,讓查詢樹執行的更有效率。最佳化的作法有很多種,最簡單的方式是將查詢樹的節點轉換成更有效率且相等功能的節點,這些最佳化規則稱為啟發式查詢最佳化(Heuristic Query Optimization)技術。,10-1-2 關聯式資料庫管理系統的查詢最佳化-查詢最佳化技術1,啟發式查詢最佳化(Heuristic Query Optimiz

6、ation):這是規則基礎的最隹化,使用關聯式代數已知的轉換規則產生最有效率的執行計劃,例如:將卡笛生乘積運算和之後的選擇運算以合併運算來取代。造句法式查詢最佳化(Syntactical Query Optimization):以查詢樹自行造句找出所有同等功能的可能關聯式代數運算式,其最佳化的依據主要在評估是否有索引可以改進執行效率,以便找出最佳的執行計劃。,10-1-2 關聯式資料庫管理系統的查詢最佳化-查詢最佳化技術2,成本基礎式查詢最佳化(Cost-Based Query Optimization):使用RDBMS各種資訊評估使用那一種順序執行關聯式代數運算式擁有最低的成本,以找出最有效

7、率的存取方式,這是SQL Server和目前大多數RDBMS採用的最佳化技術。語意式查詢最佳化(Semantic Query Optimization):語意式查詢最佳化需要查詢最佳化模組了解資料庫綱要,可以自行依所知的系統限制來簡化或刪除查詢結果是空集合的部分查詢,而且可以自行評估是否使用索引來加速資料存取。,10-1-2 關聯式資料庫管理系統的查詢最佳化-執行計劃,執行計劃(Execution Plan)是從已經最佳化的查詢樹轉換而得的一個執行策略。執行計劃包含如何存取每一個關聯表的資料存取方式。例如:關聯表使用那一個屬性排序,或是否存在其他屬性的索引。,10-1-2 關聯式資料庫管理系統

8、的查詢最佳化-執行計劃演算法,選擇運算:使用線性搜尋(Linear Search)、二元搜尋(Binary Search)或雜湊表搜尋法(Hash Table Search)來找尋值組,在索引部分可以使用叢集索引(Clustering Index)或B-樹演算法。合併運算:使用巢狀迴圈合併(Nested-loop Join)、單迴圈合併(Single-loop Join)、排序合併(Sort Merge Join)和雜湊合併(Hashing Merge Join)等多種合併演算法。投影運算:沒有特別的演算法,因為只是刪除一些關聯表的屬性。,10-2 SQL查詢工具,10-2-1 Query E

9、xpress查詢工具10-2-2 使用Query Express查詢工具,10-2-1 Query Express查詢工具-說明,Query Express查詢工具是Joseph Albahari所開發的SQL查詢工具,它的操作介面類似舊版SQL Server 2000版的Query Analyzer。Query Express不只可以作為SQL Server或Oracle的客戶端工具,它還可以作為MSDE和SQL Server 2005 Express的查詢工具。Query Express支援.NET Framewrok 2.0版,它是使用C#和ADO.NET建立的客戶端資料庫應用程式,使用

10、OLE DB連接資料庫伺服器來執行SQL指令。,10-2-1 Query Express查詢工具-架構,主從架構的資料庫系統,客戶端工具Query Express使用微軟OLE DB來連接伺服端SQL Server、Oracle或與OLE DB相容的資料庫伺服器。,10-2-2 使用Query Express查詢工具-啟動Query Express,請將書附光碟QExpress.zip壓縮檔案解開後,按二下【QueryExpress.exe】程式檔案啟動Query Express,如下圖所示:,10-2-2 使用Query Express查詢工具-結束Query Express,結束Query

11、 Express請執行檔案結束指令,即可中斷連接、關閉查詢視窗和結束Query Express的執行。,10-2-2 使用Query Express查詢工具-開啟與執行SQL指令碼,當在編輯視窗輸入SQL指令後,只需按上方工具列的【儲存查詢】鈕,就可以儲存成副檔名為.sql的程式碼檔案。對於書附光碟眾多的SQL指令碼檔案,我們可以使用Query Express來載入和執行。,10-3 資料庫的實體資料模型-Students資料表,當完成第6章和第7章的School學校資料庫設計後,我們就可以依據資料庫設計來建立實體資料模型(Physical Data Model),然後在資料庫使用SQL指令新

12、增所需的資料表。Students資料表,10-3 資料庫的實體資料模型-Instructors與Courses資料表,Instructors資料表Courses資料表,10-3 資料庫的實體資料模型-Classes資料表,Classes資料表,10-4 資料定義語言,10-4-1 CREATE TABLE新增關聯表10-4-2 ALTER TABLE更改關聯表綱要10-4-3 DROP TABLE刪除整個關聯表10-4-4 TRUNCAT TABLE 刪除關聯表內容10-4-5 CREATE INDEX建立索引10-4-6 DROP INDEX刪除索引,10-4 資料定義語言,SQL的資料定義

13、語言(DDL)是用來建立關聯式資料庫綱要,也就是在資料庫建立每一個關聯表綱要、視界、索引和設定完整性限制條件。DDL指令可以分成數種,如下所示:建立資料表指令:SQL指令建立基底關聯表是使用CREATE TABLE指令,同時還可以設定關聯表的完整性限制條件,在這一節筆者主要說明的是DDL指令。建立視界指令:建立視界(Views)的指令是CREATE VIEW,詳細的說明請參閱第13章。建立索引指令:建立資料表索引的DDL指令,也是在本節說明。,10-4-1 CREATE TABLE新增關聯表-CREATE TABLE 語法,CREATE TABLE table_name(column1 dat

14、atype NOT NULL|NULL DEFAULT value1,column2 datatype NOT NULL|NULL DEFAULT value2,column3 datatype NOT NULL|NULL DEFAULT value3,.columnN datatype NOT NULL|NULL DEFAULT valueN,PRIMARY KEY(column_list),FOREIGN KEY(column_list)REFERENCES table_name(column_list),CHECK(expr),10-4-1 CREATE TABLE新增關聯表-語法說明,

15、NOT NULL|NULL:欄位值是否可以為虛值,如果沒有指明,預設是NULL,可以是空值。DEFAULT:指定欄位的預設值,如果欄位沒有輸入資料,預設是填入之後的value1N值。PRIMARY KEY():指定資料表的主鍵,括號內是主鍵的欄位,如果是複合鍵,欄位請使用逗號分隔。FOREIGN KEY()/REFERENCES():指定資料表的外來鍵,括號為外來鍵的欄位清單,REFERENCE是參考的資料表,括號是參考資料表的主鍵。CHECK():設定欄位的限制條件,在括號內是條件的運算式。,10-4-1 CREATE TABLE新增關聯表-建立Students資料表,建立Students資

16、料表:Ch10-4-1-1.sql在School資料庫建立Students資料表,SQL指令如下所示:CREATE TABLE Students(sid CHAR(4)NOT NULL,name VARCHAR(12)NOT NULL,tel VARCHAR(15),birthday DATETIME,GPA FLOAT,PRIMARY KEY(sid),CHECK(GPA=0.0 and GPA=4.0),10-4-1 CREATE TABLE新增關聯表-建立Instructors資料表,建立Instructors資料表:Ch10-4-1-2.sql在School資料庫建立Instructo

17、rs資料表的SQL指令,主鍵是eid欄位,如下所示:CREATE TABLE Instructors(eid CHAR(4)NOT NULL,name VARCHAR(12)NOT NULL,rank VARCHAR(10),department VARCHAR(5),PRIMARY KEY(eid),10-4-1 CREATE TABLE新增關聯表-建立Courses資料表,建立Courses資料表:Ch10-4-1-3.sql在School資料庫建立Courses資料表的SQL指令,主鍵是c_no欄位,如下所示:CREATE TABLE Courses(c_no CHAR(5)NOT NU

18、LL,title VARCHAR(30)NOT NULL,credits INT DEFAULT 3,PRIMARY KEY(c_no),10-4-1 CREATE TABLE新增關聯表-建立Classes資料表,建立Classes資料表:Ch10-4-1-4.sql在School資料庫建立Classes資料表的SQL指令,如下所示:CREATE TABLE Classes(eid CHAR(4)NOT NULL,sid CHAR(4)NOT NULL,c_no CHAR(5)NOT NULL,time DATETIME,room VARCHAR(8),score FLOAT,PRIMARY

19、KEY(eid,sid,c_no),FOREIGN KEY(eid)REFERENCES Instructors(eid),FOREIGN KEY(sid)REFERENCES Students(sid),FOREIGN KEY(c_no)REFERENCES Courses(c_no),10-4-2 ALTER TABLE更改關聯表綱要-新增/刪除欄位(語法),新增/刪除資料表欄位如果資料表的欄位需要增減,並不需要重新建立資料表,可以使用ALTER TABLE指令來新增/刪除欄位,其基本語法如下所示:ALTER TABLE table_name ADD column_name datatyp

20、eDROP COLUMN column_name,10-4-2 ALTER TABLE更改關聯表綱要-新增/刪除欄位(範例),新增資料表欄位:Ch10-4-2-1.sql在Students資料表新增SSN欄位的身份證字號,資料型態是CHAR(10),其SQL指令如下所示:ALTER TABLE StudentsADD SSN CHAR(10)刪除資料表欄位:Ch10-4-2-2.sql在Students資料表刪除欄位SSN,其SQL指令如下所示:ALTER TABLE StudentsDROP COLUMN SSN,10-4-2 ALTER TABLE更改關聯表綱要-新增主鍵(語法),新增/刪

21、除資料表的主鍵如果在建立資料表時沒有指定主鍵,可以使用ALTER TABLE指令新增資料表的主鍵,其基本語法如下所示:ALTER TABLE table_name ADD PRIMARY KEY(column_list)DROP PRIMARY KEY,10-4-2 ALTER TABLE更改關聯表綱要-新增主鍵(範例),請先執行檔案名稱:Ch10-4-2-3.sql建立Employees資料表,但是沒有指定主鍵。新增主鍵:Ch10-4-2-4.sql接著使用ALTER TABLE指令新增Employees的主鍵SSN,其SQL指令如下所示:ALTER TABLE EmployeesADD P

22、RIMARY KEY(SSN),10-4-2 ALTER TABLE更改關聯表綱要-新增外來鍵(語法),新增/刪除資料表的外來鍵如果在建立資料表時沒有指定外來鍵,可以使用ALTER TABLE指令新增資料表的外來鍵,也就是建立關聯表間的關聯性(Relationships),其基本語法如下所示:ALTER TABLE table_name ADD CONSTRAINT constraint_nameFOREIGN KEY(column_list)REFERENCES table_name(column_list)DROP CONSTRAINT constraint_name,10-4-2 ALT

23、ER TABLE更改關聯表綱要-新增外來鍵(範例1),新增外來鍵:Ch10-4-2-5.sql繼續以上一節的Employees資料表為例,使用ALTER TABLE指令新增Employees資料表的外來鍵eid欄位,它是參考到Instructors的eid欄位,其SQL指令如下所示:ALTER TABLE EmployeesADD CONSTRAINT constraint_eidFOREIGN KEY(eid)REFERENCES Instructors(eid),10-4-2 ALTER TABLE更改關聯表綱要-新增外來鍵(範例2),刪除外來鍵:Ch10-4-2-6.sql在Employ

24、ees資料表刪除外來鍵,也就是刪除名為constraint_eid的限制條件,其SQL指令如下所示:ALTER TABLE EmployeesDROP CONSTRAINT constraint_eid,10-4-2 ALTER TABLE更改關聯表綱要-新增/刪除欄位的限制條件(語法),新增/刪除欄位的限制條件ALTER TABLE指令可以新增/刪除資料表欄位的限制條件,其基本語法如下所示:ALTER TABLE table_name ADD CONSTRAINT constraint_nameDEFAULT value FOR column_name|CHECK(expr)DROP CON

25、STRAINT constraint_name,10-4-2 ALTER TABLE更改關聯表綱要-新增/刪除欄位的限制條件(範例1),新增欄位預設值:Ch10-4-2-7.sql在Employees資料表新增name欄位預設值,其SQL指令如下所示:ALTER TABLE EmployeesADD CONSTRAINT default_nameDEFAULT 陳會安 FOR name,10-4-2 ALTER TABLE更改關聯表綱要-新增/刪除欄位的限制條件(範例2),新增欄位的限制條件:Ch10-4-2-8.sql在Students學生資料表新增生日birthday欄位限制條件,其SQL

26、指令如下所示:ALTER TABLE StudentsADD CONSTRAINT check_birthdayCHECK(birthday=1950-1-1 and birthday=2000-12-31),10-4-3 DROP TABLE刪除整個關聯表,對於資料庫已經存在的基底關聯表,可以使用DROP TABLE 指令刪除指定的資料表,刪除的範圍包含資料表索引、記錄和視界,其基本語法如下所示:DROP TABLE table_name上述語法是從資料庫刪除table_name的資料表。刪除資料表:Ch10-4-3.sql刪除Employees資料表的SQL指令,如下所示:DROP TAB

27、LE Employees,10-4-4 TRUNCAT TABLE刪除關聯表內容,資料庫已經存在的基底關聯表,如果想刪除資料表的記錄,但是保留關聯表綱要,可以使用TRUNCAT TABLE 指令來刪除指定資料表的內容,其基本語法如下所示:TRUNCATE TABLE table_name刪除資料表的內容:Ch10-4-4.sql刪除Classes資料表內容,其SQL指令如下所示:TRUNCATE TABLE Classes,10-4-5 CREATE INDEX建立索引-說明,以單層有序索引(Single Level Ordered Index)來說,使用主鍵排序建立的索引稱為主索引(Prim

28、ary Index)。非主鍵排序的索引稱為叢集索引(Clustering Index),其他非排序欄位稱為次索引(Secondary Index),也稱為非叢集索引(Non-clustering Index)。一個基底關聯表只能擁有一個主索引或叢集索引來決定記錄的排序方式,如果還有其他索引一定是次索引,在一個基底關聯表可以擁有多個次索引。SQL Server可以建立叢集和非叢集索引,當在資料表指定主鍵時,預設建立此欄位的叢集索引(當然我們也可稱它為主索引),其他欄位的索引稱為非叢集索引(即次索引)。,10-4-5 CREATE INDEX建立索引-語法,DDL的CREATE INDEX指令可以

29、建立基底關聯表的索引,其基本語法如下所示:CREATE UNIQUE INDEX index_name ON table_name(column_name(length),.)ASC|DESC 上述語法可以建立SQL Server資料表的非叢集索引,UNIQUE是指索引值為唯一,表示不能有2筆記錄擁有相同索引值,index_name是索引名稱,column_name欄位如果不只一個,請使用逗號分隔。length欄位是長度,可以使用部分欄位值來建立索引資料,ASC是由小到大排序,DESC是由大到小。,10-4-5 CREATE INDEX建立索引-範例,建立資料表的索引:Ch10-4-5.sql

30、在Students學生資料表新增欄位name索引資料,其SQL指令如下所示:CREATE INDEX index_students ON Students(name),10-4-6 DROP INDEX刪除索引,DDL的DROP INDEX指令可以刪除基底關聯表的索引資料,其基本語法如下所示:DROP INDEX table_name.index_name上述table_name是資料表名稱,index_name是索引名稱。刪除資料表的索引:Ch10-4-6.sql在Students學生資料表刪除索引資料的SQL指令,如下所示:DROP INDEX Students.index_student

31、s,10-5 資料操作語言,10-5-1 INSERT新增記錄10-5-2 UPDATE更新記錄10-5-3 DELETE刪除記錄10-5-4 Management Studio編輯資料表,10-5 資料操作語言,SQL的資料操作語言(DML)可以新增、刪除和更新資料表的記錄,換句話說,DDL是建立資料庫綱要,DML是建立資料庫副本(Instance)。SQL語言的資料表操作指令一共有3個,如下表所示:INSERT:在資料表插入一筆新記錄UPDATE:更新資料表的記錄,這些記錄是已經存在的記錄DELETE:刪除資料表的記錄,10-5-1 INSERT新增記錄-語法,SQL語言的INSERT指令

32、可以新增一筆記錄到資料表,INSERT指令的基本語法,如下所示:INSERT INTO table(column1,column2,.)VALUES(value1,value2,)上述SQL指令的table為新增記錄的資料表名稱,column1n是資料表內的欄位名稱,不需全部欄位,不過需要包含所有非虛值欄位,value1n是對應的欄位值。,10-5-1 INSERT新增記錄-注意事項,INSERT指令的注意事項,如下所示:不論是欄位或值的清單,都需要使用逗號分隔。在INSERT指令VALUES的值中,數值不用單引號包圍,字元與日期/時間需要單引號括起。INSERT指令的欄位名稱清單,並不需要和

33、資料表定義的欄位數目或順序相同,只需列出需要值的欄位,不過括號內的欄位名稱順序要和VALUES值的順序相同。,10-5-1 INSERT新增記錄-範例,新增記錄:Ch10-5-1-1.sql在Students新增一筆學生記錄的SQL指令,如下所示:INSERT INTO Students VALUES(S001,陳會安,02-22222222,1967/09/03,3.7)上述SQL指令可以新增一筆記錄。,10-5-2 UPDATE更新記錄-語法,SQL語言的UPDATE指令可以將資料表符合條件的記錄,更新指定欄位的內容,基本語法如下所示:UPDATE table SET column1=va

34、lue1 WHERE conditionstable是資料表,SET子句column1是資料表的欄位名稱,不用全部只需更新欄位,value1是更新欄位值。更新的欄位不只一個請使用逗號分隔,如下:UPDATE table SET column1=value1,column2=value2 WHERE conditions,10-5-2 UPDATE更新記錄-注意事項與範例,UPDATE指令的注意事項,如下所示:WHERE子句是UPDATE指令的必要元素,如果沒有此條件,資料表所有記錄欄位都會被更新。更新欄位值如果為數值不用單引號包圍,字元與日期/時間需要使用單引號包圍。更新記錄:Ch10-5-2

35、.sql在資料表Students更改學號S001生日和GPA,其SQL指令如下所示:UPDATE Students SET birthday=1968-09-12,GPA=3.0WHERE sid=S001,10-5-3 DELETE刪除記錄-語法,SQL語言的DELETE指令可以將資料表符合條件的記錄刪除掉,DELETE指令的基本語法,如下所示:DELETE FROM table WHERE conditionstable是資料表,WHERE子句conditions為刪除記錄的條件,口語來說是:將符合conditions條件的記錄刪除掉。,10-5-3 DELETE刪除記錄-注意事項與範例,

36、DELETE指令的注意事項,如下所示:WHERE子句是DELETE指令的必要元素,如果沒有此條件,資料表內的所有記錄都會被刪除掉。WHERE條件可以使用=、=等比較運算子。WHERE條件如果不只一個條件,可以使用邏輯運算子and或or連結。刪除記錄:Ch10-5-3.sql在資料表Students刪除學號S001記錄,其SQL指令如下所示:DELETE FROM Students WHERE sid=S001,10-5-4 Management Studio編輯資料表,SQL Server在建立School資料庫和使用SQL指令新增四個資料表後,就可以使用Management Studio在資

37、料表新增測試的記錄資料。,10-6 資料控制語言-說明,SQL語言的資料控制語言(Data Control Language,DCL)可以定義資料庫安全管理所需的規則,授予或撤回使用者的相關權限,讓使用者:只能執行授權的操作和處理擁有權限的資料。限制無法執行或取得沒有授權的操作或資料。,10-6 資料控制語言-GRANT指令,GRANT指令可以授予資料庫使用者的權限,其基本語法如下所示:GRANT ALL PRIVILEGES|privileges(column,columnn),privileges ON table_name TO user_name,user_name.上述語法可以在ON

38、子句指定授予哪一個table_name資料表的權限,在privileges權限的括號中可以指定擁有哪些欄位的權限。,10-6 資料控制語言-REVOKE指令,REVOKE指令是對應GRANT指令,可以徹回某位使用者所授予的權限,其基本語法如下所示:REVOKE ALL PRIVILEGES|privileges(column,columnn),privileges ON table_name FROM user_name,user_name.上述語法可以在ON子句指定徹回哪一個table_name資料表的權限,在privileges權限的括號中可以指定徹回哪些欄位的權限。,10-7 產生SQL Server指令碼精靈,Management Studio提供指令碼精靈來自動產生資料庫綱要的SQL指令碼檔案,其主要目的是如果資料庫損壞時,可以使用這些SQL指令檔還原損壞的資料庫綱要。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号