查看: 2047|回复: 4

[每日一题] PL/SQL Challenge 每日一题:2018-7-9 ALL, ANY 和 SOME 比较条件

[复制链接]
论坛徽章:
532
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2018-7-12 08:55 | 显示全部楼层 |阅读模式
(原发表于 2011-10-7)

最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。

每两周的优胜者可获得itpub奖励的技术图书一本。

以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808

原始出处:
http://www.plsqlchallenge.com/

作者: Tim Hall

运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品

下列代码创建了 plch_emp表及其数据:

CREATE TABLE plch_emp (
    empno     NUMBER(4,0),
    ename     VARCHAR2(10 BYTE),
    sal       NUMBER(7,2),
    deptno    NUMBER(2,0)
)
/

BEGIN
    INSERT INTO plch_emp VALUES (7369,'SMITH',  800,20);
    INSERT INTO plch_emp VALUES (7900,'JAMES',  950,30);
    INSERT INTO plch_emp VALUES (7876,'ADAMS', 1100,20);
    INSERT INTO plch_emp VALUES (7521,'WARD',  1250,30);
    INSERT INTO plch_emp VALUES (7654,'MARTIN',1250,30);
    INSERT INTO plch_emp VALUES (7844,'TURNER',1500,30);
    INSERT INTO plch_emp VALUES (7934,'MILLER',1300,10);
    INSERT INTO plch_emp VALUES (7499,'ALLEN', 1600,30);
    INSERT INTO plch_emp VALUES (7782,'CLARK', 2450,10);
    INSERT INTO plch_emp VALUES (7698,'BLAKE', 2850,30);
    INSERT INTO plch_emp VALUES (7566,'JONES', 2975,20);
    INSERT INTO plch_emp VALUES (7902,'FORD',  3000,20);
    INSERT INTO plch_emp VALUES (7788,'SCOTT', 3000,20);
    INSERT INTO plch_emp VALUES (7839,'KING',  5000,10);
    COMMIT;
END;
/

下列哪些返回的仅仅是ename 为"KING"的员工信息?


(A)
SELECT empno, ename, sal
FROM   plch_emp
WHERE  sal > ALL (2000, 3000, 4000);


(B)
SELECT e1.empno, e1.ename, e1.sal
FROM   plch_emp e1
WHERE  e1.sal > ALL (SELECT e2.sal
                     FROM   plch_emp e2
                     WHERE  e2.deptno = 20);

(C)
SELECT empno, ename, sal
FROM   plch_emp
WHERE  sal > ANY (2000, 3000, 4000);

(D)
SELECT empno, ename, sal
FROM   plch_emp
WHERE  sal > SOME (3000, 4000, 5000);


(E)
SELECT empno, ename, sal
FROM   plch_emp
WHERE  sal > 2000 OR sal > 3000 OR sal > 4000;

论坛徽章:
348
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:22海蓝宝石
日期:2012-02-20 19:24:27铁扇公主
日期:2012-02-21 15:03:13
发表于 2018-7-12 09:19 | 显示全部楼层
应该是ABD
A: ALL是大于所有的,只有king 的 5000
B: 20部门的最大3000,大约3000的也只有king
C: 大于2000/3000/4000 任何之一即可,所以结果应该很多行
D: 大于3000的只有5000(some 应该指其中一部分可以)
E: or 和C的意义相同

使用道具 举报

回复
认证徽章
论坛徽章:
47
秀才
日期:2018-11-13 15:18:40秀才
日期:2018-08-31 10:54:12秀才
日期:2018-08-31 10:53:55技术图书徽章
日期:2018-08-31 10:48:56秀才
日期:2018-08-31 10:48:48秀才
日期:2018-08-31 10:48:48秀才
日期:2018-08-31 10:48:48秀才
日期:2018-08-31 10:48:34秀才
日期:2018-08-31 10:37:20秀才
日期:2018-08-31 10:37:01
发表于 2018-7-12 09:50 | 显示全部楼层
ANY 和 SOME 应该是一样的吧。

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-07-01 06:00:12
发表于 2018-7-12 09:51 | 显示全部楼层
sse_zero 发表于 2018-7-12 09:50
ANY 和 SOME 应该是一样的吧。

经测试,SOME和ANY确实一模一样

使用道具 举报

回复
论坛徽章:
532
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
 楼主| 发表于 2018-7-13 07:15 | 显示全部楼层
答案ABD,2楼得奖。

A: 表达式"sal > ALL (2000, 3000, 4000)" 在逻辑上等价于 "sal > 4000"
在表中仅有一条记录的工资大于4000,就是KING

B: WHERE子句限制了查询仅仅返回工资大于部门20的所有员工工资的那些人。部门20中的最高工资是3000。工资大于3000的唯一的人是KING

C: 表达式"sal > ANY (2000, 3000, 4000)" 在逻辑上等价于 "sal > 2000"
所以会返回多行,包括KING的记录。

D: SOME和ANY比较符有着相同的行为,所以表达式"sal > SOME (3000, 4000, 5000)" 在逻辑上等价于 "sal > 3000"
工资大于3000的唯一的人是KING

E: 表达式 "sal > 2000 OR sal > 3000 OR sal > 4000" 等价于"sal > ANY (2000, 3000, 4000)", 逻辑上等价于 "sal > 2000"。
所以会返回多行,包括KING的记录。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表