《SQL語言基礎(chǔ)》PPT課件.ppt

上傳人:xin****828 文檔編號:15485291 上傳時間:2020-08-12 格式:PPT 頁數(shù):70 大小:860.50KB
收藏 版權(quán)申訴 舉報 下載
《SQL語言基礎(chǔ)》PPT課件.ppt_第1頁
第1頁 / 共70頁
《SQL語言基礎(chǔ)》PPT課件.ppt_第2頁
第2頁 / 共70頁
《SQL語言基礎(chǔ)》PPT課件.ppt_第3頁
第3頁 / 共70頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《SQL語言基礎(chǔ)》PPT課件.ppt》由會員分享,可在線閱讀,更多相關(guān)《《SQL語言基礎(chǔ)》PPT課件.ppt(70頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、2020/8/12,1,第三章 SQL 語言基礎(chǔ),SQL概述 SQL (Structured query Language,結(jié)構(gòu)化查詢語言),功能包括查詢、操縱、定義、控制。 功能豐富、語言簡潔、使用靈活,倍受歡迎。 1974年由Boyce,Chamberlin提出,1975年在IBM公司的System R上首次實現(xiàn)。原型稱為SEQUEL(Structured English QUEry Language). 1986年ANSI SQL-86標準,是第一個SQL 標準。1987年成為國際標準。 1992年SQL-92標準(簡稱SQL2)。,2020/8/12,2,1999年SQL-99標準(簡

2、稱SQL3)。增加了對對象關(guān)系模型的支持。目前僅部分實現(xiàn)。 最流行的國際標準數(shù)據(jù)庫語言。 主要特點: SQL是非結(jié)構(gòu)化的語言,使用SQL 查詢數(shù)據(jù)庫時,只需要告訴它做什么而不用告訴它如何去做。 SQL 本身不提供任何程序流程控制結(jié)構(gòu),而是通過PL/SQL提供SQL語言的過程化功能 SQL提供相對固定的數(shù)據(jù)類型,一般不需要擴展 SQL本身十分靈活,方便易學(xué)。,2020/8/12,3,,標準SQL只包含9種語句: 數(shù)據(jù)查詢:select 數(shù)據(jù)定義: create, drop, alter 數(shù)據(jù)操縱: insert, update, delete 數(shù)據(jù)控制: grant, revoke,2020/8

3、/12,4,數(shù)據(jù)定義語言(DDL),用于定義數(shù)據(jù)結(jié)構(gòu) 數(shù)據(jù)操縱語言(DML),用于檢索和修改數(shù)據(jù)結(jié)構(gòu) 數(shù)據(jù)控制語言(DCL),用于規(guī)定數(shù)據(jù)庫用戶的各種權(quán)限 數(shù)據(jù)庫事務(wù)處理,用來保證數(shù)據(jù)庫的完整性,SQL語言分類,2020/8/12,5,SQL語言分類,數(shù)據(jù)定義語言(DDL):用于定義數(shù)據(jù)結(jié)構(gòu) 能使用戶完成下列任務(wù) 創(chuàng)建數(shù)據(jù)庫對象 刪除數(shù)據(jù)庫對象 更改數(shù)據(jù)庫對象,2020/8/12,6,常用的數(shù)據(jù)定義語言DDL語句包括: Create Table:創(chuàng)建數(shù)據(jù)庫表 Create Index:創(chuàng)建數(shù)據(jù)庫表的索引 Drop Table:刪除數(shù)據(jù)庫表 Drop Index:刪除數(shù)據(jù)庫表的索引 Trunca

4、te:刪除表中所有行 Alter Table:增加表列,重定義表列,更改存儲分配 Alter Table ADD CONSTRAINT :在已有的表上增加約束,2020/8/12,7,,數(shù)據(jù)操縱語言(DML):允許用戶對數(shù)據(jù)庫中的數(shù)據(jù)進行Insert,Update,Delete和Select等操作 常用DML語句包括: Insert :增加數(shù)據(jù)行到表 Delete:從表中刪除數(shù)據(jù)行 Update:更改表中數(shù)據(jù) Select:從表中或視圖中檢索數(shù)據(jù)行,2020/8/12,8,,數(shù)據(jù)控制語言(DCL):用于規(guī)定數(shù)據(jù)庫用戶的各種權(quán)限 常用的數(shù)據(jù)控制語句包括: GRANT:將權(quán)限或角色授予用戶或其它角

5、色 REVOKE:從用戶或數(shù)據(jù)庫角色回收權(quán)限 Set Role:禁止或允許一個角色,2020/8/12,9,,數(shù)據(jù)庫事務(wù)控制:用來保證數(shù)據(jù)庫的完整性 常用的事務(wù)處理語句包括: COMMIT WORK:把當(dāng)前事務(wù)所作的更改永久化(寫入磁盤) ROLLBACK:作廢上次提交以來的所有更改,2020/8/12,10,事務(wù):指作為單個邏輯工作單元執(zhí)行的一系列操作,而這些邏輯工作單元需要具有原子性,一致性,隔離性和持久性四個屬性。,2020/8/12,11,SQL語句的基本語法,基本語法如下: 每條SQL語句必須以分號結(jié)束 每條SQL語句可以單獨寫成一行,也可以分成若干行 SQL語句對大小寫不敏感,對于

6、SQL語句的關(guān)鍵字(如Insert等),表名,列名等,可以大小寫混合;但對列的內(nèi)容則是大小寫敏感的。,2020/8/12,12,對象命名約定,SQL Server用三段式名字標識對象: .. 前兩者可以省略,系統(tǒng)自動有一個默認值。數(shù)據(jù)庫名的默認值是當(dāng)前數(shù)據(jù)庫,所有者名的默認值是數(shù)據(jù)庫的所有者(dbo) 例如:在pubs數(shù)據(jù)庫中的authors表的所有者是dbo,它可以在多個數(shù)據(jù)庫中按如下方法引用:pubs.dbo.authors Pubs.authors,2020/8/12,13,別名:使用別名的主要目的是增加select語句的可讀性。可使用如下語句指派數(shù)據(jù)表的別名: 數(shù)據(jù)表名稱 as 數(shù)據(jù)表

7、別名,2020/8/12,14,例如:use sample Select e.員工編號,e.員工姓名 From 員工數(shù)據(jù)表 as e 注意:如果為數(shù)據(jù)表指定了別名,則在相應(yīng)的T-SQL語句中,對該數(shù)據(jù)表的所有顯式引用都必須使用別名,而不能使用數(shù)據(jù)表名。例如: Select 員工數(shù)據(jù)表.員工編號,e.員工姓名 From 員工數(shù)據(jù)表 as e,2020/8/12,15,SELECT 語句,數(shù)據(jù)檢索是數(shù)據(jù)庫中最頻繁執(zhí)行的活動 在 SQL 中,使用 SELECT 語句可以在需要的表單中檢索數(shù)據(jù) 在進行檢索之前,必須知道需要的數(shù)據(jù)存儲在哪里 SELECT 語句可以由多個查詢子句組成,2020/8/12,

8、16,SELECT 語句,SELECT 語句可用于檢索: 全部的行和列 全部的行和特定的列 限定范圍的行 與一組值匹配的行 根據(jù)未知值檢索的行 隱藏有重復(fù)值的行 根據(jù)多個搜索條件檢索的行,2020/8/12,17,SELECT 語句,Select語句的基本結(jié)構(gòu)如下: SELECT ALL | DISTINCT select_list INTO new_table_name FROM table_name | view_name ,table_name2 | view_name2 .,table_name16 | view_name16 WHERE search_conditions GROU

9、P BY group_by_list HAVING search_conditions ORDER BY order_list ASC|DESC,2020/8/12,18,SELECT 子 句,SELECT 子句指定需要通過查詢返回的表的列。其語法如下: SELECT ALL | DISTINCT TOP n 各參數(shù)說明如下: 其中,select_list表示需要檢索的字段的列表,字段名稱之間用逗號分隔。這個列表中既可以包含數(shù)據(jù)源表或視圖中的字段名稱,還可以包含其它表達式。如用*,則系統(tǒng)將返回數(shù)據(jù)表中的所有字段。,2020/8/12,19,ALL:指明查詢結(jié)果中可以顯示值相同的列ALL 是系

10、統(tǒng)默認的 DISTINCT:指明查詢結(jié)果中如果有值相同的列,則只顯示其中的一列。對DISTINCT 選項來說,Null 值被認為是相同的值 TOP n PERCENT:指定返回查詢結(jié)果的前n 行數(shù)據(jù),如果PERCENT 關(guān)鍵字指定的話,則返回查詢結(jié)果的前百分之n 行數(shù)據(jù)。,2020/8/12,20,INTO 子句,INTO 子句用于把查詢結(jié)果存放到一個新建的表中。SELECT...INTO 句式不能與 COMPUTE 子句一起使用。其語法如下 INTO new_table 參數(shù)new_table 指定了新建的表的名稱,新表的列由SELECT 子句中指定的列構(gòu)成。 新表中的數(shù)據(jù)行是由WHERE

11、子句指定的。但如果SELECT 子句中指定了計算列,在新表中對應(yīng)的列則不是計算列,而是一個實際存儲在表中的列,其中的數(shù)據(jù)由執(zhí)行SELECT...INTO 語句時計算得出。,2020/8/12,21,FROM 子句,FROM 子句指定需要進行數(shù)據(jù)查詢的表只要SELECT 子句中有要查詢的列就必 須使用FROM 子句其語法如下 FROM ,...n table_source:指明SELECT 語句要用到的表、視圖等數(shù)據(jù)源,該列表中的數(shù)據(jù)表名和視圖名之間使用逗號分隔。,2020/8/12,22,,T-SQL可以支持在from子句中指定除了數(shù)據(jù)表或視圖以外的其他對象,例如查詢結(jié)果集構(gòu)成的派生表。這些派

12、生表實際上是from 子句中select語句的查詢結(jié)果集,這些結(jié)果集構(gòu)成了外層select語句查詢時所用的數(shù)據(jù)表。,2020/8/12,23,例如:,Select Emp.員工編號,emp.員工姓名,sp.部門名稱 From 員工數(shù)據(jù)表 as emp, (select 部門數(shù)據(jù)表.部門編號,部門數(shù)據(jù)表.部門名稱 From 部門數(shù)據(jù)表 Where 部門數(shù)據(jù)表.部門編號2) as sp Where emp.部門編號sp.部門編號 首先使用select語句檢索高級部門,并用別名sp表示該派生表,然后從員工數(shù)據(jù)表和sp派生表中檢索數(shù)據(jù)。,2020/8/12,24,Where 子句,Where 子句指定

13、數(shù)據(jù)檢索的條件,以限制返回的數(shù)據(jù)行。 Where 子句中的查詢條件 比較運算符:、=、=、、!=、 ! 范圍說明: Between A and B、Not Between A and B 可選值列表:IN、NOT IN 模式匹配:LIKE,NOT LIKE 是否空值:IS NULL、IS NOT NULL 上述條件的邏輯組合:AND、OR、NOT,2020/8/12,25,比較查詢條件:text、ntext和image數(shù)據(jù)類型不能與比較運算符組合成查詢條件。 列表查詢條件:in 關(guān)鍵字在大多數(shù)情況下應(yīng)用于嵌套查詢(又稱為子查詢)中,通常首先使用select語句選定一個范圍,然后將選定的范圍作為

14、in關(guān)鍵字的符號條件的列表,從而得出最終的結(jié)果集。,2020/8/12,26,,模式查詢條件:Like、Not Like 通配符 * 匹配任意字符串 ? 匹配任意一個字符 大小寫敏感,2020/8/12,27,,Like關(guān)鍵字中的通配符及其含義,2020/8/12,28,Like關(guān)鍵字舉例,,2020/8/12,29,,空值判斷查詢條件:null值表示字段的數(shù)據(jù)值未知或不可用,它并不表示零(數(shù)字值或二進制值)、零長度的字符串或空白(字符值),2020/8/12,30,如果用戶要查找的數(shù)據(jù)中本身就包含了通配符,如SQL_Mail, 就需要使用轉(zhuǎn)義字符來區(qū)分通配符與實際存在的字符。其格式如下 LI

15、KE 字符匹配串 ESCAPE 轉(zhuǎn)義字符 例: 查找對象名稱為SQL_M 開頭,il 結(jié)尾,中間有一個不確定字符的對象 select * from objects where object_name like SQL#_M_il escape # /* 這里使用了兩個下劃線_符號,前一個下劃線由于有逃逸字符在其前面作標識,因而被認為是實際存在的下劃線字符;后面一個下劃線沒有逃逸字符在其前面作標識,因此將它作為 通配符 */,2020/8/12,31,使用來將通配符指定為普通字符。 例如: Select * from object Where column1 like %54%% 將返回所有包含

16、54%的字符串,2020/8/12,32,GROUP BY 子句,GROUP BY 子句指定查詢結(jié)果的分組條件。其語法如下: GROUP BY ALL group_by_expression ,...n WITH CUBE | ROLLUP 各參數(shù)說明如下: group_by_expression:指明分組條件group_by_expression 通常是一個列名,但不能是列的別名。數(shù)據(jù)類型為TEXT、 NTEXT、 IMAGE 或BIT 類型的列不能作為分組條件 ALL:返回所有可能的查詢結(jié)果組合,即使此組合中沒有任何滿足WHERE 子句的數(shù)據(jù)。分組的統(tǒng)計列如果不滿足查詢條件,則將由NUL

17、L 值構(gòu)成其數(shù)據(jù)。ALL 選項不能與CUBE或ROLLUP 選項同時使用,2020/8/12,33,CUBE:除了返回由GROUP BY 子句指定的列外,還返回按組統(tǒng)計的行。返回的結(jié)果先按分 組的第一個條件列排序顯示,再按第二個條件列排序顯示,以此類推。統(tǒng)計行包括了GROUP BY 子句指定的列的各種組合的數(shù)據(jù)統(tǒng)計 ROLLUP:與CUBE 不同的是,此選項對GROUP BY 子句中的列順序敏感,它只返回第一個分組條件指定的列的統(tǒng)計行,改變列的順序會使返回的結(jié)果的行數(shù)發(fā)生變化。,2020/8/12,34,例如:,例: 查詢工作級別為2 的員工姓名,查詢結(jié)果按部門分組 select e_name

18、, dept_id from employee where job_level = 2 group by dept_id, e_name,2020/8/12,35,CUBE:除了返回由GROUP BY 子句指定的列外,還返回按組統(tǒng)計的行。返回的結(jié)果先按分組的第一個條件列排序顯示,再按第二個條件列排序顯示,以此類推。統(tǒng)計行包括了GROUP BY 子句指定的列的各種組合的數(shù)據(jù)統(tǒng)計 Select 所屬部門,性別,AVG(工資) FROM 員工數(shù)據(jù)表 Group by 所屬部門,性別 With cube,2020/8/12,36,ROLLUP:與CUBE 不同的是,此選項對GROUP BY 子句中的列

19、順序敏感,它只返回第一個分組條件指定的列的統(tǒng)計行,改變列的順序會使返回的結(jié)果的行數(shù)發(fā)生變化。 Select 所屬部門,性別,AVG(工資) FROM 員工數(shù)據(jù)表 Group by 所屬部門,性別 With rollup,2020/8/12,37,若希望在查詢結(jié)果總僅包含按照性別分組后取得的平均值,則需要將group by子句中的“所屬部門”和“性別”字段的位置調(diào)換。 Select 所屬部門,性別,AVG(工資) FROM 員工數(shù)據(jù)表 Group by 性別,所屬部門 With rollup,2020/8/12,38,HAVING 子句,HAVING 子句指定分組搜索條件。HAVING 子句通常

20、與GROUP BY 子句一起使用。TEXT、NTEXT和IMAGE 數(shù)據(jù)類型不能用于HAVING 子句。其語法如下 HAVING HAVING 子句與WHERE 子句很相似,其區(qū)別在于其作用的對象不同。WHERE 子句 作用于表和視圖,HAVING 子句作用于組,2020/8/12,39,例如:,例:查詢有多個員工的工資不低于6000 的部門編號 select dept_id, count(*) from employee where e_wage = 6000 group by dept_id having count(*) 1,2020/8/12,40,ORDER BY 子句,ORDER

21、BY 子句指定查詢結(jié)果的排序方式。其語法如下: ORDER BY order_by_expression ASC | DESC ,...n 各參數(shù)說明如下: order_by_expression:指定排序的規(guī)則order_by_expression 可以是表或視圖的列的名稱或別名,如果SELECT語句中沒有使用DISTINCT 選項或UNION 操作符,那么ORDER BY 子句中可以包含select list 中沒有出現(xiàn)的列名或別名。ORDER BY 子句中也不能使用TEXT、NTEXT和IMAGE 數(shù)據(jù)類型 ASC:指明查詢結(jié)果按升序排列這是系統(tǒng)默認值 DESC:指明查詢結(jié)果按降序排列

22、,2020/8/12,41,COMPUTE 子句,COMPUTE 子句在查詢結(jié)果的末尾生成一個匯總數(shù)據(jù)行,其語法如下:COMPUTE AVG | COUNT | MAX | MIN | SUM (expression) ,...n BY expression ,...n 各參數(shù)說明如下: AVG | COUNT | MAX | MIN | SUM:以上參數(shù)與對應(yīng)的函數(shù)有相同的含義,這些函數(shù)均會忽略NULL值且DISTINCT選項不能在此使用,2020/8/12,42,expression:指定需要統(tǒng)計的列的名稱,此列必須包含于SELECT列表中,且不能用別名。COMPUTE子句中也不能使用T

23、EXT、NTEXT和IMAGE 數(shù)據(jù)類型 BY expression:在查詢結(jié)果中生成分類統(tǒng)計的行。如果使用此選項,則必須同時使用ORDER BY 子句。expression 是對應(yīng)的ORDER BY 子句中的order_by_expression 的子集或全集,2020/8/12,43,例如:,Select 員工姓名,所屬部門,工資 From 員工數(shù)據(jù)表 Order by 所屬部門 Coumpute sum(工資) by 所屬部門 注意:在加入by 關(guān)鍵字及其分組字段的同時必須將這個分組字段同時作為排序條件,否則查詢會出錯。,2020/8/12,44,UNION 子句,UNION 操作符將兩

24、個或兩個以上的查詢結(jié)果合并為一個結(jié)果集。它與使用連接查詢 合并兩個表的列是不同的,使用UNION 操作符合并查詢結(jié)果需要遵循兩個基本規(guī)則:列的數(shù)目和順序在所有查詢中必須是一致的;數(shù)據(jù)類型必須兼容 其語法如下: Select 語句 UNION ALL Select 語句,2020/8/12,45,注意: 使用union子句獲得的結(jié)果集的字段名稱與union運算符 之前的select語句結(jié)果集中的字段名相同,union運算符之后的select語句結(jié)果集的字段名將被忽略。 在默認情況下,union運算符將從最終結(jié)果集中刪除重復(fù)的記錄。如果希望最終結(jié)果集保留所有的記錄,則必須使用all關(guān)鍵字。,202

25、0/8/12,46,,在使用union運算符時,單獨的select語句中不能包含其自己的order by或coumpute子句 只能在最后一個select語句的后面使用一個order by 或compute 子句,此時,該子句將適用于最終的組合結(jié)果集 若需要對查詢結(jié)果進行分組以及在分組后對結(jié)果使用having子句進行過濾,則必須在單獨的select語句中指定group by和having子句。,2020/8/12,47,聯(lián)接查詢,通過使用聯(lián)接查詢,可以根據(jù)各個數(shù)據(jù)表之間的邏輯關(guān)系從兩個或多個數(shù)據(jù)表中檢索數(shù)據(jù)。 定義數(shù)據(jù)表之間的關(guān)聯(lián)方式: 1 在數(shù)據(jù)表中指定用于聯(lián)接的字段。典型的聯(lián)接條件是在一個

26、數(shù)據(jù)表中指定外鍵,同時在另一個數(shù)據(jù)表中指定與其關(guān)聯(lián)的主鍵。 2 在select 語句中指定比較各字段值時要使用的邏輯運算符。 聯(lián)接的類型: 內(nèi)連接 外聯(lián)接:左向外聯(lián)接,右向外聯(lián)接,完整外聯(lián)接 交叉聯(lián)接,2020/8/12,48,,內(nèi)連接 內(nèi)聯(lián)接的格式為: 數(shù)據(jù)表1 inner join 數(shù)據(jù)表2 on 聯(lián)接表達式 指定返回兩個表中所有匹配的行。 Inner是缺省的連接方式 例: select * from 員工數(shù)據(jù)表 Inner join 項目數(shù)據(jù)表 On 員工數(shù)據(jù)表.員工編號項目數(shù)據(jù)表.負責(zé)人,2020/8/12,49,外聯(lián)接:左向外聯(lián)接,右向外聯(lián)接和完整外聯(lián)接。 左向外聯(lián)接的格式為: 數(shù)據(jù)

27、表1 left join 數(shù)據(jù)表2 on 聯(lián)接表達式 或 數(shù)據(jù)表1 left outer join 數(shù)據(jù)表2 on 聯(lián)接表達式 注意:返回結(jié)果集中將包括數(shù)據(jù)表1中所有的記錄,而不僅僅是聯(lián)接字段所匹配的記錄。如果數(shù)據(jù)表1的某條記錄在數(shù)據(jù)表2中沒有匹配的記錄,則結(jié)果集相應(yīng)記錄的有關(guān)數(shù)據(jù)表2的所有字段將為空值。 例如:select * from 員工數(shù)據(jù)表 left join 項目數(shù)據(jù)表 On 員工數(shù)據(jù)表.員工編號項目數(shù)據(jù)表.負責(zé)人 則:檢索員工數(shù)據(jù)表中的所有記錄,并將項目數(shù)據(jù)表中負責(zé)人字段可以匹配的記錄輸出到結(jié)果集。,2020/8/12,50,右向外聯(lián)接的格式為: 數(shù)據(jù)表1 right join

28、數(shù)據(jù)表2 on 聯(lián)接表達式 或 數(shù)據(jù)表1 right outer join 數(shù)據(jù)表2 on 聯(lián)接表達式 注意:返回結(jié)果集中將包括數(shù)據(jù)表2中所有的記錄,而不僅僅是聯(lián)接字段所匹配的記錄。如果數(shù)據(jù)表2的某條記錄在數(shù)據(jù)表1中沒有匹配的記錄,則結(jié)果集相應(yīng)記錄的有關(guān)數(shù)據(jù)表1的所有字段將為空值。 例如:select * from 員工數(shù)據(jù)表 right join 項目數(shù)據(jù)表 On 員工數(shù)據(jù)表.員工編號項目數(shù)據(jù)表.負責(zé)人 則:檢索項目數(shù)據(jù)表中的所有記錄,并將員工數(shù)據(jù)表中員工編號字段可以匹配的記錄輸出到結(jié)果集。,2020/8/12,51,完整外聯(lián)接 格式如下: 數(shù)據(jù)表1 full join 數(shù)據(jù)表2 on 聯(lián)接

29、表達式 或: 數(shù)據(jù)表1 full outer join 數(shù)據(jù)表2 on 聯(lián)接表達式 結(jié)果集將包含兩個數(shù)據(jù)表中的所有記錄,當(dāng)某條記錄在另一個數(shù)據(jù)表中沒有匹配記錄時,則將另一個數(shù)據(jù)表的選擇列表字段指定為空值,2020/8/12,52,交叉聯(lián)接 格式為:數(shù)據(jù)表1 cross join 數(shù)據(jù)表2 如果在select語句中沒有使用where子句,則交叉聯(lián)接將返回數(shù)據(jù)表1和數(shù)據(jù)表2中記錄的笛卡兒乘積,即交叉聯(lián)接返回數(shù)據(jù)表1中的所有記錄,以及數(shù)據(jù)表1中的每一條記錄與數(shù)據(jù)表2中的所有記錄的組合。 例如:select * from 員工數(shù)據(jù)表 Cross join 項目數(shù)據(jù)表 將返回員工數(shù)據(jù)表中的所有記錄,以及

30、員工數(shù)據(jù)表中的每條記錄與項目數(shù)據(jù)表中的所有記錄的組合。,2020/8/12,53,嵌套查詢,嵌套查詢是指在一個外層查詢中包含有另一個內(nèi)層查詢。其中,外層查詢稱為主查詢,內(nèi)層查詢稱為子查詢。 SQL允許多層嵌套,由內(nèi)而外地進行分析,子查詢的結(jié)果作為主查詢的查找條件 可以用多個簡單查詢來構(gòu)成復(fù)雜查詢,以增強SQL的查詢能力 子查詢中一般不使用 Order By 子句,Order By子句只能對最終查詢結(jié)果進行排序,2020/8/12,54,,子查詢(Subquery ),包含子查詢的格式通常采用如下格式: Where 表達式 not in (子查詢) Where 表達式 比較運算符 any|all

31、 子查詢 Where not exists (子查詢),2020/8/12,55,返回單值的子查詢,只返回一行一列 主查詢與單值子查詢之間用比較運算符進行連接 運算符:、=、=、 例:找出與95001同齡的學(xué)生 Select * From Student Where sage = ( Select sage From Student Where sno = 95001 ),子查詢單值比較,2020/8/12,56,例:查詢選修C01課程的學(xué)生的學(xué)號、姓名。 Select sno,sname From Student Where sno IN ( Select sno From SC Whe

32、re cno = C01 ),子查詢In,2020/8/12,57,多值比較:多行一列 父查詢與多值子查詢之間的比較需用All來連接 標量值s比子查詢返回集R中的每個都大時,sAll R 為True All表示所有 all、=all、 all all 等價于 not in 例:找出年齡最小的學(xué)生 Select * From Student Where sage < all ( Select sage From Student ),子查詢多值比較all,2020/8/12,58,父查詢與多值子查詢之間的比較需用Some/Any來連接 標量值s比子查詢返回集R中的某一個大時 s Some R為Tr

33、ue 或 s Any R為True Some(早期用Any)表示某一個,只要有一個即返回真 some、=some、 some = some 等價于 in、 some 不等價于 not in,子查詢多值比較Some/Any,2020/8/12,59,例:找出不是最小年齡的學(xué)生 Select * From student Where sage some ( Select sage From Student ),子查詢多值比較,2020/8/12,60,Exists 子查詢用來判斷該子查詢是否返回元組 當(dāng)子查詢的結(jié)果集非空時,Exists為True 當(dāng)子查詢的結(jié)果集為空時,Exists為False

34、 不關(guān)心子查詢的具體內(nèi)容,因此用 Select *,子查詢存在判斷Exists,2020/8/12,61,例:列出選修了C01課程的學(xué)生的學(xué)號、姓名 Select sno,sname From Student Where Exists ( Select * From SC Where SC.sno = Student.sno And cno = C01),子查詢Exists,2020/8/12,62,例:列出沒有選C01課程的學(xué)生的學(xué)號、姓名 Select sno,sname From Student Where Not Exists ( Select * From SC Where S

35、C.sno = Student.sno And cno = C01),子查詢Not Exists,2020/8/12,63,如何提高select語句的效率,使用exists關(guān)鍵字檢查結(jié)果集:不要用count(*)來檢查結(jié)果集中是否包含行。 使用標準聯(lián)接代替嵌套查詢:在執(zhí)行嵌套查詢時,SQL Server將先執(zhí)行內(nèi)部的子查詢,然后將查詢結(jié)果返回給外部查詢作為檢索的數(shù)據(jù)源,最后執(zhí)行外部的主查詢。而在執(zhí)行包含標準聯(lián)接的查詢時,SQL Server將要執(zhí)行的僅僅是一個查詢。 有效避免整表掃描:使用索引; 除了缺失索引外,可能導(dǎo)致整表掃描的另外一種常見的情況是在like子句的匹配條件的開始使用了%。若在

36、like子句的匹配條件的開始使用了%,那么包含這個like分句的查詢將會調(diào)用完整表掃描。,2020/8/12,64,數(shù)據(jù)插入,格式1:INSERT INTO ( , ) VALUES ( , ) ; insert語句把values后給出的各值按排列順序依次賦到表名后列出的各列。每次只能插入一條記錄。 例:INSERT INTO student VALUES(95006, 張三, 男, 21,cs); 例:insert into student(sname,sno,sdept) values(章小山, 96008, IS); ---在student中添加一條記錄,其中列ssex,sag

37、e為空(null)。 若表名后不列出列名,則等價于列出了全部列名,必須在values后給出全部列值,并按創(chuàng)建表時的列定義順序,把這些值賦入相應(yīng)列中。若某些列暫時沒有值,則給出null,,2020/8/12,65,格式2: INSERT INTO ( , ) Select 語句; 把select語句查詢的結(jié)果按順序插入到對應(yīng)的列中。允許一次插入多條記錄。 Select查得的各列值必須與后的各列名在個數(shù)、類型及順序上一致。 若后沒有(列名),則對該表的所有字段插入。 create table student2(sno char(6) not null, sname varchar(20), bir

38、thdate date, sdept char(2), phone varchar(15)); Insert into student2(sno, sname, sdept, birthdate) select sno, sname, sdept, 2001-sage from student;,2020/8/12,66,格式:UPDATE SET = , = WHERE ; Where后的條件與查詢語句中的where條件語法和作用相同。 該語句將指定表中符合WHERE 的行中的指定列賦新值。若沒有where,則對整個表修改。 該語句一次可以更新一列或多列;更新一行或多行(由where的選擇條

39、件決定)。,數(shù)據(jù)修改,2020/8/12,67,例:將95001學(xué)生轉(zhuǎn)入MA系 Update Student Set sdept = MA Where sno = 95001 例:所有學(xué)生年齡加1 Update Student Set sage = sage + 1,數(shù)據(jù)修改,2020/8/12,68,刪除數(shù)據(jù),DELETE FROM table_name | view_name WHERE 子句 刪除表中符合選擇條件的行(一行或多行)。 若無where部分,則刪除整個表中全部數(shù)據(jù),但表結(jié)構(gòu)仍存在,即成為空表。 delete只能整行刪除,不能只刪一行的部分。,2020/8/12,69,刪除單個元組 例:刪除學(xué)號為95001的學(xué)生的選課信息 Delete From SC Where sno = 95001 刪除多個元組 例:刪除選課而未參加考試的學(xué)生的選課信息 Delete From SC Where grade is null 刪除整個關(guān)系中的所有數(shù)據(jù) 例:刪除所有學(xué)生的選課信息 Delete From SC,2020/8/12,70,注意:,數(shù)據(jù)更新語句只能對單表操作,不能同時對多表更新。(從而引起階段性的數(shù)據(jù)不一致性) 數(shù)據(jù)更新語句僅當(dāng)事務(wù)(transaction)提交(commit)后才正式生效。也可通過事務(wù)回滾(rollback)來作廢。,

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!