記錄一下 自己不擅長的兩個sql題

查詢“001”課程比“002”課程成績高的所有學生的學號

//結題思路  同一個學生 學習課程001和學習課程002 成績的比較

那麼怎麼固定成同一個學生呢

首先 我們可以很簡單 的查詢出來 課程等於001學生 的學號 和 課程等於002學生的學號

接下來 怎麼固定是同一個學生呢  

select stuid from student  查詢出來所有學生的id  然後stuid 等於課程001的學生id 同時也登陸課程002的學生id

具體查詢:

SELECT tblstudent.StuId
from tblstudent
where
(SELECT TC.Score FROM tblscore TC WHERE TC.CourseId='001'and tblstudent.StuId=tc.StuId)
”>
(SELECT tb.Score FROM tblscore Tb WHERE Tb.CourseId='002' and tblstudent.StuId=Tb.StuId)

第二個:查詢學過葉平老師所教的所有課程的同學的學號,姓名

我們很容易 就能根據葉平查詢到教師號 根據教師號查詢到課程號

然後呢 我們密碼了 怎麼查

————————————————

其實我們可以換一種思路 我們先查詢出來 所有學過葉平老師課程的學生也包括學歷一門課程的人

我們查詢出來課程號 我們就能查出學號  select 學號 from score  where 課程號 in(......裏面是上面查詢到的課程號) 這個時候我們就查詢出來所有的學號了 然後我們想查詢出來那些學生都學了  我們是不是可以換個思路思考一下  比如這個老師一共教了兩門課

我們這個是時候是不是可以按學號分組 count(學號) 然後where count(學號)=2

查詢出來這個老師一共教了幾門課就不多說了

直接上sql

SELECT 學號,COUNT(課程號) from score where 課程號 in(
SELECT 課程號 from course WHERE 教師號=(
SELECT 教師號 from teacher WHERE 教師名稱='孟扎扎'))
GROUP BY 學號
HAVING COUNT(課程號) =(
SELECT COUNT(課程號)課程號 from course WHERE 教師號=(
SELECT 教師號 from teacher WHERE 教師名稱='孟扎扎'))

查詢課程002比001成績低的學生


SELECT * from student st where( 
(select 成績 from score s1 where `課程號` ='0002'AND st.學號 = s1.學號)>
(select 成績 from score s2 where `課程號` ='0001' AND st.學號 = s2.學號))

/*查詢沒有學全所有課程的同學的學號 我們可以先查詢學全的學號*/
/*我們先查詢課程的總數*/
SELECT COUNT(*) from course
/*按學生分組查詢所學課程的總數*/
select 學號,COUNT(課程號) from score 
GROUP BY 學號
/*然後等於課程總數就行*/
HAVING COUNT(課程號) =(SELECT COUNT(*) from course)
/*然後查詢名稱 兩種方法 一種是in 一種是右連接*/
SELECT 姓名,學號 FROM student where 學號 in(select 學號 from score 
GROUP BY 學號
/*然後等於課程總數就行*/
HAVING COUNT(課程號) =(SELECT COUNT(*) from course))
/*最好查出出來沒有學全的學生*/
SELECT 姓名,學號 FROM student where 學號 not/*這個地方直接加not就行*/ in(select 學號 from score 
GROUP BY 學號
/*然後等於課程總數就行*/
HAVING COUNT(課程號) =(SELECT COUNT(*) from course))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章