友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
SQL 21日自学通(V3.0)(PDF格式)-第10部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
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 在这里比使用=更恰当 它将会返回所有存在空值的记录
这个例子也是对使用 = 进行的比较操作进行的完全展示 这之中的 WHERE 子句就不
用多说了 下面简要说一下等号
在今天的早些时候你已经看到了在一些 SQL 解释器中等号可以在 SELECT 子句中用以给
搜索字段赋以别名 而在 WHERE 子句中它则用于比较操作 并且它是从多个记录中捡选
所需要数值的一种有效手段 试一下
输入
SQL》 SELECT * FROM FRIENDS
输出
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
现在让我们来找一下 JD。MAST 的记录信息(在我们的这个表中这很容易 但是你的朋友可
能不只这些 也许像这样的记录你有成千上万)
输入/输出
SQL》 SELECT * FROM FRIENDS WHERE FIRSTNAME = 'JD'
LASTNAME FIRSTNAME AREACODE PHONE ST ZIP
MAST JD 381 555…6767 LA 23456
结果如我们所愿 再试一下
输入/输出
SQL》 SELECT * FROM FRIENDS WHERE FIRSTNAME = 'AL'
LASTNAME FIRSTNAME AREACODE PHONE ST ZIP
BUNDY AL 100 555…1111 IL 22333
MEZA AL 200 555…2222 UK
注 你应该看到在这里 = 号返回了多个记录 注意第二个记录的邮政编码 ZIP 是空
的 邮政编码是一个字符型字段 你将在第 8 天学习如何创建和组装一个表 这个特殊的
空字段表明在字符型字段中空字段与空白字段是不同的
此外还有一个关于敏感性的问题 试一下
输入/输出
SQL》 SELECT * FROM FRIENDS WHERE FIRSTNAME = BUD
FIRSTNAME
BUD
EMAIL wyhsillypig@163。 49
…………………………………………………………Page 50……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
1 row selected
再试一下
输入/输出
SQL》 select * from friends where firstname = Bud
No rows selected
分析
尽管 SQL 对大小写是不敏感的 但是数据库中的数据对大小写却是敏感的 大多数公
司在存储数据时采用大写以保证数据的一致性 所以你应该永远采用大写或小写来存储数
据 大小写的混合使用会对你精确地查找数据造成障碍
大于与大于等于
大于操作的使用方法如下
输入:
SQL》 SELECT * FROM FRIENDS WHERE AREACODE 》 300
输出
LASTNAME FIRSTNAME AREACODE PHONE ST ZIP
MAST JD 381 555…6767 LA 23456
BULHER FERRIS 345 555…3223 IL 23332
分析
这个操作将显示所有比区号比 300 大的记录 但是不包括 300 如果要包括 300 应写
成如下方式
输入/输出
SQL》 SELECT * FROM FRIENDS WHERE AREACODE》=300
LASTNAME FIRSTNAME AREACODE PHONE ST ZIP
MERRICK BUD 300 555…6666 CO 80212
MAST JD 381 555…6767 LA 23456
BULHER FERRIS 345 555…3223 IL 23332
当然 你使用 AREACODE》299 时会得到相同的结果
注 在这个语句中 300 没有使用引号 对于数字型字段是不需要加引号的
小于与小于等于
如你所料 它们的使用方法与大于和大于等于操作相同 但结果相反
输入
SQL》 SELECT * FROM FRIENDS WHERE STATE《 LA
输出
LASTNAME FIRSTNAME AREACODE PHONE ST ZIP
BUNDY AL 100 555…1111 IL 22333
MERRICK BUD 300 555…6666 CO 80212
BULHER FERRIS 345 555…3223 IL 23332
注 为什么 STATE 会变成 ST 呢 这是因为这一列只有两个字符宽 所以结果只会返回两
个字符 如果列为 COWS 那么它将会显示成 CO 而 AREACODE 和 PHONE 所在列的
列宽大于它们自身的名字 所以它们不会被截去
分析
请等一下 你现在知道《 在字符字段中的用法了吗 当然知道了 你可以在各种数据类型
中进行你想要的比较操作 结果会因数据类型的不同而不同 例如 你在下例中使用小写
字符
输入/输出
EMAIL wyhsillypig@163。 50
…………………………………………………………Page 51……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
SQL》SELECT * FROM FRIENDS WHERE STATE 《 la
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
分析
因为大写的字母代码比小写的小 所以大写的字符总是排在小写字符的前面 这里再说一
次 为了保证安全 请在执行前检查大小写情况
技巧 想知道你所进行操作的结果 那你先要检查一下你的电脑所采用的字符编码集 PC
机解释器使用的是 ASCLL 编码 而其它平台则使用 EBCDIC 编码
要想在结果中显示 Louisiana 键入
输入/输出
SQL》 SELECT * FROM FRIENDS WHERE STATE SELECT * FROM FRIENDS WHERE FIRSTNAME AL
输出
LASTNAME FIRSTNAME AREACODE PHONE ST ZIP
MERRICK BUD 300 555…6666 CO 80212
MAST JD 381 555…6767 LA 23456
BULHER FERRIS 345 555…3223 IL 23332
想找一下不在 California 住的人 可以写成
输入/输出:
SQL》 SELECT * FROM FRIENDS WHERE STATE != CA
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
注意 =和符号都表示不等于
字符操作
无论数据的输出是否为有条件输出 你都可以对其中的字符串进行操作 本部分将会讲述
两个操作符 LIKE 和|| 以及字符串连接的概念
LIKE
如果你想从数据库中选出一部分数据并把它们添到一个模板中 并且不需要非常精确的匹
配 你可以用 = 来对每一种可能的情况进行操作 但是这一过程烦琐而又耗时 这时
你可以使用 LIKE 如下例
输入
EMAIL wyhsillypig@163。 51
…………………………………………………………Page 52……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
SQL》SELECT * FROM PARTS
输出
NAME LOCATION PARTNUMBER
APPENDIX MID…STOMACH 1
ADAMSAPPLE THROAT 2
HEART CHEST 3
SPINE BACK 4
ANVIL EAR 5
KIDNEY MID…BACK 6
你怎样找出其中有 BACK 的记录呢 粗看一下这里有两个记录 可不幸的是它们有一点差
别
请试一下
输入/输出:
SQL》SELECT * FROM PARTS WHERE LOCATION LIKE %BACK%
NAME LOCATION PARTNUMBER
SPINE BACK 4
KIDNEY MID…BACK 6
你可能注意到了在这条语句的 LIKE 后边使用了% 在 LIKE 表达式中 %是一种通配符
它表示可能在 BACK 中出现的其它信息 如果你输入如下
输入
SQL》SELECT * FROM PARTS WHERE LOCATION LIKE BACK%
你将会检索到所有以 BACK 开头的 LOCATION 记录
输出
NAME LOCATION PARTNUMBER
SPINE BACK 4
如果你输入
输入
SQL》 SELECT * FROM PARTS WHERE NAME LIKE A%
你将会得到所有 NAME 中以 开头的记录
输出
NAME LOCATION PARTNUMBER
APPENDIX MID…STOMACH 1
ADAMS APPLE THROAT 2
ANVIL EAR 5
那么 LIKE 语句是否对大小写敏感呢 请看下边的例子
输入/输出:
SQL》 SELECT * FROM PARTS WHERE NAME LIKE 'a%'
no rows selected
分析
回答是敏感的 当涉及到数据是时候总是大小写敏感的
如果你想查找在某一确定的位置上有字符的数据时你应该如何去做呢 你可以使用另一个
通配符 — — 下划线
下划线 _
输入
SQL》 SELECT * FROM FRIENDS
输出
LASTNAME FIRSTNAME AREACODE PHONE ST ZIP
EMAIL wyhsillypig@163。 52
…………………………………………………………Page 53……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
BUNDY AL 100 555…1111 IL 22333
MEZA AL 200 555…2222 UK
MERRICK UD 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
如果你想查找所有以 开头的州 可以使用如下语句
输入/输出
SQL》 SELECT * FROM FRIENDS WHERE STATE
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!