您的位置:首页 > 数据库

SQL表达式,条件语句与运算

2017-04-17 14:37 274 查看
UNION 与UNION ALL

UNION 将返回两个查询的结果并去除其中的重复部分下边有两个值勤人员表

输入:

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

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

FALCONER

从属运算IN and BETWEEN

这两个运算符对你已经做过的例子提供了更快捷的操作如果你想找一个你在Colorado,

California,和Louisiana 的朋友可以输入

输入:

SQL> SELECT * FROM FRIENDS WHERE STATE= 'CA' OR STATE ='CO' OR STATE =

'LA'

输出

LASTNAME FIRSTNAME AREACODE PHONE ST ZIP

MERRICK BUD 300 555-6666 CO 80212

MAST JD 381 555-6767 LA 23456

PERKINS ALTON 911 555-3116 CA 95633

也可以输入

输入/输出:

SQL> SELECT * FROM FRIENDS WHERE STATE IN('CA','CO','LA')

LASTNAME FIRSTNAME AREACODE PHONE ST ZIP

MERRICK BUD 300 555-6666 CO 80212

MAST JD 381 555-6767 LA 23456

PERKINS ALTON 911 555-3116 CA 95633

分析

第二个实例比第一个更易读和简捷我想你一会再用以前的方法来工作了吧在IN 中也

可以使用数字例如

输入/输出:

SQL> SELECT *

2 FROM FRIENDS

3 WHERE AREACODE IN(100,381,204)

LASTNAME FIRSTNAME AREACODE PHONE ST ZIP

BUNDY AL 100 555-1111 IL 22333

MAST JD 381 555-6767 LA 23456

BOSS SIR 204 555-2345 CT 95633

如果你想要查找符合某一范围的记录例如

输入/输出:

SQL> SELECT * FROM PRICE WHERE WHOLESALE 0.25 AND WHOLESALE

0.75

ITEM WHOLESALE

TOMATOES .34

POTATOES .51

BANANAS .67

TURNIPS .45

或使用BEWTEEN 你可以这样写

输入/输出:

SQL>SELECT * FROM PRICE WHERE WHOLESALE BETWEEN 0.25 AND 0.75

ITEM WHOLESALE

TOMATOES .34

POTATOES .51

BANANAS .67

TURNIPS .45

看第二个是不是比第一个更清楚和易读

注如果批发价为0.25 的商品在表中存在那么它们也将会被返回BETWEEN 操作将包

括边界值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: