數(shù)據(jù)庫教學資料第6章t-sql語言基礎
《數(shù)據(jù)庫教學資料第6章t-sql語言基礎》由會員分享,可在線閱讀,更多相關《數(shù)據(jù)庫教學資料第6章t-sql語言基礎(78頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第 6章 T-SQL語 言 概 述主 講 教 師 : 衛(wèi) 琳 6.1 T-SQL語 言 概 述6.1.1 T-SQL語 言 的 發(fā) 展 過 程 和 特 點6.1.2 T-SQL語 言 的 分 類數(shù) 據(jù) 定 義 語 言 (DDL)數(shù) 據(jù) 操 縱 語 言 (DML)數(shù) 據(jù) 控 制 語 言 (DCL) 語 句 功 能create 創(chuàng) 建 數(shù) 據(jù) 庫 或 數(shù) 據(jù) 庫 對 象alter 修 改 數(shù) 據(jù) 庫 或 數(shù) 據(jù) 庫 對 象drop 刪 除 數(shù) 據(jù) 庫 或 數(shù) 據(jù) 庫 對 象語 句 功 能select 從 表 或 視 圖 中 檢 索 數(shù) 據(jù)insert 將 數(shù) 據(jù) 插 入 到 表 或 視 圖 中up
2、date 修 改 表 或 視 圖 中 的 數(shù) 據(jù)delete 從 表 或 視 圖 中 刪 除 數(shù) 據(jù) 語 句 功 能grant 授 予 權(quán) 限r(nóng)evoke 收 回 權(quán) 限drop 禁 止 從 其 他 角 色 中 繼 承 許 可 權(quán) 限D(zhuǎn)DLDMLDCL 6.1.3 T-SQL法 約 定1.注 釋“ ”: 單 行 注 釋 ( 從 雙 連 字 符 到 行 尾 的 內(nèi) 容 )/*/: 多 行 注 釋 ( 對 /*/ 之 間 所 有 內(nèi) 容 )2.系 統(tǒng) 保 留 字不 要 使 用 保 留 關 鍵 字 作 為 對 象 名 稱 或 標 識 符 /*創(chuàng) 建 名 為 example的 數(shù) 據(jù) 庫 , 并 存
3、放 在 “e:sql”目 錄 中 */CREATE DATABASE exampleON (name=example, -設 置 數(shù) 據(jù) 庫 文 件 名 稱 filename=e:sqlexample.mdf, -設 置 文 件 存 放 位 置 size=10, -指 定 文 件 大 小 maxsize=50) -指 定 文 件 的 最 大 容 量LOG ON -指 定 日 志 文 件(name=examplog, -指 定 日 志 文 件 名 稱 filename=e:sqlexample.ldf, -指 定 日 志 文 件 存 放 位 置 size=5mb, maxsize=25mb, f
4、ilegrowth=5mb)go 6.2 附 加 的 語 言 元 素6.1.2 標 識 符1. 標 識 符 格 式( 1) 標 識 符 的 首 字 符 必 須 是 下 列 字 符 之 一 。l 統(tǒng) 一 碼 ( Unicode) 2.0標 準 中 所 定 義 的 字 母 , 包 括 拉 丁 字 母 a-z和 A-Z,以 及 來 自 其 他 語 言 的 字 符 。l 下 劃 線 “ _”、 符 號 “ ”或 者 數(shù) 字 符 號 “ #”。( 2) 標 識 符 的 后 續(xù) 字 符 可 以 是 以 下 3種 。l 統(tǒng) 一 碼 ( Unicode) 2.0標 準 中 所 定 義 的 字 母 。 l 來
5、自 拉 丁 字 母 或 其 他 國 家 /地 區(qū) 腳 本 的 十 進 制 數(shù) 字 。l “ ”符 號 、 美 元 符 號 “ $”、 數(shù) 字 符 號 “ #”或 下 劃 線 “ _”。( 3) 標 識 符 不 允 許 是 Transact-SQL的 保 留 字 。( 4) 不 允 許 嵌 入 空 格 或 其 他 特 殊 字 符 。 6.1.2 標 識 符2 標 識 符 分 類SQL Server將 標 識 符 分 為 以 下 兩 種 類 型 :l 常 規(guī) 標 識 符 : 符 合 標 識 符 的 格 式 規(guī) 則 。l 分 隔 標 識 符 : 包 含 在 雙 引 號 (“”)或 者 方 括 號 (
6、 )內(nèi) 的 標 識 符 。該 標 識 符 可 以 不 符 合 標 識 符 的 格 式 規(guī) 則 , 如 MR GZGLXT、MR和 GZGLXT之 間 含 有 空 格 , 但 因 為 使 用 了 方 括 號 , 所 以 視 為 分 隔標 識 符 。 注 意 : 常 規(guī) 標 識 符 和 分 隔 標 識 符 包 含 的 字 符 數(shù) 必 須 在 1 128之 間 , 對 于 本 地 臨 時 表 , 標 識 符 最 多 可 以 有 116個 字 符 。 6.2.2 常 量(1)字 符 型 常 量lASCII字 符 串 常 量 : 用 單 引 號 括 起 來 , 由 ASCII字 符 組 成 。 如 果
7、在 字 符 常 量 中 已 經(jīng) 包 含 了 一 個 單 引 號 , 那 么 可 以 使用 兩 個 單 引 號 表 示 這 個 帶 單 引 號 的 字 符 。 lUnicode字 符 串 常 量 的 格 式 與 ASCII字 符 串 常 量 相 似 , 但 它前 面 有 一 個 前 綴 N, 而 且 N前 綴 必 須 是 大 寫 的 。 如 : NSQL Server、 N張 三 、 N計 算 機 科 學 與 技術(shù) 。 6.2.2 常 量(2) 數(shù) 值 型 常 量數(shù) 值 型 常 量 包 含 整 型 常 量 和 實 數(shù) 型 常 量 。l整 型 常 量 (Integer)用 來 表 示 整 數(shù) 。
8、可 細 分 為 二 進 制 整型 常 量 、 十 六 進 制 整 型 常 量 和 十 進 制 整 型 常 量 。 二 進 制整 型 常 量 以 數(shù) 字 0或 1表 示 ; 十 六 進 制 整 型 常 量 由 前 綴 0 x后 跟 十 六 進 制 數(shù) 組 成 ; 十 進 制 整 型 常 量 即 不 帶 小 數(shù) 點 的十 進 制 數(shù) ;l實 數(shù) 型 常 量 用 來 表 示 帶 小 數(shù) 部 分 的 數(shù) , 有 定 點 數(shù) 和 浮點 數(shù) 兩 種 表 示 方 式 , 其 中 浮 點 數(shù) 使 用 科 學 記 數(shù) 法 來 表 示 。如 : 0.3E-5。 (3) 日 期 時 間 型 常 量 (datetim
9、e)日 期 時 間 型 常 量 使 用 特 定 格 式 的 字 符 日 期 值 來 表 示 ,并 且 用 單 引 號 括 起 來 。 如 2009年 4月 1日 可 以 用 以 下方 式 表 示 : April 1, 2009、 04/01/2009或 20090401。(4) 貨 幣 型 常 量 (money)貨 幣 型 常 量 以 前 綴 “ $”作 為 標 識 。 如 $123.45。 6.2.2 變 量( 1) 變 量 名 稱在 SQL Server 2008系 統(tǒng) 中 , 變 量 的 命 名 規(guī) 則 如 下 :l第 一 個 字 符 必 須 是 字 母 、 數(shù) 字 、 下 畫 線 或
10、符 號 。 需 要 注 意 的 是 , 符 號 “ ”開 頭 的 變 量 表 示 局 部 變 量 、 符 號 “ ”開 頭 的 變 量 表 示 全 局 變 量 。l變 量 名 不 能 是 T-SQL語 言 的 系 統(tǒng) 保 留 字 (如 IF、 ELSE、 CONTINUE等 ), 包 括大 寫 和 小 寫 形 式 。l變 量 名 中 不 允 許 出 現(xiàn) 空 格 或 其 他 特 殊 字 符 。根 據(jù) 以 上 規(guī) 則 , 下 列 變 量 名 都 是 合 法 的 : a2、 abc、 student_3和 average。變 量 在 使 用 中 需 要 先 聲 明 再 使 用 , 聲 明 變 量 用
11、 DECLARE語 句 , 其 語 法 格 式 如 下 :DECLARE 變 量 名 稱 變 量 的 數(shù) 據(jù) 類 型 , n說 明 :為 表 示 局 部 變 量 , 變 量 名 稱 的 第 一 個 字 符 必 須 是 所 有 變 量 在 聲 明 后 均 設 置 初 值 為 NULL 6.2.2 變 量( 2) 變 量 賦 值有 兩 種 為 變 量 賦 值 的 方 式 : 使 用 SET語 句 直 接 為 變 量 賦 值 和 使 用 SELECT語 句 選 擇 表 中 的 值 來 為 變 量 賦 值 。語 法 格 式 如 下 :l格 式 1: 使 用 SET語 句 賦 值SET 變 量 名 稱
12、=表 達 式l格 式 2: 使 用 SELECT語 句 賦 值SELECT 變 量 名 稱 =表 達 式 , n說 明 : 表 達 式 可 以 是 任 何 有 效 的 SQL表 達 式 ;一 個 SELECT語 句 可 以 給 多 個 變 量 賦 值 , 而 一 個 SET語 句 一 次 只 能 給 一 個變 量 賦 值 。 例 : 用 賦 值 語 句 分 別 定 義 兩 個 整 型 變 量 x和 y。 使 x的 值 為 20,y的 值 為 5, 計 算 并 顯 示 x, y, 3x +4y, xy, 和 x /y的 值 。declare x int,y intset x=20set y=5s
13、elect x,y,3*x+4*y,x*y,x/y例 : 創(chuàng) 建 兩 個 局 部 變 量 , 并 賦 值 , 然 后 輸 出 變 量 的 值 。declare var1 char(4),var2 char(20)set var1=中 國 set var2=var1+是 一 個 偉 大 的 國 家 select var1,var2go 示 例 : 創(chuàng) 建 一 個 名 為 sex的 局 部 變 量 , 并 在 select語 句 中使 用 該 局 部 變 量 查 找 表 student中 所 有 女 同 學 的 信 息 。use xscj2005declare xb char(2)set xb=女
14、 select * from studentwhere ssex=xb 例 : 使 用 查 詢 給 變 量 賦 值 。use XSCJ2005godeclare xm varchar(8)set xm =(select sname from student where sno=2008056103)select xmGouse XSCJ2005godeclare xm varchar(8)select xm =sname from studentselect xmGo說 明 : 如 果 返 回 多 個 值 , 將 返 回 的 最 后 一 個 值 賦 給 變 量 例 :use XSCJ2005g
15、odeclare xm varchar(8)select xm=劉 豐 select xm=sname from studentwhere sno=123456789select xm as namego說 明 : 如 果 select語 句 沒 有 返 回 行 , 變 量 將 保 留 當 前 值 6.3 運 算 符 和 表 達 式SQL Server 2008提 供 以 下 幾 類 運 算 符 : 算 術(shù) 運 算 符 、 關 系 運 算 符 、邏 輯 運 算 符 、 字 符 運 算 符 和 位 運 算 符 。6.3.1 算 術(shù) 運 算 符算 術(shù) 運 算 符 對 兩 個 表 達 式 執(zhí) 行 數(shù)
16、 學 運 算 。算 術(shù) 運 算 符 說 明+ 加 法 運 算 - 減 法 運 算* 乘 法 運 算/ 除 法 運 算 , 如 果 兩 個 表 達 式 都 是 整 數(shù) , 則 結(jié) 果 是 整 數(shù) , 小 數(shù)部 分 被 截 斷%(求 模 ) 求 模 (求 余 )運 算 , 返 回 兩 數(shù) 相 除 后 的 余 數(shù)算 術(shù) 運 算 符 例 【 6-3】 : 計 算 6/5、 6.0/5.0、 5/6、 5.0/6.0與 6%5的 值 。select 6/5,6.0/5.0,0,5.0/6.0,6%5select 14/5,6.0/5.0,0,5.0/6.0,6%5select 6.0/5,6.0/5.0
17、,0,5.0/6.0,6%5通 過 執(zhí) 行 語 句 我 們 注 意 到 : 6/5的 結(jié) 果 為 1, 而 6.0/5.0的 結(jié) 果 為 1.200000, 兩 者運 算 結(jié) 果 并 不 相 同 。 原 因 在 于 當 兩 個 具 有 相 同 數(shù) 據(jù) 類 型 的 數(shù) 進 行 算 術(shù) 運 算 時 ,運 算 結(jié) 果 依 然 是 當 前 的 數(shù) 據(jù) 類 型 。 但 是 , 當 兩 個 不 同 數(shù) 據(jù) 類 型 的 數(shù) 進 行 算 術(shù) 運 算 時 , 數(shù) 據(jù) 類 型 優(yōu) 先 級 規(guī) 則 指 定 將 優(yōu) 先 級 較 低 的 數(shù) 據(jù) 類 型 轉(zhuǎn) 換 為 優(yōu) 先 級 較 高 的數(shù) 據(jù) 類 型 。 這 樣 能
18、夠 在 最 大 程 度 上 保 護 運 算 結(jié) 果 的 正 確 性 和 合 理 性 。 同 樣 , 5/6與 5.0/6.0的 運 算 結(jié) 果 也 不 相 同 。 6.3.2 關 系 運 算 符關系運算符說 明實 例= 相 等 姓 名 =”王 華 ” 大 于 成 績 85 小 于 年 齡 = 大 于 等 于 成 績 =60= 小 于 等 于 工 資 =2000、 != 不 等 于 所 屬 院 系 英 語 系 ! 不 小 于 學 分 ! 不 大 于 成 績 !=100 說 明 :l兩 個 數(shù) 值 型 數(shù) 據(jù) 比 較 時 , 按 照 值 的 大 小 直 接 比 較 ;l兩 個 日 期 時 間 型
19、數(shù) 據(jù) 比 較 時 , 按 照 年 、 月 、 日 的 先 后 順 序 比 較 ;l兩 個 字 符 型 數(shù) 據(jù) 比 較 時 , 英 文 字 母 按 照 ASCII碼 值 大 小 比 較 , 漢 字 按 照 拼 音 先 后順 序 比 較 。 use XSCJgodeclare student char(6)set student=001111if(student0)select * from xs where 學 號 =student 6.3.3 邏 輯 運 算 符運 算 符運 算 規(guī) 則AND 與 運 算 , 兩 個 操 作 數(shù) 均 為 TRUE時 , 結(jié) 果 才 為 TRUEOR 或 運 算
20、 , 若 兩 個 操 作 數(shù) 中 任 何 一 個 為 TRUE, 則 結(jié) 果 為 TRUENOT 非 運 算 , 單 目 運 算 , 結(jié) 果 值 取 反ALL 每 個 操 作 數(shù) 值 都 為 TRUE時 , 結(jié) 果 為 TRUEANY 多 個 操 作 數(shù) 中 只 要 有 一 個 為 TRUE, 結(jié) 果 為 TRUEBETWEEN 若 操 作 數(shù) 在 指 定 的 范 圍 內(nèi) , 則 運 算 結(jié) 果 為 TRUEEXISTS 若 子 查 詢 包 含 一 些 行 , 則 運 算 結(jié) 果 為 TRUE IN 若 操 作 數(shù) 值 等 于 表 達 式 列 表 中 的 一 個 , 則 結(jié) 果 為 TRUEL
21、IKE 若 操 作 數(shù) 與 某 種 模 式 相 匹 配 , 則 結(jié) 果 為 TRUESOME 若 在 一 系 列 操 作 數(shù) 中 , 有 些 值 為 TRUE, 則 結(jié) 果 為 TRUE 例 : 查 詢 成 績 高 于 李 明 最 高 成 績 的 學 生 姓 名 、 課 程 名 和 成 績select sname,cname,gradefrom student join sc join courseon o=oon student.sno=sc.snoand gradeall(select grade from student join sc join course on o=o on stu
22、dent.sno=sc.sno and sname=李 明 ) 1)any,all 例 : 查 詢 成 績 高 于 李 明 最 低 成 績 的 學 生 姓 名 、 課 程 名 和 成 績select sname,cname,gradefrom student join sc join courseon o=oon student.sno=sc.snoand gradeany(select grade from student join sc join course on o=o on student.sno=sc.sno and sname=李 明 ) 2) .Between例 : 查 詢 9
23、1及 92年 出 生 的 學 生 信 息select * from studentwhere sbirth between 1991-1-1 and 1992-12-31例 : 查 詢 不 是 91、 92年 出 生 的 學 生 信 息select * from studentwhere sbirth not between 1991-1-1 and 1992-12-31 查 詢 姓 王 或 姓 劉 的 學 生 信 息select * from studentwhere sname like 王 劉 %查 詢 不 姓 王 也 不 姓 劉 的 學 生 信 息select * from stude
24、ntwhere sname like 王 劉 %通 配 符 說 明% 代 表 0個 或 多 個 字 符_ 代 表 單 個 字 符 指 定 范 圍 ( 如 : a-f、 0-9或 集 合 abcdef中 的 任 何 單 個 字 符 指 定 不 屬 于 范 圍 ( 如 : a-f、 0-9或 集 合 abcdef中 的 任 何單 個 字 符3) .Like 查 詢 所 有 選 課 的 學 生 信 息select * from studentwhere exists(select * from sc where sno=student.sno)查 詢 沒 有 選 課 的 學 生 信 息select
25、* from studentwhere not exists(select * from sc where sno=student.sno)4. exists 6.3.4 字 符 運 算 符 字 符 運 算 符 只 有 一 個 “ +”, 又 稱 為 字 符 串 串 聯(lián) 運 算 符 。字 符 串 之 間 通 過 “ +”實 現(xiàn) 字 符 串 的 連 接 。select 8899+7788select 8899+7788select 8899+7788說 明 : 當 數(shù) 據(jù) 類 型 不 相 同時 , 轉(zhuǎn) 換 成 優(yōu) 先 級 別 高 的 。 6.3.5 位 運 算 符 位 運 算 符 在 兩 個 表
26、 達 式 之 間 實 現(xiàn) 按 位 操 作 , 這 兩 個 表 達 式 應 該 為整 型 數(shù) 據(jù) 類 型 或 與 整 型 兼 容 的 數(shù) 據(jù) 類 型 ( 如 字 符 型 等 , 但 不 能 是image類 型 )運 算 符運 算 法 則&(位 與 運 算 ) 兩 個 參 與 運 算 的 位 值 均 為 1時 , 結(jié) 果 位 為 1, 否 則 為 0|(位 或 運 算 ) 兩 個 參 與 運 算 的 位 中 只 要 有 一 位 值 為 1, 結(jié) 果 就 為 1, 否 則 為 0(位 異 或 運 算 ) 兩 個 參 與 運 算 的 位 中 只 有 一 個 的 值 為 1時 (不 可 以 兩 個 值
27、都為 1), 結(jié) 果 為 1; 只 有 當 兩 個 參 與 運 算 的 位 值 都 為 0或 都 為 1時 , 結(jié) 果 才 為 0 6.3.5 位 運 算 符示 例 :select 128&129,128|129,128129運 算 符運 算 法 則&(位 與 運 算 ) 兩 個 參 與 運 算 的 位 值 均 為 1時 , 結(jié) 果 位 為 1, 否 則 為 0|(位 或 運 算 ) 兩 個 參 與 運 算 的 位 中 只 要 有 一 位 值 為 1, 結(jié) 果 就 為 1, 否 則為 0(位 異 或 運 算 ) 兩 個 參 與 運 算 的 位 中 只 有 一 個 的 值 為 1時 (不 可 以
28、 兩 個 值 都為 1), 結(jié) 果 為 1; 只 有 當 兩 個 參 與 運 算 的 位 值 都 為 0或 都 為 1時 , 結(jié) 果 才 為 0128:129: 1000 00001000 0001 或 | 1000 0001128:129: 1000 00001000 0001與 &| 1000 0000 128:129: 1000 00001000 0001異 或 0000 0001 優(yōu) 先 級運 算 符1 一 目 運 算 : +(正 )、 -(負 )、 (按 位 取 反 )2 *(乘 )、 /(除 )、 %(取 模 )3 +(加 )、 +(字 符 串 連 接 )、 -(減 )4 =、 、
29、 =、 =、 、 !=、 !、 !yprint x大 于 yelse print x小 于 或 等 于 y6.4 流 程 控 制 語 句6.4.2 IF ELSE語 句IF 條 件 表 達 式語 句 體 1ELSE語 句 體 2 例 : 輸 入 一 個 坐 標 值 , 判 斷 其 在 哪 一 個 象限declare x int,y intset x=8set y=-3if x0if y0print xy位 于 第 一 象 限 else print xy位 于 第 四 象 限 else if y0print xy位 于 第 二 象 限 else print xy位 于 第 三 象 限 IF.EL
30、SE語 句 例 【 6-6】 : 設 定 變 量 score, 根 據(jù) score的 值判 斷 成 績 是 否 合 格 , 并 輸 出 結(jié) 論 。declare score int,a nchar(10)set score=55if score=60set a=N成 績 合 格 else set a=N成 績 不 合 格 select a 1.簡 單 case語 句l計 算 input_expression, 然 后 按 指 定 順 序 對 每 個 when子 句 的input_expression when_expression進 行 計 算 。l返 回 第 一 個 取 值 為 true的
31、input_expression= when_expression的result_expression.l如 果 沒 有 取 值 為 true的 input_expression= when_expression, 則 當 指定 else子 句 時 , sql server將 返 回 else_result_expression; 若 沒 有 指 定else子 句 時 , 則 返 回 null值 。2.Case 搜 索 語 句l按 指 定 順 序 為 每 個 when子 句 的 Boolean_expression求 值 。l返 回 第 一 個 取 值 為 true的 Boolean_expr
32、ession的 result_expression。l如 果 沒 有 取 值 為 true的 Boolean_expression, 則 當 指 定 else子 句 時 , sql server將 返 回 else_result_expression; 若 沒 有 指 定 else子 句 時 , 則返 回 null值 。 6.4.3 case 語 句 -簡 單 Case語 句 CASE sex WHEN 1 THEN 男 WHEN 2 THEN 女 ELSE 其 他 END -Case搜 索 語 句 CASE WHEN sex = 1 THEN 男 WHEN sex = 2 THEN 女 EL
33、SE 其 他 END 簡 單 Case語 句 只 返 回 第 一 個 符 合 條 件 的 值 , 剩 下 的 Case部 分 將 會被 自 動 忽 略 。 -比 如 說 , 下 面 這 段 SQL, 你 永 遠 無 法 得 到 “第 二 類 ”這 個 結(jié) 果 CASE WHEN col_1 IN ( a, b) THEN 第 一 類 WHEN col_1 IN (a) THEN 第 二 類 ELSE其 他 END select sno,cno,grade,case when grade=90 then 優(yōu) 秀 when grade=80 then 良 好 when grade=70 then
34、中 等 when grade=60 then 及 格 when grade60 then 不 及 格 end as 成 績 等 級from sc1.簡 單 Case 語 句 6.4.3 case 語 句2.Case 搜 索 語 句例 6-7:create table temp(score int not null)insert into temp values(60)insert into temp values(30)insert into temp values(90)insert into temp values(106)insert into temp values(87) selec
35、t score,等 級 =case when score=60 and score=80 and score=90 and score=0 and 成 績 =60 and 成 績 =70 and 成 績 =80 and 成 績 =90 and 成 績 =100 then 優(yōu) 秀 end from scgo select * from v 6.4.4 goto語 句無 條 件 轉(zhuǎn) 移 語 句 , 使 用 goto語 句 可 以 將 執(zhí) 行 流 程 轉(zhuǎn) 移 到 標 簽 指定 的 位 置 。 為 了 與 前 面 的 版 本 兼 容 , SQL SERVER 2008 支 持 goto語 句 ,但 由
36、 于 該 語 句 破 壞 了 語 句 的 結(jié) 構(gòu) , 容 易 引 發(fā) 不 易 發(fā) 現(xiàn) 的 問 題 , 所 以 應 該盡 量 減 少 或 避 免 使 用 。declare x intset x=1loving: print xselect x=x+1while x=3goto loving說 明 : 標 號 是 GOTO目 標 , 它 不 僅 僅 標 識 了 跳 轉(zhuǎn) 目 標 , 標 號 不 隔 離 其 前 后 語 句 。執(zhí) 行 標 號 前 面 語 句 的 用 戶 跳 過 標 號 并 執(zhí)行 標 號 后 的 語 句 。 除 非 標 號 前 面 的 語 句本 身 是 控 制 流 語 句 ( retur
37、n) , 這 種 情 況才 發(fā) 生 。 declare pjf floatif (select COUNT(*)from scwhere sno=2007056101)=0goto labelelse begin select pjf=AVG(grade)from scwhere sno=2007056101print pjfendlabel: print 無 學 生 或 此 學 生 沒 有 選 課 ! 示 例 : 輸 出 2007056101號 學 生 平 均 成 績 , 若 此 學 生 沒 有 選 課 ,則 顯 示 相 應 提 示 信 息 , 用 goto完 成 。 說 明 : 標 號 是
38、 GOTO目 標 , 它 不 僅 僅 標 識 了 跳 轉(zhuǎn) 目 標 ,標 號 不 隔 離 其 前 后 語 句 。 執(zhí) 行 標 號 前 面 語 句 的 用 戶 跳過 標 號 并 執(zhí) 行 標 號 后 的 語 句 。 除 非 標 號 前 面 的 語 句 本身 是 控 制 流 語 句 ( return) , 這 種 情 況 才 發(fā) 生 。 6.4.5 whilebreak和 continue 語 句1.while 語 句declare s int,num intselect s=0,num=1while num=100begin set s=s+numset num=num+1endprint 1+2+
39、3+.+100=+convert(char,s)go declare x intset x=1while x=3begin print xselect x=x+1end 6.4.5 whilebreak和 continue 語 句2.break 語 句 break 語 句 一 般 用 在 while循 環(huán) 或 if .else語 句 中 , 用 于 退 出 本 層 循 環(huán) 。例 : 求 1100之 間 的 累 加 和 , 當 和 超 過 1000時 停 止 累 加 , 顯 示 累 加 和 以 及 累加 到 的 位 置 。declare i int,s intset i=1set s=0whil
40、e i=1000 breakset i=i+1endselect s as s,i as i 6.4.5 whilebreak和 continue 語 句3.continue 語 句continue 命 令 可 以 讓 程 序 跳 過 continue命 令 之 后 的 語 句 ,回 到 while循 環(huán) 的 第 一 行 命 令 。 Break則 讓 程 序 完 全 跳 出 循環(huán) , 結(jié) 束 while命 令 的 執(zhí) 行 。例 : 求 110之 間 的 偶 數(shù) 和 , 并 用 continue控 制 語 句 的 輸 出 。declare x int,sum intset x=1set sum=
41、0 while x0print 遇 到 return之 前 returnprint 遇 到 return之 后 SQL SERVER2005新 增 功 能 try.catch語 句Bgein try語 句 語 句 塊 End tryBegin catch語 句 語 句 塊 End catch 類 似 C+的 異 常 處 理 , 當 執(zhí) 行 try語 句 塊 中 的 代 碼 出現(xiàn) 錯 誤 時 , 系 統(tǒng) 將 把 控 制 傳 遞 到 catch語 句 塊 進 行 處 理 。 begin trycreate database testend trybegin catchprint test數(shù) 據(jù) 庫
42、 已 存 在 drop database testprint 原 有 的 test數(shù) 據(jù) 庫 已 刪 除 create database testprint test數(shù) 據(jù) 庫 再 次 成 功 創(chuàng) 建 end catch 6.5 函 數(shù)6.5.1 數(shù) 學 函 數(shù)數(shù) 學 函 數(shù)功 能ABS(數(shù) 值 表 達 式 ) 絕 對 值 函 數(shù) , 返 回 數(shù) 值 表 達 式 的 絕 對 值ACOS(實 型 表 達 式 ) 反 余 弦 函 數(shù) , 返 回 一 個 余 弦 值 對 應 的 角 度 。 角 度 以 弧 度 表 示 ,實 型 表 達 式 取 值 范 圍 從 -11, 若 參 數(shù) 超 過 此 范 圍
43、 , 函 數(shù) 返 回NULL并 報 告 錯 誤COS(數(shù) 值 表 達 式 ) 正 弦 函 數(shù) , 返 回 表 達 式 中 以 弧 度 表 示 的 指 定 角 的 余 弦 值EXP(數(shù) 值 表 達 式 ) 指 數(shù) 函 數(shù) , 返 回 表 達 式 的 指 數(shù) 值LOG(數(shù) 值 表 達 式 ) 自 然 對 數(shù) 函 數(shù) , 返 回 表 達 式 的 自 然 對 數(shù) 值 PI() 圓 周 率 函 數(shù) , 返 回 14位 小 數(shù) 的 圓 周 率 常 量 值RAND() 隨 機 函 數(shù) , 隨 機 返 回 01之 間 的 float數(shù) 值SIGN(數(shù) 值 表 達 式 ) 符 號 函 數(shù) , 返 回 表 達 式
44、 的 正 號 、 零 或 負 號SIN(數(shù) 值 表 達 式 ) 正 弦 函 數(shù) , 返 回 表 達 式 中 以 弧 度 表 示 的 指 定 角 的 正 弦 值SQRT(數(shù) 值 表 達 式 ) 平 方 根 函 數(shù) , 返 回 表 達 式 的 平 方 根TAN(數(shù) 值 表 達 式 ) 正 切 函 數(shù) , 返 回 指 定 表 達 式 中 以 弧 度 表 示 的 指 定 角 的 正 切 值 例 【 6-8】 : 使 用 常 用 數(shù) 學 函 數(shù) 計 算 -1的 絕 對 值 , e的 10次 方 , 5的自 然 對 數(shù) , 半 徑 為 3的 圓 的 面 積 和 49的 平 方 根 。SELECT N-1絕
45、 對 值 =ABS(-1),Ne的 10次 方 =EXP(10),N5的 自 然 對 數(shù) =LOG(5),N半 徑 為 3的 圓 的 面 積 =PI()*3*3,N49的 平 方 根 =SQRT(49) 6.5.2 字 符 串 函 數(shù)字符串函數(shù)功 能ASCII(字 符 表 達 式 ) ASCII函 數(shù) , 返 回 字 符 串 表 達 式 中 最 左 端 字 符 的 ASCII碼 值CHAR(整 型 表 達 式 ) ASCII碼 轉(zhuǎn) 換 函 數(shù) , 參 數(shù) 為 介 于 0255之 間 的 整 數(shù) , 返 回 整 數(shù)的 ASCII碼LEFT(字 符 表 達 式 , n) 左 子 串 函 數(shù) , 返
46、 回 從 字 符 串 左 邊 開 始 的 n個 字 符LEN(字 符 表 達 式 ) 字 符 串 長 度 函 數(shù) , 返 回 字 符 串 表 達 式 中 字 符 的 個 數(shù)LOWER(字 符 表 達 式 ) 小 寫 字 母 函 數(shù) , 將 大 寫 字 母 轉(zhuǎn) 換 為 小 寫 字 母 , 返 回 表 達 式 的小 寫 字 母 表 示LTRIM(字 符 表 達 式 ) 刪 除 前 導 空 格 函 數(shù) , 返 回 刪 除 了 前 導 空 格 的 字 符 表 達 式REPLACE(字 符 表 達 式 1, 字 符 表 達 式 2, 字 符 表 達式 3) 字 符 替 換 函 數(shù) , 用 第 三 個 表
47、 達 式 替 換 第 一 個 字 符 串 表 達 式 中包 含 的 所 有 第 二 個 字 符 表 達 式 , 并 返 回 替 換 后 的 表 達 式RIGHT(字 符 表 達 式 , n) 右 子 串 函 數(shù) , 返 回 從 字 符 串 右 邊 開 始 的 n個 字 符RTRIM(字 符 表 達 式 ) 刪 除 尾 隨 空 格 函 數(shù) , 返 回 刪 除 所 有 尾 隨 空 格 的 字 符 表 達 式STR(數(shù) 值 表 達 式 , 長度 n , 小 數(shù) 位 ) 數(shù) 字 向 字 符 轉(zhuǎn) 換 函 數(shù) , 返 回 由 數(shù) 字 轉(zhuǎn) 換 過 來 的 字 符 串 , 長 度用 于 指 定 總 長 度 ,
48、 包 括 小 數(shù) 點 , 小 數(shù) 位 指 小 數(shù) 點 右 邊 的 位 數(shù)UPPER(字 符 表 達 式 ) 大 寫 字 母 函 數(shù) , 返 回 指 定 表 達 式 的 大 寫 字 母 表 示 例 【 6-9】 : 使 用 常 用 字 符 串 函 數(shù) 計 算 A的 ASCII碼 , SQL Server的 前 3個 字符 , 數(shù) 據(jù) 庫 原 理 字 符 串 的 長 度 , 將 China轉(zhuǎn) 換 為 大 寫 字 母 , 將 英 語 四 級 改 為 英 語 六 級 。T-SQL語 句 如 下 :SELECT NA的 ASCII=ASCII(A), NSQL Server的 前 3個 字 符 =LEF
49、T(SQL Server,3), N數(shù) 據(jù) 庫 原 理 的 長 度 =LEN(N數(shù) 據(jù) 庫 原 理 ), N將 China轉(zhuǎn) 換 為 大 寫 字 母 =UPPER(China), N將 英 語 四 級 改 為 英 語 六 級 =REPLACE(N英 語 四 級 ,N四 ,N六 )declare s varchar(50)set s=北 京 ,歡 迎 您 !select right(s,4)+left(s,2)將 北 京 ,歡 迎 您 !變 成 歡 迎 您 ! 北 京 select ASCII(loving) /*返 回 最 左 端 字 符 的 ascii碼 值 Len用 于 返 回 指 定 字
50、 符 串 的 字 符 ( 而 不 是 字 節(jié) ) 個 數(shù) 。select LEN(loving)select len(2011.10.01)select LEN (李 小 蔥 生 日 快 樂 ! ) declare s varchar(50)set s=2001年 月 歡 慶 北 京 申 奧 成 功 -變 成 北 京 年 月 申 奧 成 功 select substring(s,11,2)+LEFT(s,8)+RIGHT(s,4) select replicate(loving,3)select REPLACE(SQL SERVER,ER,loving)Replace函 數(shù) 將 字 符 串 中
51、 的 子 字 符 串 替 換 為 指 定 字 符 串Replicate函 數(shù) 用 于 指 定 的 次 數(shù) 重 復 字 符 串 表 達 式select ASCII(loving)ascii函 數(shù) 返 回 最 左 端 字 符 的 ascii代 碼 值 。純 數(shù) 字 的 字 符 串 可 以 不 用 單 引 號 , 而 其 他 字 符 表 達 式 必 需用 ,否 則 出 錯 。 子 串 替 換 函 數(shù)格 式 : STUFF( 字 符 表 達 式 1, 起 始 位 置 , 長 度 , 字 符 表 達 式 2)功 能 : 用 “ 字 符 表 達 式 2”的 值 替 換 “ 字 符 表 達 式 1”中 由
52、“ 起 始位 置 ” 和 “ 長 度 ” 指 明 的 一 個 子 串 。select STUFF(計 算 機 等 級 考 試 ,4,2,專 業(yè) )select STUFF(計 算 機 等 級 考 試 ,6,0,二 級 ) select charindex(l,I like football) 搜 索 的 起 始 位 置 是 1select charindex(l,I like football,4) 搜 索 的 起 始 位 置 是 4select charindex(l,I like football,15) 搜 索 的 起 始 位 置 是 15Charindex函 數(shù) 返 回 字 符 串 指
53、 定 表 達 式 的 起 始 位 置 。 6.5.3 日 期 和 時 間 函 數(shù)日期和時間函數(shù)描 述DAY(日 期 時 間 型 數(shù) 據(jù) ) 返 回 指 定 日 期 的 “ 天 ” 部 分 的 整 數(shù)GETDATE(日 期 時 間 型數(shù) 據(jù) ) 以 標 準 格 式 返 回 本 地 服 務 器 的 DATETIME值DATEADD(時 間 間 隔 ,數(shù) 值 表 達 式 , 日 期 ) 為 DATETIME值 添 加 間 隔 。 時 間 間 隔 項 決 定 時 間 間 隔的 單 位 , 可 取 Year、 Day of year(一 年 的 日 數(shù) )、Quarter、 Month、 Day、 We
54、ek、 Weekday(一 周 的 日數(shù) )、 Hour、 Minute、 Second、 Millisecond。 數(shù) 值 表達 式 為 加 上 或 者 減 去 的 時 間 間 隔 DATEDIFF(時 間 間 隔 ,日 期 1, 日 期 2) 計 算 兩 個 DATETIME值 之 間 指 定 的 日 期 部 分 的 差 , 返回 數(shù) 值 型 數(shù) 據(jù) 。 時 間 間 隔 項 決 定 時 間 間 隔 的 單 位 , 取值 與 DATEADD中 的 時 間 間 隔 項 相 同MONTH(日 期 時 間 型 數(shù)據(jù) ) 返 回 指 定 日 期 的 “ 月 ” 部 分 的 整 數(shù)YEAR(日 期 時
55、 間 型 數(shù) 據(jù) ) 返 回 指 定 日 期 的 “ 年 ” 部 分 的 整 數(shù) ConvertCONVERT() 函 數(shù) 是 把 日 期 轉(zhuǎn) 換 為 新 數(shù) 據(jù) 類 型 的 通 用 函 數(shù) 。CONVERT() 函 數(shù) 可 以 用 不 同 的 格 式 顯 示 日 期 /時 間 數(shù) 據(jù) 。例 如 : convert(char(4),year(date1) 例 【 6-10】 : 使 用 日 期 和 時 間 函 數(shù) 顯 示 當 前 日 期 , 在 當 前日 期 后 10天 的 日 期 , 當 前 日 期 與 2011年 1月 1日 相 隔 的 天 數(shù) 。T-SQL語 句 如 下 :SELECT
56、N顯 示 當 前 系 統(tǒng) 日 期 =GETDATE(),N在 當 前 日 期 后 10天 的 日 期=DATEADD(day,10,GETDATE(),N當 前 日 期 與 2011年 1月 1日 相 隔 的 天 數(shù)=DATEDIFF(DAY,GETDATE(),2011-01-01) 補充:數(shù)據(jù)類型轉(zhuǎn)換函數(shù)數(shù) 據(jù) 類 型 轉(zhuǎn) 換 函 數(shù) 可 以 將 某 一 種 類 型 的 數(shù) 據(jù) 轉(zhuǎn) 換 成 另 一 種 類型 的 數(shù) 據(jù) 。1)數(shù)值轉(zhuǎn)換為字符函數(shù)格 式 : STR(數(shù) 值 表 達 式 , 長 度 , 小 數(shù) 位 數(shù) )功 能 : 將 數(shù) 值 表 達 式 的 值 轉(zhuǎn) 換 為 字 符 串 , 轉(zhuǎn)
57、 換 時 自 動 四 舍 五入 。 默 認 長 度 為 10, 若 不 指 定 小 數(shù) 位 則 保 留 到 整 數(shù) 位 , 如 果 長度 小 于 數(shù) 值 表 達 式 值 的 整 數(shù) 位 數(shù) , 則 返 回 一 串 *號 。理 想 長 度 =整 數(shù) +小 數(shù) 點 +小 數(shù)要 求 長 度 理 想 長 度 : 加 前 導 符整 數(shù) 長 度 要 求 長 度 理 想 長 度 : 保 留 整 數(shù) 部 分 , 調(diào) 整 小 數(shù) 部分 。要 求 長 度 para2set max=para1else set max=para2return(max)end1.標 量 函 數(shù) use xscj2005gocreate
58、 function a(no char(10) returns tableas return (select student.學 號 ,姓 名 ,課 程 名 ,成 績from student,sc,coursewhere student.學 號 =sc.學 號 and sc.課 程 號 =course.課 程 號 and student.學 號 =no)goselect * from a(2008056102)2.內(nèi) 嵌 表 值 函 數(shù) : 只 能 通 過 select語 句 調(diào) 用 , 在 調(diào) 用 時 可 以 省 略 函 數(shù) 的所 有 者 use xscj2005gocreate funct
59、ion b(no char(10) returns score table(sno char(10), sname varchar(8), cname varchar(30), grade tinyint)as begin insert scoreselect student.學 號 ,姓 名 ,課 程 名 ,成 績from student,sc,coursewhere student.學 號 =sc.學 號 and sc.課 程 號 =course.課 程 號 and student.學 號 =no returnendgoselect * from b(2008056103) 3.多 語 句
60、 表 值 函 數(shù) : print dbo.maxf(12,38.6)select N最 大 數(shù) 為 :+convert(varchar(10),dbo.maxf(2.8,15676.9)declare m realexec m=dbo.maxf 12.8,789.6select m as 最 大 數(shù) 為 declare m realexec m=dbo.maxf para1=789.6,para2=12.8select m as 最 大 數(shù) 為 4.自 定 義 函 數(shù) 的 調(diào) 用調(diào) 用 標 量 函 數(shù) , 必 順 提 供 至 少 由 兩 部 分 組 成 的 名 稱 ( 所 有者 .函 數(shù) 名 ) , 可 用 print, select, exec語 句 調(diào) 用 內(nèi) 嵌 表 值 函 數(shù) 和 多 語 句 表 值 函 數(shù) 都 返 回 表 , 二 者 不 同 之處 在 于 :內(nèi) 嵌 表 值 函 數(shù) 沒 有 函 數(shù) 體 , 返 回 的 表 是 單 個 select語 句 的 結(jié) 果 集 。多 語 句 表 值 函 數(shù) 在 begin.end 定 義 的 函 數(shù) 主 體 包 含 T-SQL語 句 ,這 些 語 句 可 生 成 行 并 將 行 插 入 表 中 , 最 后 返 回 表 。
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應急救援安全知識競賽試題
- 1 礦井泵工考試練習題含答案
- 2煤礦爆破工考試復習題含答案
- 1 各種煤礦安全考試試題含答案