50條經常使用語句(以學生表爲例)

Student(S#,Sname,Sage,Ssex) 學生表
Course(C#,Cname,T#) 課程表
SC(S#,C#,score) 成績表
Teacher(T#,Tname) 教師表數據庫

問題:c#

  --一、查詢「」課程比「」課程成績高的全部學生的學號; 
 
   SELECT a.S#  FROM ( SELECT s#,score  FROM SC  WHERE C#= '001') a, 
  ( SELECT s#,score   FROM SC  WHERE C#= '002') b  
   WHERE a.score>b.score  AND a.s#=b.s#;  
 
--二、查詢平均成績大於分的同窗的學號和平均成績; 
 
     SELECT S#, avg(score)  
     FROM sc  
     GROUP  BY S# having  avg(score) > 60;  
 
--三、查詢全部同窗的學號、姓名、選課數、總成績; 
 
   SELECT Student.S#,Student.Sname, count(SC.C#), sum(score)  
   FROM Student  left Outer JOIN SC  on Student.S#=SC.S#  
   GROUP  BY Student.S#,Sname  
 
--四、查詢姓「李」的老師的個數; 
 
   SELECT  count(distinct(Tname))  
   FROM Teacher  
   WHERE Tname  like  '李%';  
 
--五、查詢沒學過「葉平」老師課的同窗的學號、姓名; 
 
     SELECT Student.S#,Student.Sname  
     FROM Student   
     WHERE S#  not  in ( SELECT distinct( SC.S#)  FROM SC,Course,Teacher  WHERE  SC.C#=Course.C#  AND Teacher.T#=Course.T#  AND Teacher.Tname= '葉平');  
 
--六、查詢學過「」而且也學過編號「」課程的同窗的學號、姓名; 
 
   SELECT Student.S#,Student.Sname  FROM Student,SC  WHERE Student.S#=SC.S#  AND SC.C#= '001' and exists(  SELECT *  FROM SC  as SC_2  WHERE SC_2.S#=SC.S#  AND SC_2.C#= '002');  
 
--七、查詢學過「葉平」老師所教的全部課的同窗的學號、姓名; 
 
   SELECT S#,Sname  
   FROM Student  
   WHERE S#  in ( SELECT S#  FROM SC ,Course ,Teacher  WHERE SC.C#=Course.C#  AND Teacher.T#=Course.T#  AND Teacher.Tname= '葉平'  
   GROUP  BY S# having  count(SC.C#)=( SELECT  count(C#)  FROM Course,Teacher   WHERE Teacher.T#=Course.T#  AND Tname= '葉平'));  
 
--八、查詢課程編號「」的成績比課程編號「」課程低的全部同窗的學號、姓名; 
 
   SELECT S#,Sname  FROM ( SELECT Student.S#,Student.Sname,score ,( SELECT score  FROM SC SC_2  WHERE SC_2.S#=Student.S#  AND SC_2.C#= '002') score2  
   FROM Student,SC  WHERE Student.S#=SC.S#  AND C#= '001') S_2  WHERE score2 <score;  
 
--九、查詢全部課程成績小於分的同窗的學號、姓名; 
 
   SELECT S#,Sname  
   FROM Student  
   WHERE S#  not  in ( SELECT Student.S#  FROM Student,SC  WHERE S.S#=SC.S#  AND score> 60);  
 
--十、查詢沒有學全全部課的同窗的學號、姓名; 
 
     SELECT Student.S#,Student.Sname  
     FROM Student,SC  
     WHERE Student.S#=SC.S#  GROUP  BY  Student.S#,Student.Sname having  count(C#) <( SELECT  count(C#)  FROM Course);  
 
--十一、查詢至少有一門課與學號爲「」的同窗所學相同的同窗的學號和姓名; 
 
     SELECT S#,Sname  FROM Student,SC  WHERE Student.S#=SC.S#  AND C#  in  SELECT C#  FROM SC  WHERE S#= '1001';  
 
--十二、查詢至少學過學號爲「」同窗全部一門課的其餘同窗學號和姓名; 
 
     SELECT distinct SC.S#,Sname  
     FROM Student,SC  
     WHERE Student.S#=SC.S#  AND C#  in ( SELECT C#  FROM SC  WHERE S#= '001');  
 
--1三、把「SC」表中「葉平」老師教的課的成績都更改成此課程的平均成績; 
 
     update SC  set score=( SELECT  avg(SC_2.score)  
     FROM SC SC_2  
     WHERE SC_2.C#=SC.C# )  FROM Course,Teacher  WHERE Course.C#=SC.C#  AND Course.T#=Teacher.T#  AND Teacher.Tname= '葉平');  
 
--1四、查詢和「」號的同窗學習的課程徹底相同的其餘同窗學號和姓名; 
 
     SELECT S#  FROM SC  WHERE C#  in ( SELECT C#  FROM SC  WHERE S#= '1002')  
     GROUP  BY S# having  count(*)=( SELECT  count(*)  FROM SC  WHERE S#= '1002');  
 
--1五、刪除學習「葉平」老師課的SC表記錄; 
 
    Delect SC  
     FROM course ,Teacher   
     WHERE Course.C#=SC.C#  AND Course.T#= Teacher.T#  AND Tname= '葉平';  
 
--1六、向SC表中插入一些記錄,這些記錄要求符合如下條件:沒有上過編號「」課程的同窗學號、、號課的平均成績; 
 
     Insert SC  SELECT S#, '002',( SELECT  avg(score)  
     FROM SC  WHERE C#= '002'FROM Student  WHERE S#  not  in ( SELECT S#  FROM SC  WHERE C#= '002');  
 
--1七、按平均成績從高到低顯示全部學生的「數據庫」、「企業管理」、「英語」三門的課程成績,按以下形式顯示:學生ID,,數據庫,企業管理,英語,有效課程數,有效平均分 
 
     SELECT S#  as 學生ID  
        ,( SELECT score  FROM SC  WHERE SC.S#=t.S#  AND C#= '004'AS 數據庫 
        ,( SELECT score  FROM SC  WHERE SC.S#=t.S#  AND C#= '001'AS 企業管理 
        ,( SELECT score  FROM SC  WHERE SC.S#=t.S#  AND C#= '006'AS 英語 
        , COUNT(*)  AS 有效課程數,  AVG(t.score)  AS 平均成績 
     FROM SC  AS t  
     GROUP  BY S#  
     ORDER  BY  avg(t.score)   
 
--1八、查詢各科成績最高和最低的分:以以下形式顯示:課程ID,最高分,最低分 
 
     SELECT L.C#  As 課程ID,L.score  AS 最高分,R.score  AS 最低分 
     FROM SC L ,SC  AS R  
     WHERE L.C# = R.C#  AND  
        L.score = ( SELECT  MAX(IL.score)  
                       FROM SC  AS IL,Student  AS IM  
                       WHERE L.C# = IL.C#  AND IM.S#=IL.S#  
                       GROUP  BY IL.C#)  
         AND  
        R.Score = ( SELECT  MIN(IR.score)  
                       FROM SC  AS IR  
                       WHERE R.C# = IR.C#  
                   GROUP  BY IR.C#  
                    );  
 
--1九、按各科平均成績從低到高和及格率的百分數從高到低順序 
 
     SELECT t.C#  AS 課程號, max(course.Cname) AS 課程名,isnull( AVG(score), 0AS 平均成績 
        , 100 *  SUM(CASE  WHEN  isnull(score, 0)>= 60  THEN  1  ELSE  0  END)/ COUNT(*)  AS 及格百分數 
     FROM SC T,Course  
     WHERE t.C#=course.C#  
     GROUP  BY t.C#  
     ORDER  BY  100 *  SUM(CASE  WHEN  isnull(score, 0)>= 60  THEN  1  ELSE  0  END)/ COUNT(*) DESC  
 
--20、查詢以下課程平均成績和及格率的百分數(用"1行"顯示): 企業管理(),馬克思(),OO&UML (),數據庫() 
 
     SELECT  SUM(CASE  WHEN C# = '001'  THEN score  ELSE  0  END)/ SUM(CASE C#  WHEN  '001'  THEN  1  ELSE  0  ENDAS 企業管理平均分 
        , 100 *  SUM(CASE  WHEN C# =  '001'  AND score >=  60  THEN  1  ELSE  0  END)/ SUM(CASE  WHEN C# =  '001'  THEN  1  ELSE  0  ENDAS 企業管理及格百分數 
        , SUM(CASE  WHEN C# =  '002'  THEN score  ELSE  0  END)/ SUM(CASE C#  WHEN  '002'  THEN  1  ELSE  0  ENDAS 馬克思平均分 
        , 100 *  SUM(CASE  WHEN C# =  '002'  AND score >=  60  THEN  1  ELSE  0  END)/ SUM(CASE  WHEN C# =  '002'  THEN  1  ELSE  0  ENDAS 馬克思及格百分數 
        , SUM(CASE  WHEN C# =  '003'  THEN score  ELSE  0  END)/ SUM(CASE C#  WHEN  '003'  THEN  1  ELSE  0  ENDAS UML平均分 
        , 100 *  SUM(CASE  WHEN C# =  '003'  AND score >=  60  THEN  1  ELSE  0  END)/ SUM(CASE  WHEN C# =  '003'  THEN  1  ELSE  0  ENDAS UML及格百分數 
        , SUM(CASE  WHEN C# =  '004'  THEN score  ELSE  0  END)/ SUM(CASE C#  WHEN  '004'  THEN  1  ELSE  0  ENDAS 數據庫平均分 
        , 100 *  SUM(CASE  WHEN C# =  '004'  AND score >=  60  THEN  1  ELSE  0  END)/ SUM(CASE  WHEN C# =  '004'  THEN  1  ELSE  0  ENDAS 數據庫及格百分數 
   FROM SC  
 
--2一、查詢不一樣老師所教不一樣課程平均分從高到低顯示 
 
   SELECT  max(Z.T#)  AS 教師ID, MAX(Z.Tname)  AS 教師姓名,C.C#  AS 課程ID, MAX(C.Cname)  AS 課程名稱, AVG(Score)  AS 平均成績 
     FROM SC  AS T,Course  AS C ,Teacher  AS Z  
     WHERE T.C#=C.C#  AND C.T#=Z.T#  
   GROUP  BY C.C#  
   ORDER  BY  AVG(Score) DESC  
 
--2二、查詢以下課程成績第3 名到第6 名的學生成績單:企業管理(),馬克思(),UML (),數據庫() 
 
    [學生ID],[學生姓名],企業管理,馬克思,UML,數據庫,平均成績 
 
     SELECT  DISTINCT top  3  
      SC.S#  As 學生學號,  
        Student.Sname  AS 學生姓名,  
      T1.score  AS 企業管理,  
      T2.score  AS 馬克思,  
      T3.score  AS UML,  
      T4.score  AS 數據庫,  
      ISNULL(T1.score, 0) + ISNULL(T2.score, 0) + ISNULL(T3.score, 0) + ISNULL(T4.score, 0as 總分 
       FROM Student,SC   LEFT JOIN SC  AS T1  
                       ON SC.S# = T1.S#  AND T1.C# =  '001'  
             LEFT JOIN SC  AS T2  
                       ON SC.S# = T2.S#  AND T2.C# =  '002'  
             LEFT JOIN SC  AS T3  
                       ON SC.S# = T3.S#  AND T3.C# =  '003'  
             LEFT JOIN SC  AS T4  
                       ON SC.S# = T4.S#  AND T4.C# =  '004'  
       WHERE student.S#=SC.S#  AND  
      ISNULL(T1.score, 0) + ISNULL(T2.score, 0) + ISNULL(T3.score, 0) + ISNULL(T4.score, 0)  
       NOT  IN  
      ( SELECT  
            DISTINCT  
            TOP  15 WITH TIES  
            ISNULL(T1.score, 0) + ISNULL(T2.score, 0) + ISNULL(T3.score, 0) + ISNULL(T4.score, 0)  
       FROM sc  
             LEFT JOIN sc  AS T1  
                       ON sc.S# = T1.S#  AND T1.C# =  'k1'  
             LEFT JOIN sc  AS T2  
                       ON sc.S# = T2.S#  AND T2.C# =  'k2'  
             LEFT JOIN sc  AS T3  
                       ON sc.S# = T3.S#  AND T3.C# =  'k3'  
             LEFT JOIN sc  AS T4  
                       ON sc.S# = T4.S#  AND T4.C# =  'k4'  
       ORDER  BY ISNULL(T1.score, 0) + ISNULL(T2.score, 0) + ISNULL(T3.score, 0) + ISNULL(T4.score, 0) DESC);  
 
--2三、統計列印各科成績,各分數段人數:課程ID,課程名稱,[100-85],[85-70],[70-60],[ <60]  
 
     SELECT SC.C#  as 課程ID, Cname  as 課程名稱 
        , SUM(CASE  WHEN score  BETWEEN  85  AND  100  THEN  1  ELSE  0  ENDAS [ 100 -  85]  
        , SUM(CASE  WHEN score  BETWEEN  70  AND  85  THEN  1  ELSE  0  ENDAS [ 85 -  70]  
        , SUM(CASE  WHEN score  BETWEEN  60  AND  70  THEN  1  ELSE  0  ENDAS [ 70 -  60]  
        , SUM(CASE  WHEN score <  60  THEN  1  ELSE  0  ENDAS [ 60 -]  
     FROM SC,Course  
     WHERE SC.C#=Course.C#  
     GROUP  BY SC.C#,Cname;  
 
--2四、查詢學平生均成績及其名次 
 
       SELECT  1+( SELECT  COUNT( distinct 平均成績)  
               FROM ( SELECT S#, AVG(score)  AS 平均成績 
                       FROM SC  
                   GROUP  BY S#  
                  )  AS T1  
             WHERE 平均成績> T2.平均成績)  as 名次,  
      S#  as 學生學號,平均成績 
     FROM ( SELECT S#, AVG(score) 平均成績 
             FROM SC  
         GROUP  BY S#  
        )  AS T2  
     ORDER  BY 平均成績desc;  
 
   
 
--2五、查詢各科成績前三名的記錄:(不考慮成績並列狀況)  
 
       SELECT t1.S#  as 學生ID,t1.C#  as 課程ID,Score  as 分數 
       FROM SC t1  
       WHERE score  IN ( SELECT TOP  3 score  
               FROM SC  
               WHERE t1.C#= C#  
             ORDER  BY score DESC  
              )  
       ORDER  BY t1.C#;  
 
--2六、查詢每門課程被選修的學生數 
 
   SELECT c#, count(S#)  FROM sc  GROUP  BY C#;  
 
--2七、查詢出只選修了一門課程的所有學生的學號和姓名 
 
   SELECT SC.S#,Student.Sname, count(C#)  AS 選課數 
   FROM SC ,Student  
   WHERE SC.S#=Student.S#  GROUP  BY SC.S# ,Student.Sname having  count(C#)= 1;  
 
--2八、查詢男生、女生人數 
 
     SELECT  count(Ssex)  as 男生人數FROM Student  GROUP  BY Ssex having Ssex= '男';  
     SELECT  count(Ssex)  as 女生人數FROM Student  GROUP  BY Ssex having Ssex= '女'; 
 
--2九、查詢姓「張」的學生名單 
 
     SELECT Sname  FROM Student  WHERE Sname  like  '張%';  
 
--30、查詢同名同性學生名單,並統計同名人數 
 
   SELECT Sname, count(*)  FROM Student  GROUP  BY Sname having   count(*)> 1
 
--3一、年出生的學生名單(注:Student表中Sage列的類型是datetime)  
 
     SELECT Sname,  CONVERT( char ( 11),DATEPART(year,Sage))  as age  
     FROM student  
     WHERE  CONVERT( char( 11),DATEPART(year,Sage))= '1981';  
 
--3二、查詢每門課程的平均成績,結果按平均成績升序排列,平均成績相同時,按課程號降序排列 
 
     SELECT C#, Avg(score)  FROM SC  GROUP  BY C#  ORDER  BY  Avg(score),C# DESC ;  
 
--3三、查詢平均成績大於的全部學生的學號、姓名和平均成績 
 
     SELECT Sname,SC.S# , avg(score)  
     FROM Student,SC  
     WHERE Student.S#=SC.S#  GROUP  BY SC.S#,Sname having     avg(score)> 85;  
 
--3四、查詢課程名稱爲「數據庫」,且分數低於的學生姓名和分數 
 
     SELECT Sname,isnull(score, 0)  
     FROM Student,SC,Course  
     WHERE SC.S#=Student.S#  AND SC.C#=Course.C#  AND  Course.Cname= '數據庫' and score < 60;  
 
--3五、查詢全部學生的選課狀況; 
 
     SELECT SC.S#,SC.C#,Sname,Cname  
     FROM SC,Student,Course  
     WHERE SC.S#=Student.S#  AND SC.C#=Course.C# ;  
 
--3六、查詢任何一門課程成績在分以上的姓名、課程名稱和分數; 
 
     SELECT  distinct student.S#,student.Sname,SC.C#,SC.score 
     FROM student,Sc  
     WHERE SC.score>= 70  AND SC.S#=student.S#;  
 
--3七、查詢不及格的課程,並按課程號從大到小排列 
 
     SELECT c#  FROM sc  WHERE scor e < 60  ORDER  BY C# ;  
 
--3八、查詢課程編號爲且課程成績在分以上的學生的學號和姓名; 
 
     SELECT SC.S#,Student.Sname  FROM SC,Student  WHERE SC.S#=Student.S#  AND Score> 80  AND C#= '003';  
 
--3九、求選了課程的學生人數 
 
     SELECT  count(*)  FROM sc;  
 
--40、查詢選修「葉平」老師所授課程的學生中,成績最高的學生姓名及其成績 
 
     SELECT Student.Sname,score  
     FROM Student,SC,Course C,Teacher  
     WHERE Student.S#=SC.S#  AND SC.C#=C.C#  AND C.T#=Teacher.T#  AND Teacher.Tname= '葉平  '  AND SC.score=( SELECT  max(score) FROM SC  WHERE C#=C.C# );  
 
--4一、查詢各個課程及相應的選修人數 
 
     SELECT  count(*)  FROM sc  GROUP  BY C#;  
 
--4二、查詢不一樣課程成績相同的學生的學號、課程號、學生成績 
 
   SELECT distinct  A.S#,B.score  FROM SC A  ,SC B  WHERE A.Score=B.Score  AND A.C# <>B.C# ;  
 
--4三、查詢每門功成績最好的前兩名 
 
     SELECT t1.S#  as 學生ID,t1.C#  as 課程ID,Score  as 分數 
       FROM SC t1  
       WHERE score  IN ( SELECT TOP  2 score  
               FROM SC  
               WHERE t1.C#= C#  
             ORDER  BY score DESC  
              )  
       ORDER  BY t1.C#;  
 
--4四、統計每門課程的學生選修人數(超過人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排列,查詢結果按人數降序排列,若人數相同,按課程號升序排列  
 
     SELECT  C#  as 課程號, count(*)  as 人數 
     FROM  sc   
     group   by  C#  
     order   by   count(*) desc,c#   
 
--4五、檢索至少選修兩門課程的學生學號 
 
     SELECT  S#   
     FROM  sc   
     group   by  s#  
    having   count(*)  > =   2  
 
--4六、查詢所有學生都選修的課程的課程號和課程名 
 
     SELECT  C#,Cname  
     FROM  Course   
     WHERE  C#   in  ( SELECT  c#   FROM  sc  group   by  c#)   
 
--4七、查詢沒學過「葉平」老師講授的任一門課程的學生姓名 
 
     SELECT Sname  FROM Student  WHERE S#  not  in ( SELECT S#  FROM Course,Teacher,SC  WHERE Course.T#=Teacher.T#  AND SC.C#=course.C#  AND Tname= '葉平');  
 
--4八、查詢兩門以上不及格課程的同窗的學號及其平均成績 
 
     SELECT S#, avg(isnull(score, 0))  FROM SC  WHERE S#  in ( SELECT S#  FROM SC  WHERE score < 60  GROUP  BY S# having  count(*)> 2) GROUP  BY S#;  
 
--4九、檢索「」課程分數小於,按分數降序排列的同窗學號 
 
     SELECT S#  FROM SC  WHERE C#= '004' and score < 60  ORDER  BY score desc;  
 
--50、刪除「」同窗的「」課程的成績 
 
     delete  FROM Sc  WHERE S#= '001' and C#= '001'
相關文章
相關標籤/搜索