sql語句中較為重要的查詢邏輯

javascript前鋒發表於2015-03-02

較複雜的SQL例句

S(Sno,Sname,Sage,Sdept, Ssex) 學生表 

C(Cno,Cname,Teacher) 課程表 

SC(Sno,Cno,score) 成績表 

 

1、查詢“001”課程比“002”課程成績低的所有學生的學號; 

  select a.Sno from (select sno, score from SC where Cno='001') a, (select sno, score from SC where Cno='002') b where a.score<b.score and a.sno=b.sno

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

    select Sno,avg(score) from sc group by Sno having avg(score) >60; 

3、查詢姓“高”的老師的個數; 

  select count(distinct(Teacher)) from C where Teacher like '%'; 

4、查詢沒學過“XXXX”老師課的同學的學號、姓名; 

    select S.Sno,S.Sname from S where Sno not in (select distinct( SC.Sno) from SC, C where SC.Cno=C.Cno and C.Teacher='XXXX');

5、查詢學過“001”並且也學過編號“002”課程的同學的學號、姓名; 

select S.Sno, S.Sname from S, SC where S.Sno=SC.Sno and SC.Cno='001'and exists ( Select * from SC as SC_2 where SC_2.Sno=SC.Sno and SC_2.Cno='002'); 

6、查詢學過“XXXX”老師所教的所有課的同學的學號、姓名; 

Select Sno,Sname from S where Sno in (select Sno from SC, C where SC.Cno=C.Cno and C.Teacher='XXXX' group by Sno having count(SC.Cno)=(select count(Cno) from C where Teacher='XXXX'))

8、查詢課程編號“002”的成績比課程編號“001”課程高的所有同學的學號、姓名; 

  Select Sno,Sname from (select S.Sno, S.Sname, score, (select score from SC SC_2 where SC_2.Sno=S.Sno and SC_2.Cno='002') score2 from S, SC where S.Sno=SC.Sno and Cno='001') S_2  where score2 >score; 

9、查詢所有課程成績大於60分的同學的學號、姓名; 

  select Sno,Sname from S where Sno not in (select S.Sno from S, SC where S.Sno=SC.Sno and score<60); 

10、查詢沒有學全所有課的同學的學號、姓名; 

select S.Sno, S.Sname from S,SC where S.Sno=SC.Sno group by S.Sno having count(Cno) <(select count(Cno) from C)

 11、查詢至少有一門課與學號為“95001”的同學所學相同的同學的學號和姓名; 

select S.Sno,S.Sname from S,SC where S.Sno=SC.Sno and Cno in (select Cno from SC where Sno='95001')

12、查詢至少學過學號為“95001”同學所有一門課的其他同學學號和姓名; 

select distinct SC.Sno,Sname from S,SC where S.Sno=SC.Sno and Cno in (select Cno from SC where Sno='95001')

 

這是大學期間,老師給的資料庫查詢參考,對於現在不斷在程式語言中進取的人來說保證看過上面的所有查詢邏輯肯定會有更新的認識。個人甚至可以肯定的說,個人的資料庫水平仍舊沒有突破上面12條查詢語句所提供的邏輯,希望這裡將高老師的智慧分享一下。


相關文章