SQL 21日自学通(V3.0)(PDF格式)-第23部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
'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'
这里没有使用 AS 但它的结果与上例是完全一样的
WHERE 是使用频度仅次于 SELECT 和 FROM 的语句
STARTING WITH 子句
STARTING WITH 子句附加于 WHERE 子句上 它的作用与 LIKE exp% 相似 试
比较下边的两个查询
INPUT
SELECT PAYEE AMOUNT REMARKS FROM CHECKS WHERE PAYEE
LIKE('Ca%')
OUTPUT
PAYEE AMOUNT REMARKS
Cash 25 Wild Night Out
Cash 60 Trip to Boston
Cash 34 Trip to Dayton
再看看下边的查询
INPUT
SELECT PAYEE AMOUNT REMARKS FROM CHECKS WHERE PAYEE STARTING
WITH('Ca')
OUTPUT
PAYEE AMOUNT REMARKS
Cash 25 Wild Night Out
Cash 60 Trip to Boston
Cash 34 Trip to Dayton
结果是相同的 你甚至可以同时使用它们 例如
INPUT
SELECT PAYEE AMOUNT REMARKS FROM CHECKS
WHERE PAYEE STARTING WITH('Ca') OR REMARKS LIKE 'G%'
OUTPUT
EMAIL wyhsillypig@163。 100
…………………………………………………………Page 101……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
PAYEE AMOUNT REMARKS
Local Utilities 98 Gas
Joes Stale Dent 150 Groceries
Cash 25 Wild Night Out
Joans Gas 25。1 Gas
Cash 60 Trip to Boston
Cash 34 Trip to Dayton
Joans Gas 15。75 Gas
警告 STARTIN WITH 为许多 SQL 解释器所支持 在你喜欢上它之前请先检查你
的 SQL 解释器是否支持它
ORDER BY 子句
在有些时候你可能会希望查询输出的结果按一定的排序规则来显示 可是 正如你所
知道的 SELECT FROM 语句只会给你一个列表 除非你已经定义了关键字 见第 10 天
创建视图和索引 否则你查询的结果是依据它们在输入时的次序排列的 请看下表
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
9 Abes Cleaners 24。35 X…Tra Starch
20 Abes Cleaners 10。5 All Dry Clean
8 Cash 60 Trip to Boston
21 Cash 34 Trip to Dayton
分析
请相信我 数据输出的情况的确是按照它们被输入的先后次序排序的 在第 8 天的 数
据操作 中我们将知道如何使用 INSERT 来创建一个新的表 那时你就可以试一下 看看
EMAIL wyhsillypig@163。 101
…………………………………………………………Page 102……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
数据是不是如你所猜想的那样来排序
ORDER BY 子句为你提供了对输出的结果进行排序的方法 例如 将记录按 CHECKS
号进行排序 语句如下
INPUT
SQL》SELECT * FROM CHECKS ORDER BY CHECK#
OUTPUT
CHECK# PAYEE AMOUNT REMARKS
1 MaBell 150 Have next sonstime
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
8 Cash 60 Trip to Boston
9 Abes Claeners 24。35 X…Tra Starch
16 Cash 25 Wild Night Out
17 Joans Ga