楼主: newkid

SQL 小测验每周一题

[复制链接]
论坛徽章:
520
奥运会纪念徽章:垒球
日期: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
131#
 楼主| 发表于 2011-12-6 04:03 | 只看该作者
本帖最后由 newkid 于 2011-12-13 00:49 编辑

2011-11-26 答案A.
B:用了TO_CHAR函数,只有当使用函数索引才可能用上。
C:扫描范围太大,此时不如全表扫描。
D:hire_date变成表达式的一部分,ORACLE没法使用索引。

===================
2011-12-03 外键约束

作者:Steven Feuerstein
难度:低

我的SCHEMA中有两张表:

I have two tables in my schema:
CREATE TABLE plch_departments
(
   department_id     INTEGER PRIMARY KEY NOT NULL
, department_name   VARCHAR2 (100)
)
/

CREATE TABLE plch_employees
(
   employee_id     INTEGER PRIMARY KEY NOT NULL
, last_name       VARCHAR2 (100)
, salary          NUMBER
, department_id   INTEGER
)
/

哪些选项实现了如下需求:
1. plch_employees表中每一行的department_id列的值,必须能对应到plch_departments中某一行的department_id列。
2. 如果我从plch_departments表删除一行,所有plch_employees表中具有同样department_id值的行也必须被删除。

(A)
CREATE OR REPLACE TRIGGER plch_departments_adr
   AFTER DELETE
   ON plch_departments
   FOR EACH ROW
BEGIN
   DELETE FROM plch_employees
         WHERE department_id = :old.department_id;
END plch_departments_adr;
/

CREATE OR REPLACE TRIGGER plch_employees_biur
   BEFORE INSERT OR UPDATE
   ON plch_employees
   FOR EACH ROW
DECLARE
   l_dummy   CHAR (1);
BEGIN
   SELECT 'x'
     INTO l_dummy
     FROM plch_departments
    WHERE department_id = :new.department_id
      FOR UPDATE;
EXCEPTION
   WHEN NO_DATA_FOUND
   THEN
      raise_application_error (
         -20000
       ,  'No department defined for ID ' || :new.department_id);
END plch_employees_biur;
/

(B)
ALTER TABLE plch_employees ADD (
  CONSTRAINT fk_plch_employees
  FOREIGN KEY (department_id)
  REFERENCES plch_departments (department_id)
)
/

(C)
ALTER TABLE plch_employees ADD (
  CONSTRAINT fk_plch_employees
  FOREIGN KEY (department_id)
  REFERENCES plch_departments (department_id)
  ON DELETE CASCADE
)
/

(D)
ALTER TABLE plch_departments ADD (
  CONSTRAINT fk_plch_departments
  FOREIGN KEY (department_id)
  REFERENCES plch_employees (department_id)
  ON DELETE CASCADE
)
/

使用道具 举报

回复
论坛徽章:
27
ITPUB官方微博粉丝徽章
日期:2011-08-17 10:35:36托尼托尼·乔巴
日期:2017-10-25 16:45:57秀才
日期:2017-04-05 13:18:06秀才
日期:2017-03-02 10:35:322016猴年福章
日期:2016-02-23 09:58:342016猴年福章
日期:2016-02-18 09:31:302015年新春福章
日期:2015-03-06 11:57:312014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:07:31
132#
发表于 2011-12-6 14:35 | 只看该作者
D

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期: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
133#
 楼主| 发表于 2011-12-13 00:55 | 只看该作者
2011-12-03 答案AC。A用触发器是个笨办法不值得推荐。
B:不满足自动删除子表的需求。
D:父子方向搞反了。

=================================================
2011-12-10 RANGE和ROWS窗口

作者:Patrick Barel
难度:高

我创建了如下的表并填入数据:
CREATE TABLE plch_emp
(
   ename    VARCHAR2 (10)
, sal      NUMBER (7, 2)
, deptno   NUMBER (2)
)
/

