SQL 21日自学通(V3.0)(PDF格式)-第17部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
…………………………………………………………Page 58……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
BAKER
CHARLIE
DEAN
EXITOR
FALCONER
GOOBER
ABLE
BRAVO
CHARLIE
DECON
EXITOR
FUBAR
GOOBER
14 rows selected。
分析
可以看到 UNION ALL 与 UNION 一样对表进行了合并 但是它不去掉重复的记录 可是
如果我们想知道都有谁同时在两个表中呢 UNION 无法做到这一点 我们需要学习使用
INTERSECT
INTERSECT 相交
INTERSECT 返回两个表中共有的行 看下例 它将返回两个表中有存在的员工
输入:
SQL》 SELECT * FROM FOOTBALL
2 INTERSECT
3 SELECT * FROM SOFTBALL
输出
NAME
ABLE
CHARLIE
EXITOR
GOOBER
分析
这些记录是两个表中都存在的
MINUS 相减
MINUS 返回的记录是存在于第一个表中但不存在于第二个表中的记录 例如
输入:
SQL》 SELECT * FROM FOOTBALL MINUS SELECT * FROM SOFTBALL
输出
NAME
BRAVO
DECON
FUBAR
上例中显示了三个不在垒球队中的足球队员 如果你把语句的次序颠倒 那么你将得到在
垒球队中但不在足球队中的队员
输入:
SQL》 SELECT * FROM SOFTBALL MINUS SELECT * FROM FOOTBALL
输出
NAME
BAKER
DEAN
EMAIL wyhsillypig@163。 58
…………………………………………………………Page 59……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
FALCONER
从属运算 IN and BETWEEN
这两个运算符对你已经做过的例子提供了更快捷的操作 如果你想找一个你在 Colorado;
California;和 Louisiana 的朋友 可以输入
输入:
SQL》 SELECT * FROM FRIENDS WHERE STATE= 'CA' OR STATE ='CO' OR STATE =
'LA'
输出
LASTNAME FIRSTNAME AREACODE PHONE ST ZIP
MERRICK BUD 300 555…6666 CO 80212
MAST JD 381 555…6767 LA 23456
PERKINS ALTON 911 555…3116 CA 95633
也可以输入
输入/输出:
SQL》 SELECT * FROM FRIENDS WHERE STATE IN('CA';'CO';'LA')
LASTNAME FIRSTNAME AREACODE PHONE ST ZIP
MERRICK BUD 300 555…6666 CO 80212
MAST JD 381 555…6767 LA 23456
PERKINS ALTON 911 555…3116 CA 95633
分析
第二个实例比第一个更易读和简捷 我想你一会再用以前的方法来工作了吧 在 IN 中也
可以使用数字 例如
输入/输出:
SQL》 SELECT *
2 FROM FRIENDS
3 WHERE AREACODE IN(100;381;204)
LASTNAME FIRSTNAME AREACODE PHONE ST ZIP
BUNDY AL 100 555…1111 IL 22333
MAST JD 381 555…6767 LA 23456
BOSS SIR 204 555…2345 CT 95633
如果你想要查找符合某一范围的记录 例如
输入/输出:
SQL》 SELECT * FROM PRICE WHERE WHOLESALE 0。25 AND WHOLESALE
0。75
ITEM WHOLESALE
TOMATOES 。34
POTATOES 。51
BANANAS 。67
TURNIPS 。45
或使用 BEWTEEN 你可以这样写
输入/输出:
SQL》SELECT * FROM PRICE WHERE WHOLESALE BETWEEN 0。25 AND 0。75
ITEM WHOLESALE
TOMATOES 。34
POTATOES 。51
BANANAS 。67
TURNIPS 。45
看 第二个是不是比第一个更清楚和易读
EMAIL wyhsillypig@163。 59
…………………………………………………………Page 60……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
注 如果批发价为 0。25 的商品在表中存在 那么它们也将会被返回 BETWEEN 操作将包
括边界值
摘要
在第三天我们学会了使用最基本的 SELECT 子句和 FROM 子句 现在我们已经掌握了最为
常用的操作来使数据库返回的结果满足你的要求 你学会了使用算术 比较 字符和逻辑
操作 这为你进一步学习 SQL 打下了良好的基础
问与答
问 如果我不想使用命令行的 SQL 那么学习这些东西对我有什么用
答 不论你使用内嵌 SQL 的 COBOL 还是微软的 ODBC 它们所使用的 SQL 结构都是一
样的 所以你现在学习的东西将会更有助于你以后的学习
问 既然 SQL 是一种标准 那为什么又种是让我检查一下自己的解释器呢
答 我们所使用的是 ANSI1992 标准 但大多数供应商对它进行了修改以使它更适用于自
己的数据库 我们是以 ANSI1992 标准为基础的 但在具体使用时要注意它们的不同
校练场
应用下表的内容来回答下列问题
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