• 当前位置:首页>>MSSQL教程>>Sql2000综合技巧>>一道褒贬不一的SQL考试题
  • 一道褒贬不一的SQL考试题
  • 《一道褒贬不一的 SQL 考试题》
    playyuer 命题,playyuer、ccat 撰稿www.iTbulo.comw4l5r

    相信有不少网友最近在网上见过一则名为《一道褒贬不一的 SQL 考试题》的帖子,这份
    试题应当说还是有很多值得思考的地方。有兴趣的读者可以在阅读本文的答案分析部分
    之前,尝试着作一下,如果你可以顺利地完成,至少说明你是一个有经验的 SQL 使用者。
    下面我们先看一下题设:
    二维表 T(F1,F2,F3,F4,F5,F6,F7) 表示如下关系:
    ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
    │  学生ID  │ 学生姓名 │  课程ID  │ 课程名称 │   成绩   │  教师ID  │ 教师姓名 │
    ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
    │    S3    │   王五   │    K4    │   政治   │    53    │    T4    │  赵老师  │
    ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
    │    S1    │   张三   │    K1    │   数学   │    61    │    T1    │  张老师  │
    ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
    │    S2    │   李四   │    K3    │   英语   │    88    │    T3    │  李老师  │
    ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
    │    S1    │   张三   │    K4    │   政治   │    77    │    T4    │  赵老师  │
    ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
    │    S2    │   李四   │    K4    │   政治   │    67    │    T5    │  周老师  │
    ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
    │    S3    │   王五   │    K2    │   语文   │    90    │    T2    │  王老师  │
    ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
    │    S3    │   王五   │    K1    │   数学   │    55    │    T1    │  张老师  │
    ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
    │    S1    │   张三   │    K2    │   语文   │    81    │    T2    │  王老师  │
    ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
    │    S4    │   赵六   │    K2    │   语文   │    59    │    T1    │  王老师  │
    ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
    │    S1    │   张三   │    K3    │   英语   │    37    │    T3    │  李老师  │
    ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
    │    S2    │   李四   │    K1    │   数学   │    81    │    T1    │  张老师  │
    ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
    │   ....   │          │          │          │          │          │          │
    ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
    │   ....   │          │          │          │          │          │          │
    └──────────┴──────────┴──────────┴──────────┴──────────┴──────────┴──────────┘
    为便于大家更好的理解,我们将 T 表起名为"成绩表"www.iTbulo.comw4l5r

    1.如果 T 表还有一字段 F 数据类型为自动增量整型(唯一,不会重复),
      而且 T 表中含有除 F 字段外,请删除其它字段完全相同的重复多余的脏记录数据:www.iTbulo.comw4l5r

      本问题就是一个清理"逻辑重复"记录的问题,当然,这种情况完全可以利用主键约束来
      杜绝!然而,现实情况经常是原始数据在"洗涤"后,方可安全使用,而且逻辑主键过早的
      约束,将会给采集原始数据带来不便,例如:从刷卡机上读取考勤记录。到了应用数据
      的时候,脏数据就该被扫地出门了! 之所以题中要保留一个自动标识列,是因为它的确
      是下面答案所必须的前提:www.iTbulo.comw4l5r

      DELETE L
        FROM "成绩表" L
             JOIN "成绩表" R
                           ON L."学生ID" = R."学生ID" AND L."课程ID" = R."课程ID" AND L.F > R.Fwww.iTbulo.comw4l5r

      这是思路最精巧且最直接有效的方法之一。用不等自联接,正好可以将同一组重复数
      据中 F 字段值最小的那一条留下,并选出其它的删掉,如果只有一条,自然也不会被选
      中了。这里还要强调一下,大家一定要分清楚被操作的基本表也就是 DELETE 关键字
      后的表和过滤条件所使用的由

  • 上一篇:利用数据库复制技术实现数据同步更新
    下一篇:用SQL批量插入数据