友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
SQL 21日自学通(V3.0)(PDF格式)-第16部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
校练场
应用下表的内容来回答下列问题
LASTNAME FIRSTNAME AREACODE PHONE ST ZIP
BUNDY AL 100 555…1111 IL 22333
MEZA AL 200 555…2222 UK
MERRICK BUD 300 555…6666 CO 80212
MAST JD 381 555…6767 LA 23456
BULHER FERRIS 345 555…3223 IL 23332
PERKINS ALTON 911 555…3116 CA 95633
BOSS SIR 204 555…2345 CT 95633
写一下查询 返回数据库中所有名字以 M 开头的每一个人
写一个查询 返回数据库 ST 为 LA 且 FIRSTNAME 以AL 开头的人
给你两个表 PART1 和 PART2 你如何才能找出两个表中的共有元素 请写出查询
WHERE a 》= 10 AND a SELECT (FIRSTNAME || 'FROM') NAME; STATE
2 FROM FRIENDS
3 WHERE STATE = 'IL' AND
5 LASTNAME = 'BUNDY'
输出
NAME ST
AL FROM IL
仍使用上表 返回以下结果
NAME PHONE
MERRICK; BUD 300…555…6666
MAST; JD 381…555…6767
BULHER; FERRIS 345…555…3223
EMAIL wyhsillypig@163。 60
…………………………………………………………Page 61……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
EMAIL wyhsillypig@163。 61
…………………………………………………………Page 62……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
第四天 函数 对数据的进一步处理
目标
在今天我们将学习函数 在 SQL 中的函数可以执行一些储如对某一些进行汇总或或将
一个字符串中的字符转换为大写的操作 在今天结束之际 您将学会以下内容
l 汇总函数
l 日期与时间函数
l 数学函数
l 字符函数
l 转换函数
l 其它函数
这些函数将大大加强你对这一周的早些时间所学习的 SQL 的基本功能所获得的数据的
操作能力 开始的五个汇总函数 COUNT SUM AVG MAX MIN 是由 ANSI 标准
所制定的 大多数的 SQL 解释器都对汇总函数进行了扩充 其中有一些今天会提到 在有
些解释器这汇总函数的名称与这里所提到的不一样
汇总函数
这是一组函数 它们返回的数值是基于一列的 因为你不会对单个的记录求它的平均
数 这一部分的例子将使用 TEAMSTATS 表
输入
SQL》SELECT FROM TEAMSTATS
输出
NAME POS AB HITS WALKS SINGLES DOUBLES TRIPLES HR SO
JONES 1B 145 45 34 31 8 1 5 10
DONKNOW 3B 175 65 23 50 10 1 4 15
WORLEY LF 157 49 15 35 8 3 3 16
DAVID OF 187 70 24 48 4 0 17 42
HAMHOCKER 3B 50 12 10 10 2 0 0 13
EMAIL wyhsillypig@163。 62
…………………………………………………………Page 63……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
CASEY DH 1 0 0 0 0 0 0 1
COUNT
该函数将返回满足 WHERE 条件子句中记录的个数 例如你想知道都有哪一个球员的
击球数小于 350 可以这样做
输入/输出
SQL》 SELECT COUNT( ) FROM TEAMSTATS WHERE HITS/AB 。35
COUNT( )
4
为了使这段代码更易读 可以使用别名
输入/输出
SQL》SELECT COUNT( ) NUM_BELOW_350 FROM TEAMSTATS
WHERE HITS/AB 。35
NUM_BELOW_350
4
如果我们用列名来替换掉括号中的星号时会结果与原来有什么不同呢 试一下
SQL》 SELECT COUNT(NAME) NUM_BELOW_350 FROM TEAMSTATS
WHERE HITS/AB 。35
NUM_BELOW_350
4
结果是一样的 因为你所选择的NAME 列与 WHERE 子句并不相关 如果你在使用 count
时无 WHERE 子句 那么它将会返回表中的所有记录的个数
输入/输出
SQL》 SELECT COUNT( ) FROM TEAMSTATS
COUNT( )
6
SUM
SUM 就如同它的本意一样 它返回某一列的所有数值的和 如果想知道队员总打点的
总和是多少 试一下
EMAIL wyhsillypig@163。 63
…………………………………………………………Page 64……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
输入
SQL》SELECT SUM(SINGLES) TOTAL_SINGLES FROM TEAMSTATS
输出
TOTAL_SINGLES
174
如果想得到多个列的和 可按如下所做
输入/输出
SQL》 SELECT SUM(SINGLES) TOTAL_SINGLES SUM(DOUBLES)
TOTAL_DOUBLES SUM(TRIPLES) TOTAL_TRIPLES SUM(HR) TOTAL_HR
FROM TEAMSTATS
TOTAL_SINGLES TOTAL_DOUBLES TOTAL_TRIPLES TOTAL_HR
174 32 5 29
类似地 如果想找一下所有的点数在 300 包括 300 以上的的队员 则语句如下
输入/输出
SQL》SELECT SUM(SINGLES) TOTAL_SINGLES SUM(DOUBLES) TOTAL_DOUBLES
SUM(TRIPLES) TOTAL_TRIPLES SUM(HR) TOTAL_HR FROM TEAMSTATS
WHERE HITS/AB 》=。300
TOTAL_SINGLES TOTAL_DOUBLES TOTAL_TRIPLES TOTAL_HR
164 30 5 29
想估计一下一个球队的平均中球率
输入/输出
SQL》SELECT SUM(HITS)/SUM(AB) TEAM_AVERAGE FROM TEAMSTATS
TEAM_AVERAGE
。33706294
SUM 只能处理数字 如果它的处理目标不是数字 你将会收到如下信息
输入/输出
SQL》SELECT SUM(NAME) FROM TEAMSTATS;
ERROR
ORA…01722 invalid number
no rows selected
该错误信息当然的合理的 因为NAME 字段是无法进行汇总的
EMAIL wyhsillypig@163。 64
…………………………………………………………Page 65……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
AVG
AVG 可以返回某一列的平均值 如果你想知道漏球的平均数请看下例
输入
SQL》SELECT AVG(SO) AVE_STRIKE_OUTS FROM TEAMSTATS
输出
AVE_STRIKE_OUTS
16。166667
下边的例子反映了 SUM 与 AVG 的不同之处
输入/输出
SQL》SELECT AVG(HITS/AB) TEAM_AVERAGE FROM TEAMSTATS
TEAM_AVERAGE
。26803448
分析
可是在上一个例子中的打中率是。3370629 这是怎么回事呢 AVG 计算的是打中的次
数与总打击次数商的平均值 然而在上一个例子中是对打中次数和打击次数分别求和后在
进行相除的 举例来说 A 队员打了 100 杆 中了 50 次 那么他的平均值是 0。5 B 队员
打了 1 杆 没打中 他的平均值是 0。0 而 0。0 与 0。5 的平均值是 0。25 如果你按打 101 杆
中 50 杆计算 那么结果就会是正确的了 下边的例子将会返回正确的击中率
输入/输出
SQL》SELECT AVG(HITS)/AVG(AB) TEAM_AVERAGE FROM TEAMSTATS
TEAM_AVERAGE
。33706294
与 SUM 函数一样 AVG 函数也只能对数字进行计算
MAX
如果你想知道某一列中的最大值 请使用 MAX 例如 你想知道谁的打点最高
输入
SQL》SELECT MAX(HITS) FROM TEAMSTATS
EMAIL wyhsillypig@163。 65
…………………………………………………………Page 66……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
输出
MAX(HITS)
70
你能从这里知道是谁打的最多吗
输入/输出
SQL》SELECT NAME FROM TEAMSTATS WHERE HITS=MAX HITS
ERROR at line 3
ORA…00934 group function is not allowed here
很不幸 你不能 这一信息提示你汇总函数无法在 WHERE 子句中使用 但是请别灰
心 在第 7 天的 子查询 深入 SELECT 语句 将引入子查询的概念并会给出知道谁是打
点最多人解决方案
如果把它用的非数字场合会有什么情况出现呢
输入/输出
SQL》SELECT MAX(NAME) FROM TEAMSTATS
MAX(NAME)
WORLEY
这是一个新现象 MAX 返回了最高的字符串 最大的是 z 所以说 MAX 既可以处
理数值也可以处理字符
MIN
MIN 与 MAX 类似 它返回一列中的最小数值 例如 你想知道打杆的最小值是多少
输入
SQL》SELECT MIN AB FROM TEAMSTATS
输出
MIN(AB)
1
下列语句将返回名字在字母表中排在最前边的
输入/输出
SQL》SELECT MIN(NAME) FROM TEAMSTATS
EMAIL wyhsillypig@163。 66
…………………………………………………………Page 67……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
MIN(NAME)
CASEY
你可以同时使用 MAX 和 MIN 函数以获得数值的界限 例如
输入/输出
SQL》SELECT MIN AB MAX AB FROM TEAMSTATS
MIN(AB) MAX(AB)
1 187
对于统计函数来说这一信息有时非常有用
注 我们在今天开始曾说过 这五个函数是由 ANSI 标准所定义的 其余的函数也已
经成为了事实上的标准 你可以在所有的 SQL 解释器中找到它们 这里 我们使用的它们
在 ORACLE7 中的名字 在其它的解释器中它们的名称可能与这里提到的不同
VARIANCE
VARIANCE 方差 不是标准中所定义的 但它却是统计领域中的一个至关重要的数
值 使用方法如下
输入
SQL》SELECT VARIANCE HITS FROM TEAMSTATS
输出
VARIANCE(HITS)
802。96667
如果我们在将它应用于字符串
输入/输出
SQL》SELECT VARIANCE NAME FROM TEAMSTATS
ERROR
ORA…01722 invalid number
No rows selected
可见 VARIANCE 也是一个只应用于数值对象的函数
EMAIL wyhsillypig@163。 67
…………………………………………………………Page 68……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
STDDEV
这是最后一个统计函数 STDDEV 返回某一列数值的标准差 它的应用示例如下
输入
SQL》SELECT STDDEV HITS FROM TEAMSTATS
输出
STDDEV(HITS)
28。336666
同样 对字符型列应用该函数时会得到错误信息
输入/输出
SQL》SELECT STDDEV
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!