查詢選修了全部課程的學生姓名


查詢選修了全部課程的學生姓名:

 

第一種:

 

 理解為:查詢一個人的姓名,這個人不存在課程沒選擇。

思路:

1.拿出Student表的第一行數據

2.拿出Course表的第一行數據

3.拿出SC表的第一行數據 (其實這個表就是用來與前兩個表進行對比判斷的)

 

for(循環從Student表拿一行學生數據){

  for(循環從Course表拿一行課程信息){

    for(循環在SC表拿一行進行比對){

      SC表中的這條數據判斷:

        SC.Sno == Student.Sno , SC.Cno == Course.Cno;

      /*是否SC表中的學號 = Student表中的學號 且

       SC表中的Cno = Course表中的Cno*/

    }

  }

}

 

sql語句:

SELECT Sname      /*查詢一個學生的學號 (在Student表中循環取學生信息)*/

FROM Student

WHERE NOT EXISTS(    /*不存在課程  (在Course中循環取所有課程信息)*/           

  SELECT *

  FROM Course

  WHERE NOT EXISTS(  /*沒選修  (在SC表中循環比對) */

    SELECT *

    FROM SC

    WHERE SC.Sno = Student.Sno  AND SC.Cno = Course.Cno

  )

);

結果:選擇出學生的姓名,這個學生所有課程都選修了

 

第二種:

思路:

查詢一個學生的姓名,該學生選修課的門數等於所有課程的門數

逆推:查詢一個學生的姓名,姓名怎么來?

   通過Student的學號得到,學號怎么得到?

   通過在SC表中Sno分組判斷該學生的選修的課程門數是否等於所有課程的門數得到,所有課程門數如何得到?

   通過在Course表中COUNT(*)得到

SQL語句:

SELECT Sname

FROM Student

WHERE Sno in (

  SELECT Sno

  FROM SC 

  GROUP BY Sno

  HAVING COUNT(*) = (    /*該學生的選修的課程門數 =  所有課程的門數*/

    SELECT COUNT(*)   /*所有課程的門數*/

    FROM Course

  )

);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM