SQL語句練習

SQL資料:和咱們在課堂上所學的較大的不一樣在於:子查詢的位置很是靈活,能夠出如今from子句後(須要爲此查詢取別名),也能夠出如今select的目標列中,請仔細讀懂下列例子(有的地方取別名直接就空格後出現別名,有的地方是用as後面跟別名的方式)。 注:主要是學習基本語句或短語的用法面試

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

問題: 一、查詢「001」課程比「002」課程成績高的全部學生的學號;select

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#;方法

二、查詢平均成績大於60分的同窗的學號和平均成績;查詢

select S#,avg(score) from sc group by S# having avg(score) >60;top

三、查詢全部同窗的學號、姓名、選課數、總成績;di

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#,Snamevi

四、查詢姓「李」的老師的個數;co

select count(distinct(Tname)) from Teacher where Tname like ‘李%’;join

五、查詢沒學過「葉平」老師課的同窗的學號、姓名;

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=’葉平’);

六、查詢學過「001」而且也學過編號「002」課程的同窗的學號、姓名;

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=’葉平’));

八、查詢全部課程成績小於60分的同窗的學號、姓名;

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);

十、查詢至少有一門課與學號爲「1001」的同窗所學相同的同窗的學號和姓名;

select S#,Sname from Student,SC where Student.S#=SC.S# and C# in (select C# from SC where S#='1001');

十一、刪除學習「葉平」老師課的SC表記錄;

Delect SC from course ,Teacher where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='葉平';

十二、查詢各科成績最高和最低的分:以以下形式顯示:課程ID,最高分,最低分

SELECT L.C# 課程ID,L.score 最高分,R.score 最低分 FROM SC L ,SC R WHERE L.C# = R.C# and L.score = (SELECT MAX(IL.score) FROM SC IL,Student IM WHERE IL.C# = L.C# and IM.S#=IL.S# GROUP BY IL.C#) and R.Score = (SELECT MIN(IR.score) FROM SC IR WHERE IR.C# = R.C# GROUP BY IR.C# );

1三、查詢學平生均成績及其名次

SELECT 1+(SELECT COUNT( distinct 平均成績) FROM (SELECT S#,AVG(score) 平均成績 FROM SC GROUP BY S# ) T1 WHERE 平均成績 > T2.平均成績) 名次, S# 學生學號,平均成績 FROM (SELECT S#,AVG(score) 平均成績 FROM SC GROUP BY S# ) T2 ORDER BY 平均成績 desc;

1四、查詢各科成績前三名的記錄:(不考慮成績並列狀況)

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#;

1五、查詢每門功成績最好的前兩名

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#;

補充: 已經知道原表 year salary

          ——————

          2000 1000

          2001 2000

          2002 3000

          2003 4000

解: select b.year,sum(a.salary) from salary a,salary b where a.year<=b.year group by b.year order by b.year;

在面試過程當中屢次碰到一道SQL查詢的題目,查詢A(ID,Name)表中第31至40條記錄,ID做爲主鍵多是不是連續增加的列,

完整的查詢語句以下:

方法一: select top 10 * from A where ID >(select max(ID) from (select top 30 ID from A order by ID ) T) order by ID

方法二: select top 10 * from A where ID not In (select top 30 ID from A order by ID) order by ID

相關文章
相關標籤/搜索