INSERT INTO plch_emp VALUES ('MILLER', 1300, 10);
INSERT INTO plch_emp VALUES ('CLARK',  2450, 10);
INSERT INTO plch_emp VALUES ('KING',   5000, 10);
INSERT INTO plch_emp VALUES ('SMITH',   800, 20);
INSERT INTO plch_emp VALUES ('ADAMS',  1100, 20);
INSERT INTO plch_emp VALUES ('JONES',  2975, 20);
INSERT INTO plch_emp VALUES ('FORD',   3000, 20);
INSERT INTO plch_emp VALUES ('SCOTT',  3000, 20);
COMMIT;

哪些选项会显示当前部门按工资排序后的逐行小计,在执行后你会看到如下输出:
       DEPTNO ENAME      RUNNING_TOTAL
------------- ---------- -------------
           10 MILLER              1300
           10 CLARK               3750
           10 KING                8750
           20 SMITH                800
           20 ADAMS               1900
           20 JONES               4875
           20 FORD                7875
           20 SCOTT              10875

或者:
       DEPTNO ENAME      RUNNING_TOTAL
------------- ---------- -------------
           10 MILLER              1300
           10 CLARK               3750
           10 KING                8750
           20 SMITH                800
           20 ADAMS               1900
           20 JONES               4875
           20 SCOTT               7875
           20 FORD               10875
           
(A)
  SELECT    deptno
          , ename
          , SUM (sal)
               OVER
                ( PARTITION BY deptno
                  ORDER BY sal
                  ROWS BETWEEN UNBOUNDED PRECEDING
                       AND     UNBOUNDED FOLLOWING
                ) as running_total
    FROM plch_emp
ORDER BY deptno, running_total

(B)
  SELECT    deptno
          , ename
          , SUM (sal)
               OVER
                ( PARTITION BY deptno
                  ORDER BY sal
                  ROWS BETWEEN UNBOUNDED PRECEDING
                       AND     CURRENT   ROW
                ) as running_total
    FROM plch_emp
ORDER BY deptno, running_total
/

(C)
  SELECT    deptno
          , ename
          , SUM (sal)
               OVER
                ( PARTITION BY deptno
                  ORDER BY sal
                ) as running_total
    FROM plch_emp
ORDER BY deptno, running_total

(D)
  SELECT    deptno
          , ename
          , SUM (sal)
               OVER
                ( PARTITION BY deptno
                  ORDER BY sal
                  ROWS BETWEEN CURRENT   ROW
                       AND     UNBOUNDED FOLLOWING
                ) as running_total
    FROM plch_emp
ORDER BY deptno, running_total

使用道具 举报

回复
论坛徽章:
27
ITPUB官方微博粉丝徽章
日期:2011-08-17 10:35:36托尼托尼·乔巴
日期:2017-10-25 16:45:57秀才
日期:2017-04-05 13:18:06秀才
日期:2017-03-02 10:35:322016猴年福章
日期:2016-02-23 09:58:342016猴年福章
日期:2016-02-18 09:31:302015年新春福章
日期:2015-03-06 11:57:312014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:07:31
134#
发表于 2011-12-13 08:08 | 只看该作者
猜个AD
RANGE和ROWS一直没用过,总忘

使用道具 举报

回复
论坛徽章:
27
ITPUB官方微博粉丝徽章
日期:2011-08-17 10:35:36托尼托尼·乔巴
日期:2017-10-25 16:45:57秀才
日期:2017-04-05 13:18:06秀才
日期:2017-03-02 10:35:322016猴年福章
日期:2016-02-23 09:58:342016猴年福章
日期:2016-02-18 09:31:302015年新春福章
日期:2015-03-06 11:57:312014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:07:31
135#
发表于 2011-12-13 08:11 | 只看该作者
本帖最后由 gyhgood 于 2011-12-13 08:12 编辑

我中奖了,泪流满面啊
三个错误答案我选上俩
我这就去买注大乐透去

使用道具 举报

