《SQL 21日自学通(V3.0)(PDF格式)》第24章


(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 所在列的 
列宽大于它们自身的名字 所以它们不会被截去 
分析 
请?
小说推荐
返回首页返回目录