SQL 21日自学通(V3.0)(PDF格式)-第14部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
TOMATOES 。34 。49
POTATOES 。51 。66
BANANAS 。67 。82
TURNIPS 。45 。60
CHEESE 。89 1。04
APPLES 。23 。38
分析
真棒 你不但可以创建一个新列 而且还可以对它安自己的需要进行重命名 你可以按语
法列名 别名来对任何一个列进行重命名 注意在列名与别名之间有空格
例如 输入
SQL》 SELECT ITEM PRODUCE WHOLESALE WHOLESALE 0。25 RETAIL
FROM PRICE
重命名的列如下
PRODUCE WHOLESALE RETAIL
EMAIL wyhsillypig@163。 44
…………………………………………………………Page 45……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
TOMATOES 。34 。49
POTATOES 。51 。66
BANANAS 。67 。82
TURNIPS 。45 。60
CHEESE 。89 1。04
APPLES 。23 。38
注 一些 SQL 解释器使用的语法为 列名 = 别名 所以前一个例子要写成如下格式
SQL》 SELECT ITEM PRODUCE
WHOLESALE
WHOLESALE 0。25 RETAIL
FROM PRICE
请检查你的 SQL 解释器以确认它采用哪一种语法
你大概想知道当不在命令行状态时应如何使用别名吧 很清楚 你知道报表生成器是如何
工作的吗 总有一天 当有人让你写一个报表的生成器时 你就会记住它而且不用却重复
Dr Codd 和 IBM 已经做过的工作
到现在为止 你已经看到了两种加号的用法 第一种用法是在 SELECT 子句中使用+号以
执行对数据的运算并将结果显示出来 第二种用法是在 WHERE 子句中使用加号 在WHERE
中使用操作符可以在当你对数据有特定条件时具有更大的灵活性
在一些解释器中 加号还同时肩负着进行字符运算的责任 在稍后的几天中你将会看到这
一点
减法 —
减号也有两种用途 第一种用途是作为负号使用 你可以使用 HILOW 表来验证这项功能
SQL》 SELECT * FROM HILOW
输出
STATE HIGHTEMP LOWTEMP
CA …50 120
FL 20 110
LA 15 99
ND …70 101
NE …60 100
例如 这里对数据进行这样的运算
SQL》 SELECT STATE HIGHTEMP LOWS LOWTEMP HIGHS FROM HILOW
STATE LOWS HIGHS
CA 50 …120
FL …20 …110
LA …15 …99
ND 70 …101
NE 60 …100
第二种用法 很明显 是作为减号从某一列中减去另一列 例如
SQL》 SELECT STATE
HIGHTEMP LOWS
LOWTEMP HIGHS
(LOWTEMP HIGHTEMP) DIFFERENCE
FROM HILOW
STATE LOWS HIGHS DIFFERENCE
CA …50 120 170
FL 20 110 90
EMAIL wyhsillypig@163。 45
…………………………………………………………Page 46……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
LA 15 99 84
ND …70 101 171
NE …60 100 160
注意这里使用了别名来对输入的错误进行更正 这只不过是一种暂时的补救方法 虽然这
不是永久的解决办法 你是以后 第 21 天 常见的 SQL 错误及其解决方案 会看到如何
对数据以及输入进行更正 在那里你将学会如何对错误的数据进行更正
该查询不只是修正 至少看起来是这样 错误的数据 而且还创建了一个新列以获得每个
记录的最高与最低的差价
如何你在一个字符型字段中意外地使用了减号 你将会看到如下信息
SQL》 SELECT STATE FROM HILOW
ERROR ORA…01722 invalid number
No rows selected
在不同的解释器中错误的号码可能会不同 但是结果是相同的
除法
除法只有一种显而易见的应用 在 PRICE 表中它的应用如下
输入
SQL》 SELECT * FROM PRICE
输出:
ITEM WHOLESALE
TOMATOES 。34
POTATOES 。51
BANANAS 。67
TURNIPS 。45
CHEESE 。89
APPLES 。23
rows selected。
在下边的例句中你可以成功地将销售价折半
输入/输出
SQL》 SELECT ITEM WHOLESALE (WHOLESALE/2) SALEPRICE 2 FROM PRICE
ITEM WHOLESALE SALEPRICE
TOMATOES 。34 。170
POTATOES 。51 。255
BANANAS 。67 。335
TURNIPS 。45 。225
CHEESE 。89 。445
APPLES 。23 。115
6 rows selected。
在这个 SELECT 语句中除法的作用是显而易见的 只不过将商品半价销售有点太难以理解
了
乘法 *
乘法的运算也非常直观 再以 Price 表为例
输入
SQL》 SELECT * FROM PRICE
输出
ITEM WHOLESALE
TOMATOES 。34
POTATOES 。51
BANANAS 。67
EMAIL wyhsillypig@163。 46
…………………………………………………………Page 47……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
TURNIPS 。45
CHEESE 。89
APPLES 。23
6 rows selected。
将表中的价格下调 10%可以用如下方法来实现
输入/输出:
SQL》SELECT ITEM WHOLESALE WHOLESALE * 0。9 NEWPRICE
FROM PRICE
ITEM WHOLESALE NEWPRICE
TOMATOES 。34 。306
POTATOES 。51 。459
BANANAS 。67 。603
TURNIPS 。45 。405
CHEESE 。89 。801
APPLES 。23 。207
6 rows selected。
通过这些操作您可以在 SELECT 语句中进行复杂的运算
取模 %
取模运算将返回一个除法的余数部分 以REMAINS 表举例如下
输入
SQL》 SELECT * FROM REMAINS
输出
NUMERATOR DENOMINATOR
10 5
8 3
23 9
40 17
1024 16
85 34
6 rows selected。
你也可以用 NUMERATOR % DENOMINATOR 的结果来建立一个新列
输入/输出
SQL》 SELECT NUMERATOR DENOMINATOR NUMERATOR%DENOMINATOR
REMAINDER FROM REMAINS
NUMERATOR DENOMINATOR REMAINDER
10 5 0
8 3 2
23 9 5
40 17 6
1024 16 0
85 34 17
6 rows selected。
在一些 SQL 解释器中取模运算符为 MOD 见第 4 天 函数— — 返回数据的再加工 下边
的语句所得到的结果与上边的语句相同
SQL》 SELECT NUMERATOR DENOMINATOR MOD NUMERATOR DENOMINATOR
REMAINDER FROM REMAINS
优先级别
在这一部分的例子中主要讲述在 SELECT 语句中的优先级别 数据库 PRECEDENCE 的内
容如下
EMAIL wyhsillypig@163。 47
…………………………………………………………Page 48……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
SQL》 SELECT * FROM PRECEDENCE
N1 N2 N3 N4
1 2 3 4
13 24 35 46
9 3 23 5
63 2 45 3
7 2 1 4
用 PRECEDENCE 来做如下例子
输入/输出
SQL》 SELECT
2 N1+N2*N3/N4
3 (N1+N2)*N3/N4
4 N1+(N2*N3)/N4
5 FROM PRECEDENCE
N1+N2*N3/N4 (N1+N2)*N3/N4 N1+(N2*N3)/N4
2。5 2。25 2。5
31。26 28。15 31。26
22。8 55。2 22。8
93 975 93
7。5 2。25 7。5
看到了吗 第一例与最后一例的结果是相同的 如果你把第四列改写成为 N1+N2*
(N3/N4) 那么其结果与上边的例子是相同的
比较运算
顾名思义 比较运算就是将两个表达式进行比较并返回三个数值中的一个
True;False;Unknow;请等一下 Unknow True 和 False 的意义无需说明 但是什么是 Unknow
呢
为了便于理解什么是 Unknow 你需要理解一下什么是 NULL 在数据库领域内 NULL
的意义就是在一个字段之中没有数据 这与在该字段中数据为零或为空的不是同一个概念
为零或为空是一种特殊的数值 而 NULL 则表示在这个字段之中什么也没有 如果你想进
行 Field=9 的比较而 Field 字段是空的 那么比较的结果就会返回 Unknow 由于 Unknow
是一种不正常的状态 所以大多数 SQL 都会置其为无效并提供一种叫 IS NULL 的操作来
测试 Null 的存在
输入
SQL》 SELECT * FROM PRICE
输出
ITEM WHOLESALE
TOMATOES 。34
POTATOES 。51
BANANAS 。67
TURNIPS 。45
CHEESE 。89
APPLES 。23
ORANGES
请注意 WHOLESALE 字段在 ORANGES 处没有输出 这说明在这里的数值是空的 由于
这里的 WHOLESALE 字段的属性为数字 所以空值在这里是显而易见的 但是如果空值
是出现在 ITEM 列中 那么要将空值与空白值区分开来就是非常重要的了
请试着找一下空值
输入/输出:
EMAIL wyhsillypig@163。 48
…………………………………………………………Page 49……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
SQL》 SELECT * FROM PRICE WHERE WHOLESALE IS NULL
ITEM WHOLESALE
ORANGES
如你所见到的 WHOLESALE 字段中的 ORANGES 是唯一的一个空值 因为它是不可见
的 可是当你使用 = 这个比较运算符时会有什么结果呢
输入/输出:
SQL》 SELECT * FROM PRICE WHERE WHOLESALE = NULL
No rows selected
分析
你没有得到任何记录因为比较运算在这里返回的结果为 FALSE 所以使用 WHERE
SWHLESALE IS NULL 在这里比使用=更恰当 它将会返回所有存在