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


输入/输出 
SQL》 SELECT LASTNAME WORKAHOLICS 
2 FROM VACATION 
3 WHERE YEARS 》= 5 
4 AND 
5 ((YEARS *12)…LEAVETAKEN)/(YEARS * 12) 《 0。50 
WORKAHOLICS 
BAKER 
BLEDSOE 
给这些人放假吧 也让我们结束对 AND 的学习 
OR 
你也可以使用 OR 来对几个条件进行合并 当其中的任一个条件为真时 其结果就会为真 
值 为了展示它与 AND 的不同 下面我们用 OR 来换掉上一个例子中的 AND 
输入: 
SQL》 SELECT LASTNAME WORKAHOLICS 
2 FROM VACATION 
3 WHERE YEARS 》= 5 
4 OR 
5 ((YEARS *12)…LEAVETAKEN)/(YEARS * 12) 》= 0。50 
输出: 
EMAIL wyhsillypig@163。 55 
…………………………………………………………Page 56……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
WORKAHOLICS 
ABLE 
BAKER 
BLEDSOE 
BOLD 
COSTALES 
分析 
上例中的结果仍然在其中 但是我们又多个几个记录 这几个记录出现的原因是它们满足 
我们所提出的条件中的一个 OR 只要记录满足其中的一个条件就会把记录返回 
NOT 
顾名思义 它对条件取反 条件为假时结果为真 条件为真时结果为假 
下边的 SELECT 子句将返回所有开头的名字不是 B 的员工 
输入 
SQL》 SELECT * 
2 FROM VACATION 
3 WHERE LASTNAME NOT LIKE "B%" 
输出: 
LASTNAME EMPLOYEENUM YEARS LEAVETAKEN 
ABLE 101 2 4 
COSTALES 211 10 78 
当 NOT 应用于NULL 时可以使用操作符 IS 让我们再来看一下 PRICES 表中WHOLESALE 
列 ORANGES 记录中的空值 
输入/输出: 
SQL》 SELECT * FROM PRICE 
ITEM WHOLESALE 
TOMATOES 。34 
POTATOES 。51 
BANANAS 。67 
TURNIPS 。45 
CHEESE 。89 
APPLES 。23 
ORANGES 
7 rows selected。 
想找出所有的非空项 可以写出如下语句 
输入/输出: 
SQL》SELECT * FROM PRICE WHERE WHOLESALE IS NOT NULL 
ITEM WHOLESALE 
TOMATOES 。34 
POTATOES 。51 
BANANAS 。67 
TURNIPS 。45 
CHEESE 。89 
APPLES 。23 
6 rows selected。 
集合运算 SET 
在第一天 介绍 SQL 中我们已经知道了 SQL 是基于集合的理论的 下面这一部分将讨论 
集合运算 
UNION 与 UNION ALL 
UNION 将返回两个查询的结果并去除其中的重复部分 下边有两个值勤人员表 
EMAIL wyhsillypig@163。 56 
…………………………………………………………Page 57……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
输入: 
SQL》 SELECT * FROM FOOTBALL 
输出: 
NAME 
ABLE 
BRAVO 
CHARLIE 
DECON 
EXITOR 
FUBAR 
GOOBER 
7 rows selected。 
输入: 
SQL》 SELECT * FROM SOFTBALL 
输出: 
NAME 
ABLE 
BAKER 
CHARLIE 
DEAN 
EXITOR 
FALCONER 
GOOBER 
7 rows selected。 
在这两个表中有哪些不重复的人员呢 
输入/输出: 
SQL》 SELECT NAME FROM SOFTBALL 
2 UNION 
3 SELECT NAME FROM FOOTBALL 
NAME 
ABLE 
BAKER 
BRAVO 
CHARLIE 
DEAN 
DECON 
EXITOR 
FALCONER 
FUBAR 
GOOBER 
10 rows selected。 
UNION 返回了两个表中的 10 个记录 它们是不重复的 但是两个表中共有多少人呢 包 
括重复的人员 
输入/输出: 
SQL》 SELECT NAME FROM SOFTBALL 
2 UNION ALL 
3 SELECT NAME FROM FOOTBALL 
NAME 
ABLE 
EMAIL wyhsillypig@163。 57 
…………………………………………………………Page 58……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
BAKER 
CHARLIE 
DEAN 
EXITOR 
FALCONER 
GOOBER 
ABLE 
BRAVO 
CHARLIE 
DECON 
EXITOR 
FUBAR 
GOOBER 
14 rows selected。 
分析 
可以看到 UNION ALL 与 UNION 一样对表进行了合并 但是它不去掉重复的记录 可是 
如果我们想知道都有谁同时在两个表中呢 UNION 无法做到这一点 我们需要学习使用 
INTERSECT 
INTERSECT 相交 
INTERSECT 返回两个表中共有的行 看下例 它将返回两个表中有存在的员工 
输入: 
SQL》 SELECT * FROM FOOTBALL 
2 INTERSECT 
3 SELECT * FROM SOFTBALL 
输出 
NAME 
ABLE 
CHARLIE 
EXITOR 
GOOBER 
分析 
这些记录是两个表中都存在的 
MINUS 相减 
MINUS 返回的记录是存在于第一个表中但不存在于第二个表中的记录 例如 
输入: 
SQL》 SELECT * FROM FOOTBALL MINUS SELECT * FROM SOFTBALL 
输出 
NAME 
BRAVO 
DECON 
FUBAR 
上例中显示了三个不在垒球队中的足球队员 如果你把语句的次序颠倒 那么你将得到在 
垒球队中但不在足球队中的队员 
输入: 
SQL》 SELECT * FROM SOFTBALL MINUS SELECT * FROM FOOTBALL 
输出 
NAME 
BAKER 
DEAN 
EMAIL wyhsillypig@163。 58 
…………………………………………………………Page 59……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
FALCONER 
从属运算 IN and BETWEEN 
这两个运算符对你已经做过的例子提供了更快捷的操作 如果你想找一个你在 Colorado; 
California;和 Louisiana 的朋友 可以输入 
输入: 
SQL》 SELECT * FROM FRIENDS WHERE STATE= "CA" OR STATE ="CO" OR STATE = 
"LA" 
输出 
小说推荐
返回首页返回目录