萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> sql server教程 >> 一道褒貶不一的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 字段值最小的那一條留下,並選出其它的刪掉,如果只有一條,自然也不會被選
  中了。這裡還要強調一下,大家一定要分清楚被操

copyright © 萬盛學電腦網 all rights reserved