友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
SQL 21日自学通(V3.0)(PDF格式)-第18部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
组
OUTPUT
TEAM AVG AVG
MARKETING 28 15
RESEARCH 27 15
你也可以在 HAVING 中使用在 SELECT 中没有指出的字段进行汇总 如
INPUT/OUTPUT
SELECT TEAM AVG SICKLEAVE AVG ANNUALLEAVE FROM ORGCHART
GROUP BY TEAM HAVING COUNT TEAM 1
TEAM AVG AVG
COLLECTIONS 26 21
MARKETING 28 15
RESEARCH 27 15
EMAIL wyhsillypig@163。 113
…………………………………………………………Page 114……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
该查询返回了组中成员大于 1 的组 虽然的 SELECT 子句中没有出现 COUNT TEAM
语句 但是它还是在 HAVING 子句中起到了它应有的作用
在 HAVING 子句中也可以使用其它的逻辑操作符 例如
INPUT/OUTPUT
SELECT TEAM MIN SALARY MAX SALARY FROM ORGCHART
GROUP BY TEAM HAVING AVG SALARY 37000
OR
MIN SALARY 32000
TEAM MIN MAX
COLLECTIONS 35000。00 40000。00
PR 37500。00 37500。00
RESEARCH 34000。00 45000。00
操作符 IN 也可以在 HAVING 子句中使用 如下例
INPUT/OUTPUT
SELECT TEAM AVG SALARY FROM ORGCHART GROUP BY TEAM
HAVING TEAM IN 'PR';'RESEARCH'
TEAM AVG
PR 37500。00
RESEARCH 39500。00
子句的综合应用
这一部分没有什么新的东西 只是通过一些例子来向你演示如何将这些子句进行综合
的应用
例
找出所有 CHECKS 表中对 CASH 和对 GAS 支付的记录 并按 REMARKS 进行排序
INPUT
SELECT PAYEE REMARKS FROM CHECKS WHERE PAYEE='Cash'
OR REMARKS LIKE'Ga%' ORDER BY REMARKS
OUTPUT
PAYEE REMARKS
EMAIL wyhsillypig@163。 114
…………………………………………………………Page 115……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
Joans Gas Gas
Joans Gas Gas
Local Utilities Gas
Cash Trip to Boston
Cash Trip to Dayton
Cash Wild Night Out
分析
这里使用了 LIKE 来查找在 REMARKS 中以 GA 开头的内容 通过使用 OR 来控制 WHERE
返回满足两个条件之一的内容
如果您有相同的要求 并要求按 PAYEE 进行分组 看下例
INPUT
SELECT PAYEE REMARKS FROM CHECKS WHERE PAYEE 'Cash'
OR REMARKS LIKE'Ga%' GROUP BY PAYEE ORDER BY REMARKS
分析
这个查询将会由于无法对 REMARKS 进行分组而无法工作 切记 无论在什么情况下
进行分组 SELECT 语句中出现的字段只能是在 GROUP BY 中出现过的才可以— — 除非你
在 SELECT 子句中不指定任何字段
例 2
使用 ORGCHART 表 找出病候天数少于 25 天的人的工资 并按名字进行排序
INPUT
SELECT NAME SALARY FROM ORGCHART WHERE SICKLEAVE50
PAYEE TOTAL NUMBER_WRITTEN
Cash 119 3
Joes Stale Dent 150 1
Local Utilities 219。5 3
Ma Bell 350。33002 2
Reading R。R 。245。34 1
如果把它们结合起来使用会有出人意料的结果 例如
INPUT
SELECT PAYEE SUM AMOUNT TOTAL COUNT PAYEE NUMBER_WRITTEN
FROM CHECKS WHERE AMOUNT》=100 GROUP BY PAYEE
HAVING SUM AMOUNT 》50
OUTPUT
PAYEE TOTAL NUMBER_WRITTEN
Joes Stale Dent 150 1
Ma Bell 350。33002 2
Reading R。R 。245。34 1
将其与下边的结果进行对比
INPUT/OUTPUT
SELECT PAYEE AMOUNT FROM CHECKS ORDER BY PAYEE
PAYEE AMOUNT
Abes Cleaners 10。5
Abes Cleaners 24。35
Cash 25
EMAIL wyhsillypig@163。 118
…………………………………………………………Page 119……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
Cash 34
Cash 60
Joans Gas 15。75
Joans Gas 25。1
Joes Stale Dent 150
Local Utilities 34
Local Utilities 87。5
Local Utilities 98
Ma Bell 150
Ma Bell 200。33
Reading R。R 。245。34
分析
你使用了 WHERE 子句在分组前将 AMOUNT 小于 50 的记录过滤掉了 我们并不试图告诉
你不要结合使用这两种分组 你在以后可能会有这方面的需要 但是请不要随便地结合使
用这两种子句 在上例的表中只有为数不多的几行 否则这本书的内容需要用车来拉了
而在你的实际工作中数据库可能有成千上万行 结合使用后造成的变化就不会像现在这样
明显了
总结
在今天我们学习了与扩展 SELECT 语句功能相关的所有子句 切记要认真仔细地去对
计算机描述你的需求 我们的基本 SQL 教育到这里就结束了 你已经有足够的能力对单个
表进行操作了 明天 第 6 天 归并表格 我们将有机会在多个表中工作
问与答
问 像这些功能在这一周的早些时候我们已经学习过了 为什么今天还要再学习一次
答 我们的确在第 3 天就曾经提到过 WHERE 子句 我们在那时使用 WHERE 是为了
更加可靠地进行操作 WHERE 在今天出现是因为它是一个子句 而我们在今天
讨论的主题是子句
校练场
1 哪种子句的作用与 LIKE % 相似
EMAIL wyhsillypig@163。 119
…………………………………………………………Page 120……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
2 GROUP BY 子句的功能是什么 哪种子句的功能与它类似
3 下面的查询会工作吗
INPUT
SQL》SELECT NAME AVG SALARY DEPARTMENT FROM PAY_TBL
WHERE DEPARTMENT='ACCOUNTING' ORDER BY NAME
GROUP BY DEPARTMENT SALARY
4 为什么在使用 HAVING 子句时我们总是同时使用 GROUP BY 子句
5 你可以使用在 SELECT 语句中没有出现的列进行排序吗
练习
1 使用上例中的 ORGCHART 表找一下每一个 TEAM 中 SICKLEAVE 天数超过 30 天
的人数
2 使用 CHECKS 表 返回如下结果
OUTPUT
CHECK# PAYEE AMOUNT
1 MA BELL 150
EMAIL wyhsillypig@163。 120
…………………………………………………………Page 121……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
第六天 表的联合
今天我们将学习联合操作 这种操作可以让你从多个表中选择数据并对它们进行维护
在今天结束以后我们将会具有以下能力
l 执行外部联合
l 执行内部联合
l 执行左联合
l 执行右联合
l 进行等值联合
l 进行不等值联合
介绍
能够从多个表中选择和操作数据是 SQL 的特色之一 如果没有这个功能的话你将不得
不将一个应用程序所需的所有数据放在一个表中 如果表不能共享那么你将不得不在多个
表中保存相同的数据 而且每当用户需要查询一个新的内容时你就不得不重新设计 和编
译你的数据库系统 SQL 中的 JION 语句可以让你的设计出比那种庞大的表格更小和更为
专业以及更容易使用的表格
在一个 SELECT 语句中使用多个表
就像多萝茜在 绿野仙踪 中所做的一样 你其实在 第二天 查询— — SELECT 语
句的使用 中学习过 SELECT 和 FROM 以后就已经具备了联合多个表格的能力了 但是与
多萝茜不同 你执行联合操作并不需要将脚后跟磕三下 使用下边的两个表 简单点 不
妨就叫 TABEL1 和 TABLE2
注 在今天的查询使用的是 BORLAND 的 ISQL 产生的结果 你会发现它与我们在本书的
早些时候所使用的查询有一些不同之处 例如 它没有 SQL 提示符 而且在语句的末尾也
没有分号 在 ISQL 中分号是可选项 但是查询的基本结构是相同的
EMAIL wyhsillypig@163。 121
…………………………………………………………Page 122……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
INPUT
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!