回复
论坛徽章:
10000
绿钻
日期:2016-02-22 15:43:08绿钻
日期:2016-03-01 18:19:01绿钻
日期:2016-02-22 15:43:08绿钻
日期:2016-03-01 18:19:01绿钻
日期:2015-12-16 18:42:35绿钻
日期:2015-12-11 00:18:01绿钻
日期:2015-09-10 13:05:08绿钻
日期:2015-12-11 00:18:01绿钻
日期:2015-09-10 13:05:08绿钻
日期:2015-09-10 13:05:08
136#
发表于 2011-12-13 08:33 | 只看该作者
BC

使用道具 举报

回复
论坛徽章:
142
秀才
日期:2016-01-06 14:01:09秀才
日期:2016-02-18 10:06:46秀才
日期:2016-02-18 10:08:02秀才
日期:2016-02-18 10:08:14秀才
日期:2016-03-01 09:57:08天蝎座
日期:2016-03-18 14:23:56秀才
日期:2016-03-24 09:10:24秀才
日期:2016-03-24 09:20:52秀才
日期:2016-04-21 14:08:53秀才
日期:2016-04-21 14:11:59
137#
发表于 2011-12-13 10:31 | 只看该作者
哎,还是选"B"。
自己做滴和C一样,然后发现‘FORD'和'SCOTT'一样鸟。

使用道具 举报

回复
论坛徽章:
5
2010广州亚运会纪念徽章:跆拳道
日期:2010-11-11 21:47:462010广州亚运会纪念徽章:摔跤
日期:2010-11-11 21:48:06SQL大赛参与纪念
日期:2011-04-13 12:08:17咸鸭蛋
日期:2011-06-02 12:28:03ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:20
138#
发表于 2011-12-15 23:12 | 只看该作者
ROWS不常用,看了就忘,一开始还以为是C,跟visual2006 的发现一样,看来还是要多多学习分析函数

使用道具 举报

回复
论坛徽章:
14
兰博基尼
日期:2013-12-09 18:17:40生肖徽章:猪
日期:2013-12-06 14:15:45生肖徽章:狗
日期:2013-12-06 14:15:45生肖徽章:鸡
日期:2013-12-06 14:15:45生肖徽章:猴
日期:2013-12-06 14:15:45生肖徽章:羊
日期:2013-12-06 14:15:45生肖徽章:马
日期:2013-12-06 14:15:45生肖徽章:蛇
日期:2013-12-06 14:15:45生肖徽章:龙
日期:2013-12-06 14:15:45生肖徽章:鼠
日期:2013-12-06 14:15:45
139#
发表于 2011-12-16 03:11 | 只看该作者
B.

( PARTITION BY deptno      -- 按部门分组
      ORDER BY sal               -- 按工资排序
       ROWS BETWEEN UNBOUNDED PRECEDING     -- 行范围从第一行开始
            AND     CURRENT   ROW                             -- 截止于当前行
)

Oracle的Analytic Functions非常powerful,其中window功能功不可没。大家有时间可以好好研究。

JC

使用道具 举报

回复
论坛徽章:
10000
绿钻
日期:2016-02-22 15:43:08绿钻
日期:2016-03-01 18:19:01绿钻
日期:2016-02-22 15:43:08绿钻
日期:2016-03-01 18:19:01绿钻
日期:2015-12-16 18:42:35绿钻
日期:2015-12-11 00:18:01绿钻
日期:2015-09-10 13:05:08绿钻
日期:2015-12-11 00:18:01绿钻
日期:2015-09-10 13:05:08绿钻
日期:2015-09-10 13:05:08
140#
发表于 2011-12-16 08:45 | 只看该作者
jazovo 发表于 2011-12-16 03:11
B.

( PARTITION BY deptno      -- 按部门分组

大师,有时间跟newkid大师一样多来这个版块给俺们菜鸟指点指点啊

使用道具 举报

回复

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

本版积分规则 发表回复

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