友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
SQL 21日自学通(V3.0)(PDF格式)-第15部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
EMAIL wyhsillypig@163。 89
…………………………………………………………Page 90……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
DEPARTMENT
2 FROM JOB_TBL;
输出
NAME________________JOB_______________DEPARTMENT_____
ALVIN SMITH VICEPRESIDENT MARKETING
是不是变得好多了
TRANSLATE
这一函数有三个参数 目标字符串 源字符串和目的字符串 在目标字符串与源字符
串中均出现的字符将会被替换成对应的目的字符串的字符
输入
SQL》 SELECT FIRSTNAME; TRANSLATE(FIRSTNAME
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
'NNNNNNNNNNAAAAAAAAAAAAAAAAAAAAAAAAAA) FROM
CHARACTERS
输出
FIRSTNAME TRANSLATE(FIRST
kelly kelly
CHUCK AAAAA
LAURA AAAAA
FESTER AAAAAA
ARMANDO AAAAAAA
MAJOR AAAAA
6 rows selected。
注意 这个函数对大小写是敏感的
INSTR
如果需要知道在一个字符串中满足特定的内容的位置可以使用 INSTR 它的第一个参
数是目标字符串 第二个参数是匹配的内容 第三和第四个参数是数字 用以指定开始搜
EMAIL wyhsillypig@163。 90
…………………………………………………………Page 91……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
索的起点以及指出第几个满足条件的将会被返回 下例将从字符串的第二个字符开始 搜
索并返回第一个以 O 开头的字符的位置
输入
SQL》SELECT LASTNAME INSTR LASTNAME O 2 1 FROM CHARACTERS
输出
LASTNAME INSTR(LASTNAME;'O';2;1)
PURVIS 0
TAYLOR 5
CHRISTINE 0
ADAMS 0
COSTALES 2
KONG 2
6 rows selected
分析
默认第三个与第四个参数的数值均为 如果第三个数值为负数 那么将会从后向前搜索
LENGTH
LENGTH 将返回指定字符串的长度 例如
输入
SQL》SELECT FIRSTNAME LENGTH RTRIM FIRSTNAME FROM CHARACTERS
输出
FIRSTNAME LENGTH(RTRIM(FIRSTNAME))
kelly 5
CHUCK 5
LAURA 5
FESTER 6
ARMANDO 7
MAJOR 5
注意 这里使用了函数 RTRIM 否则 LENGTH 将全部返回 15
转换函数
转换函数有三个 可以使你方便地将数据从一种类型变换为另一种类型 本节的示例
EMAIL wyhsillypig@163。 91
…………………………………………………………Page 92……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
使用表 CONVERSIONS
输入
SQL》 SELECT * FROM CONVERSIONS
输出
NAME TESTNUM
40 95
13 23
74 68
NAME 列为字符串 该列的宽度为 15 TESTNUM 列为数字
TO_CHAR
该函数的最初功能是将一个数字转换为字符型 不同的解释器可能会使用它来转换其它的
数据类型 例如日期型转换为字符型或者是拥有更多的参数 下例展示了该函数的基本功
能
输入
SQL》 SELECT TESTNUM TO_CHAR TESTNUM FROM CONVERT
输出
TESTNUM TO_CHAR(TESTNUM)
95 95
23 23
68 68
稍安勿燥 下例可以证明它确实已经将 TESTNUM 转换为字符型了
输入
SQL》SELECT TESTNUM LENGTH TO_CHAR TESTNUM FROM CONVERT
输出
TESTNUM LENGTH(TO_CHAR(TESTNUM))
95 2
23 2
68 2
分析
如果对数字使用 LENGTH 函数将会返回错误 注意 TO_CHAR 与在先前进过的 CHR 不同
EMAIL wyhsillypig@163。 92
…………………………………………………………Page 93……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
CHR 返回字符集中给定数字位置的一个字符或符号
TO_NUMBER
该函数与 TO_CHAR 函数相对应 显而易见 它是将一个字符串型数字转换为数值型 例
如
输入
SQL》 SELECT NAME TESTNUM TESTNUM*TO_NUMBER NAME FROM CONVERT
输出
NAME TESTNUM TESTNUM*TO_NUMBER(NAME)
40 95 3800
13 23 299
74 68 5032
分析
如果该函数没有将 NAME 转换为数值的话将会返回一个错误信息
其它函数
这里有三个函数可能对你是有用处的
GREATEST 与 LEAST
这两个函数将返回几个表达式中最大的和最小的 例如
输入
SQL》 SELECT GREATEST ALPHA BRAVO FOXTROT DELTA
FROM CONVERT
输出
GREATEST
FOXTROT
FOXTROT
FOXTROT
分析
注意 GREATEST 将会返回在字母表中最靠后的字符开头的字符串 虽然看起来似乎没
EMAIL wyhsillypig@163。 93
…………………………………………………………Page 94……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
有必要使用 FROM 子句 可是如果 FROM 子句没有的话 你将会收到一个错误信息 每
一个 SELECT 语句都需要 FROM 子句 由于给定的表有三行 所以结果返回了三个
输入
SQL》 SELECT LEAST 34 567 3 45 1090 FROM CONVERT
输出
LEAST(34 567 3 45 1090)
3
3
3
就像你看到的那样 这两个函数也可以对数字进行处理
USER
该函数返回当前使用数据库的用户的名字
输入
SQL》 SELECT USER FROM CONVERT
输出
USER
PERKINS
PERKINS
PERKINS
只有我一个人在使用这个数据库 看 SELECT 又一次对表中的每一行都返回了结果
该函数与在今天早些时候提及的日期函数类似 甚至尽管 USER 不是表中确实存在的列
但 SELECT 仍然检索了表中的每一行
总结
好长的一天啊 我们一共学习了 47 个函数 你无需记住每一个函数 只需要知道它们
的大致类型 算术函数 日期/ 时间函数 字符函数 转换函数 其它函数 而当你写一
个查询的时候你有一个明确的目标就够了
EMAIL wyhsillypig@163。 94
…………………………………………………………Page 95……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
问与答
问 为什么在 ANSI 标准中定义的函数这么少 而不同的解释器又都定义了这么多的函数
答 ANSI 标准是一个非常宽松的标准 而且如果对所有的解释器生产厂家来说过多的限
制会使其走向破产的道路 另一方面 如果 A 公司对 SQL 补充了一个用于统计的函
数包而销路特别好的话 那么 B 公司和 C 公司一定也会跟着做的
问 我认为你对 SQL 的介绍太简单了 我的工作时应该如何去使用这些函数呢
答 这个问题与一个都三角的教师所提出的问题类似 事实上我也不知道如何却求一个等
腰三角形的面积 所以 我的回答是 根据你的职业而定 你的工作中需要用到哪些
函数你就去使用它 而其它的对你来说则是没有必要掌握的 这一观点也适用于你的
查询
校练场
1 哪个函数是用来将给定字符串的第一个字母变成大写而把其它的字符变成小写的
2 哪此函数的功能就如同它的名字含义一样
3 下边的查询将如何工作
SQL》 SELECT COUNT(LASTNAME) FROM CHARACTERS;
4 下边的查询是干什么的
SQL》 SELECT SUM(LASTNAME) FROM CHARACTERS;
5 哪个函数可以将 FIRSTNAME 列与 LASTNAME 列合并到一起
6 在下边的查询中 6 是什么意思
输入
SQL》 SELECT COUNT(*) FROM TEAMSTATS;
输出
COUNT(*)
6
7 下列语句将输出什么
SQL》 SELECT SUBSTR LASTNAME;1;5 FROM NAME_TBL;
EMAIL wyhsillypig@163。 95
…………………………………………………………Page 96……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
练习
1 用今天的 TEAMSTARTS 表来写一个查询 用来显示谁的中球率低于 0。25 中球率
的计算方法为 hits/ab
2 用今天的 CHARACTERS 表来写一个查询 要求返回下边的结果
INITIALS__________CODE
K。A。P。 32
1 row selected。
EMAIL wyhsillypig@163。 96
…………………………………………………………Page 97……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
第五天 SQL 中的子句
目标
今天的主题是子句 — — 它不是你在渡假时的赠品 而是你所学习的 SELECT 语句的一
个组成部分 在今天结束以后我们将学会以下子句
l WHERE
l STARTING WITH
l ORDER BY
l GROUP BY
l HAVING
为了对这些子句有一个大致的印象 请看一下 SELECT 语句的通用语法表达式
语法
SELECT 'DISTINCT | ALL' { *
| { 'schema。'{table | view | snapshot}。*
| expr } ' 'AS' c_alias '
'; { 'schema。'{table | view | snapshot}。*
| expr } ' 'AS' c_alias ' ' 。。。 }
FROM 'schema。'{table | view | snapshot}'@dblink' 't_alias'
'; 'schema。'{table | view | snapshot}'@dblink' 't_alias' ' 。。。
'WHERE condition '
'GROUP BY expr '; expr' 。。。 'HAVING condition' '
'{UNION | UNION ALL | INTERSECT | MINUS} SELECT mand '
'ORDER BY {expr|position} 'ASC | DESC'
' {expr|position} 'ASC | DESC'' 。。。'
注 根据我对 SQL 的经验 ANSI 标准确实只是 ANSI 的 建议 上述的语法格式在
大多数的 SQL 引擎下都能够工作 但是你可以发现它们之间存在着一些差别
EMAIL wyhsillypig@163。 97
…………………………………………………………Page 98……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
你无需对这些复杂的语法花费太多的精力 因为许多人发现语法表比关于新应用的示
例更容易让人困惑 本书采用简单的例子展现其特点 不过 如果我们在今天看一下有关
它的语法表述会使我们对今天的学习更容易理解
不要对语法的精确内容太担心 对于不同的解释器它们是不同的 所以 我们应该把
精力放到关系上 在最前边的是 SELECT 语句 我们在前几天已经多次使用过了 SELECT
之后应该是 FROM 在每次输入 SELECT 语句时它也应该输入 明天我们将学习 FROM
语句的新用法 之后是 WHERE GROUP BY HAVING 和 ORDER BY 其余的子句 包
括 UNION UNION ALL INTERSECT 和 MINUS 在表中已经在第 3 天时讲过了 每一个
子句的在数据的选择和操作时都扮演着它的重要角色
注 在今天的例子中我们使用两种 SQL 解释器 一种仍然是 SQL 的命令行形式 它
属于 Personal Oracle7 而另外一种则不是 它是 BORLAND 公司的 ISQL 你可以发现
输出的结果会随着解释器的不同而不同
WHERE 子句
仅使用 SELECT 和 FROM 子句 你会受到表中的每一行数据均返回的限制 例如 只
在 CHECKS 表中使用这两个关键字 你将会得到表中的全部行 共 7 行
INPUT
SQL》SELECT * FROM CHECKS
OUTPUT
CHECK# PAYEE AMOUNT REMARKS
1 Ma Bell 150 Have sons next time
2 Reading R。R。 245。34 Train to Chicago
3 Ma Bell 200。32 Cellular Phone
4 Local Utilities 98 Gas
5 Joes Stale Dent 150 Groceries
16 Cash 25 Wild Night Out
17 Joans Gas 25。1 Gas
使用 WHERE 子句将会使你更具有选择性 要想找到你所填写的支票中所有超过 100
元的 你可以这样写
INPUT
EMAIL wyhsillypig@163。 98
…………………………………………………………Page 99……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
SQL》SELECT * FROM CHECKS WHERE AMOUNT 100
WHERE 子句只返回了符合条件的四条记录
OUTPUT
CHECK# PAYEE AMOUNT REMARKS
1 Ma Bell 150 Have sons next time
2 Reading R。R 245。34 Train to Chicago
3 Ma Bell 200。32 Cellular Phone
5 Joes Stale Dent 150 Groceries
使用 WHERE 也可以解决一些其它的难题 下表给出了姓名和位置 你可以提出这样
的问题— — Waldo 住在哪儿
INPUT
SQL》SELECT * FROM PUZZLE
OUTPUT
NAME LOCATION
TYLER BACKYARD
MAJOR KITCHEN
SPEEDY LIVING ROOM
WALDO GARAGE
LADDIE UTILITY CLOSET
ARNOLD TV ROOM
INPUT
SQL》SELECT LOCATION AS 〃WHERE'S WALDO?〃 FROM PUZZLE
WHERE NAME = 'WALDO'
OUTPUT
WHERE'S WALDO?
GARAGE
好了 我答应以后不再写像这样粗俗的语句了 我已经把它们收录于 SQL BATHROOM
HUMOR — — 这是一本每个人都想得到的书 不过 这个查询显示出了在 WHERE 中用
于条件的列并没有在 SELECT 语句中出现 本例中你所选择的是 LOCATION 列而条件列
是 NAME 这是完全合法的 同时 我们也应该注意到 SELECT 语句中我们使用了 AS
它是一个可以选择的参数 用以指定 LOCATION 的别名 你以后将不会看到 AS 因为它
是多余的 ACCESS 中则不可省略— — 译者 在大多数 SQL 解释器中我们只需输入
EMAIL wyhsillypig@163。 99
…………………………………………………………Page 100……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
INPUT
SQL》SELECT LOCATION 〃WHERE'S WALDO?〃 FROM PUZZLE WHERE
NAME='WALDO'
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!