友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
SQL 21日自学通(V3.0)(PDF格式)-第74部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
8》 RBIS int)
9》 insert temp_BATTERS
10》 select * from BATTERS
11》 while exists (select * from temp_BATTERS)
12》 begin
13》 select @PLAYER = NAME from temp_BATTERS
14》 print @PLAYER
15》 delete from temp_BATTERS where NAME = @PLAYER
16》 end
17》 print 〃LOOP IS DONE!〃
分析
注意 当你设置了 ROWCOUNT 的数值以后 你只是改变了从 SELECT 语句中返回的
行数 如果 DELETE 命令的 WHERE 子句返回了 5 条记录的话 那么 5 行都将被删除 同
时也要注意 ROWCOUNT 也可以在循环重设 因此 在这个循环中 你可以通过重新设置
ROWCOUNT 的值来查询数据库中的一些其它的信息
427
…………………………………………………………Page 428……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
TRANSACT…SQL 中的通配符
在 SQL 中使用通配符的内容是在第 3 天的 表达式 条件与操作 中介绍的 LIKE
可以让你在 SQL 语句中使用通配符 通配符的使用增加了灵活性 在 TRANSACT…SQL 中
可供使用的通配符如下
l 下划线可以代表任何单个的字符 例如 _MITH 就是查询 5 个字符并且是以 MITH
结尾的
l 百分号可以代表一个或多个字符 例如 WILL%通配符可以返回 WILLIAMS 和
WILL
l 中括号可以匹配在括号内的字符 例如 'ABC'可以查询包括 A B C 的字符串
l 如果在中括号中使用了脱字符^ 那就是说匹配所有的字符但不包括中括号中给出
的 例如 '^ABC'表示查询所有的字符 除了 A B C
使用 PUTE 来生成摘要报告
TRANSACT…SQL 也具有生成摘要报告的能力 其命令为 PUTE 它的语法与它
在 SQL*PLUS 的语法极为相似 见第 20 天的 SQL*PULS
下边的查询将会产生关于所有击球手的报告 包括每个击球手的本垒数和所有击球手
总的本垒数
输入
select name; homeruns from batters pute sum(homeruns)
分析
在上一个例子中 PUTE 独自对报告进行了估算 然而 PUTE BY 则可以对
整个报告进行分组评估 如下例所示
语法
PUTE FUNCTION(expression) 'BY expression'
where the FUNCTION might include SUM; MAX; MIN; etc。 and
EXPRESSION is usually a column name or alias。
428
…………………………………………………………Page 429……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
日期转换
SYBASE 与 MICROSOFT SQL SERVER 可以向表中插入不同格式的日期 它们也可以
用不同的格式来表达日期 在这一部分将告诉你如何使用 SQL SERVER 的 CONVERT 来
实现多种形式的日期显示方法
语法
CONVERT (datatype '(length)'; expression; format)
在 SQL SERVER 中使用 CONVERT 时有下列日期格式是可用的
Format code Format picture
100 mon dd yyyy hh:miAM/PM
101 mm/dd/yy
102 yy。mm。dd
103 dd/mm/yy
104 dd。mm。yy
105 dd…mm…yy
106 dd mon yy
107 mon dd; yy
108 hh:mi:ss
109 mon dd; yyyy hh:mi:ss:mmmAM/PM
110 mm…dd…yy
111 yy/mm/dd
112 yymmdd
输入
select 〃PayDate〃 = convert(char(15); paydate; 107) from payment_table where customer_id = 012845
输出
PayDate
May 1; 1997
分析
在上例中使用的 CONVERT 转换格式中的 107 从上表中可以知道 107 将以 MON
DD YY 的形式显示日期
SQL SERVER 的诊断工具— — SET 命令
TRANSACT…SQL 提供了一系列的 SET 命令可以让你打开不同的选项以帮助分析
TRANSACT…SQL 的语句 这里给出了一些常见的 SET 命令
l SET STATISTICS IO ON 可以让服务器返回请示的物理和逻辑页数
429
…………………………………………………………Page 430……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
l SET STATISTICS TIME O 可以让服务器返回语句的运行时间
l SET SHOWPLAN ON 可以让服务器返回当前正在运行的计划中的查询
l SET NOEXEC ON 可以让服务器编译设计过的查询但不运行
l SET PARSONLY ON 可以让服务器对所设计的查询进行语法检查 但并不运行
TRANSACT…SQL 也提供下边的命令来帮助你对输出的显示进行控制
l SET ROWCOUNT N 可以让服务器只返回查询中的前 N 行
l SET NOCOUNT ON 不必报告查询所返回的行数
注 如果你对 TRANSACT…SQL 的语句调整比较关心 SQL 那么请参见第 15 天的 对 SQL
语句的优化以提高性能
总结
今天所讨论的主题增加了你对使用 SQL 编程的一些知识 关于基本的 SQL 内容你已
经在前些天学习过了 它为你进行数据库编程打下了一个良好的基础 但是 这些内容只
是基本的东西 SQL 过程语言的概念已经在昨天解释过了 今天你又学习了一种基本的
SQL 这对于你— — 数据库程序员 — — 在访问数据库时提供了强大的功能
在 SYBASE 和 MICROSOFT 的 SQL SERVER 中的 TRANSACT…SQL 提供了许多你可
以在第三代编程语言和第四代编程语言中可以找到的编程结构 这包括 IF 条件与 WHILE
循环以及局部和全局变量的定义能力
需要明白的是今天所介绍的内容只是 TRANSACT…SQL 的基本特性和技术 并对所有
你可用的工具有了一个感性的认识 对于它的更详细的内容你需要参见 MICROSOFT SQL
SERVER 的 TRANSACT…SQL 文档
问与答
问 在 SQL 中是否提供了 FOR 循环
答 像 FOR 循环 WHILE 循环以及 CASE 分支等都是对 ANSI 标准的 SQL 的扩展 所以
对于不同的数据库系统它们的使用方法有很大的不同 例如 在 ORACLE 中提供了 FOR
循环 而在 TRANSACT…SQL 中就没有提供 当然 可以在 WHILE 循环都使用一个变
量来模拟 FOR 循环
430
…………………………………………………………Page 431……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
问 如果我写一个 GUI 风格的 WINDOWS 或 MACINTOSH 应用程序 其中有对话框
之类的元素 这时我是否可以使用 PRINT 语句来向用户输出信息
答 SQL 与平台是完全独立的 所以 PRINT 语句不能将信息输出至对话框中 如果你想输
出信息给用户 你的 SQL 过程将会返回一个预定义的值来表示成功或失败 而用户则
可以从查询的状态中得到通知 PRINT 命令在调试时最有用 因为在存储过程中的
PRINT 命令将不会总是向屏幕输出
校练场
问 在 ORACLE 的 PL/SQL 中与在 TRANSACT…SQL 中 SQL 字的使用方法与 ANSI 标准
的 SQL 是完全相同的 对不对
问 静态的 SQL 比动态的 SQL 灵活性差 尽管它的性能要比动态的好 对不对
练习
1 如果你没有使用 SYBASE 或 MICROSOFT 的 SQL SERVER 那么请你比较一个你的产
品对 SQL 的扩展与今天所讲的有何不同
2 写一组 SQL 语句 它可以对一些已知的条件进行检测 如果条件为真 执行一些操作
否则的话执行另一些操作
431
…………………………………………………………Page 432……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
第 20 天 SQL*PLUS
目标
今天你将会学习 SQL*PLUS 这种 SQL 是针对 ORACLE 的 RDBMS 的 在今天的结
束 你将会明白 SQL*PLUS 的下述内容
l 如何使用 SQL*PLUS 的缓存
l 如何格式化报表
l 如何操作日期
l 如何创建交互式查询
l 如何构建高级报表
l 如何使用强大的 DECODE 函数
简介
我们介绍 SQL*PLUS 的原因是由于 ORACLE 数据库在关系数据库市场中所处的优势
地位以及 SQL*PLUS 为用户提供的强大功能及灵活性 SQL*PLUS 在许多方面与
TRANSACT…SQL 类似 见第 19 天 TRANSACT…SQL 简介 它们都实现了 ANSI 标准
的 SQL 它仍是所有 SQL 解释器的骨架 的大部能力
SQL*PLUS 命令可以增强 SQL 会话能力并对从数据库返回的查询的结果进行格式上的
增强 它也可以像一个专业化的报表生成器对报表进行格式化 SQL*PLUS 对 ANSI 标准
的 SQL 和 PL/SQL 进行了补充以帮助关系型数据库程序员们取得满意的数据格式
SQL*PLUS 缓存
SQL*PLUS 缓存是为你特定的 SQL 会话所指定的命令存储区域 这些命令包括大多数
最近执行过的命令以及你用于定制 SQL 会话的如格式化命令和变量赋值之类的命令 缓存
就像随机存储器一样 这里给出了一些对缓存的最常用的命令
l LIST line_number — — 可以列出缓存中的命令并可以通过行号将它指定为当前行
432
…………………………………………………………Page 433……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
l CHANGE/old_value/new_value — — 将缓存当前行的旧数值改为新数值
l APPEND text — — 向缓存所在的当前行中追加文本
l DEL — — 将缓存中的当前行删除
l SAVE newfile — — 将缓存中的 SQL 语句保存到文件中
l GET filename — — 将某文件中的内容送到缓存中
l / — — 运行缓存中的语句
让我们用一个简单的 SQL 语句来开始
输入
SQL》 select * from products where unit_cost 》 25;
输出
PRO PRODUCT_NAME UNIT_COST
P01 MICKEY MOUSE LAMP 29。95
P06 SQL MAND REFERENCE 29。99
P07 BLACK LEATHER BRIEFCASE 99。99
LIST 命令可以列出在缓存中最近执行过的命令 输出是非常简单的
SQL》 list
1 select *
2 from products
3* where unit_cost 》 25
分析
注意 在每一行的前边都有一个数字 这个数字对于缓存来说非常重要 它就像一个
指针一样可以让你通过 SQL*PLUS 来对指定行进行修改 SQL*Plus buffer 不是全屏幕编辑
的 当你按下回车后 你不能使用游标来回到上一行 如下例所示
输入
SQL》 select *
2 from products
3 where unit_cost 》 25
4 /
注 与 SQL 命令一样 你在 SQL*PLUS 中既可以用大写字符也可以用小写字符
433
…………………………………………………………Page 434……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
技巧 SQL*PLUS 中的大部分命令都可以缩写 例如 LIST 可以缩写为 L
你可以在 L 后边加上一个数字来跳转到缓存中的指定行
输入
SQL》 l3
3* where unit_cost 》 25
分析
注意 3 后边有一个星号 星号表明了当前的行号 在今天的例子中你应该注意星号
如果一行被标为
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!