SQL查詢全部學生都選修的課程的課程號和課程名問題

2021-03-04 02:04:37 字數 7388 閱讀 4501

1樓:匿名使用者

首先,簡單的把課程表與選修表關聯,

course join study on (course.cid = study.cid)

然後 ,按照課程號和課程名分組,

group by

course.cid,

course.**ame

最後, 要求 選修的人數 = 學生總數

having

count(study.sid) = (select count(sid) from student)

結構化查詢語言(structured query language)簡稱sql(發音:/ˈes kjuː ˈel/ "s-q-l"),是一種特殊目的的程式語言,是一種資料庫查詢和程式語言,用於訪問資料以及查詢、更新和管理關係資料庫系統;同時也是資料庫指令碼檔案的副檔名。

結構化查詢語言是高階的非過程化程式語言,允許使用者在高層資料結構上工作。它不要求使用者指定對資料的存放方法,也不需要使用者了解具體的資料存放方式,所以具有完全不同底層結構的不同資料庫系統, 可以使用相同的結構化查詢語言作為資料輸入與管理的介面。

sql查詢全部學生都選修的課程的課程號和課程名問題

2樓:匿名使用者

select

course.cid,

course.**ame

from

course join study on (course.cid = study.cid)

group by

course.cid,

course.**ame

having

count(study.sid) = (select count(sid) from student);

邏輯:bai

首先,簡單的把 課程表du 與 選修表 關聯

course join study on (course.cid = study.cid)

然後 ,按照 課程號和課zhi程名 分組dao

group by

course.cid,

course.**ame

最後,版 要求 選修的人數權 = 學生總數

having

count(study.sid) = (select count(sid) from student)

資料庫中查詢全部學生都選修了的課程號和課程名??、

3樓:

select 課程.課程號

,課程.課程名

from 課程 where 課程號 in(select distinct 課程號 from 選課group by 課程號

having count(*) =(select count(*) from 學生)

)根據人數判斷 ,比較土,可以這樣試試。

4樓:匿名使用者

樓上回答的 很不錯了 可以這樣做的。

這個問題其實真的很簡單的。。。

如何用sql查詢全部學生都選了人課程號和課程名

5樓:匿名使用者

1,全部學生都選了人課程號和課程名

select b.**o,b.**ame

from 學生關係

a,課程關係 b,學習關係 c where a.sno=c.sno and b.**o=c.**o

group by b.**o,b.**ame having count(*)=(select count(*) from 學生關係)

2,某位學生沒有選的課程名稱

select a.sname,b.**ame

from 學生關係 a,課程關係 b,學習關係 c where a.sno=c.sno and b.**o=c.**o

group by a.sname,b.**ame having count(*)<(select count(*) from 課程關係)

我這是列的每個學生沒選的,要是查某位學生,加個條件就行

select a.sname,b.**ame

from 學生關係 a,課程關係 b,學習關係 c where a.sno=c.sno and b.**o=c.**o

and a.sname='***'

group by a.sname,b.**ame having count(*)<(select count(*) from 課程關係)

6樓:匿名使用者

全部學生都選的課程號與課程名:

select * from (select c.**o,c.**ame,count(1) as total from (select a.

*,c.* from 學生關系統 as a,學習關係 as b,課程關係

as c where a.sno=b.sno and b.

**o=c.**o ) as t group by c.**o,c.

**ame) as t where total=(select count(1) from 學生關係 group by sno)

某個學生沒有選的課程名稱:

select * from 課程關係 where **o no in( select **o from (select a.*,c.* from 學生關系統 as a,學習關係 as b,課程關係 as c where a.

sno=b.sno and b.**o=c.

**o ) t where sno='某個學生')

用sql語句列出全部學員都選修的課程的課程名和課程號

7樓:匿名使用者

我的思路是在sc中判斷每門課被選修了多少次,如果被選修次數=學生人數 則認為被所有學生選修。總覺得這個思路不太好,可是又想不出更好的邏輯關係

select **ame,**o from cwhere **o in (

select **o from sc

group by sno

having count(sno) = (select count(1) from s))

8樓:匿名使用者

以上兩位都是有錯誤的地方,選課人數應該以sc表中出現的學號記錄數目為基準,因為s表中存在沒有選課的學生.所以,**應該是這樣的:

select **ame 課程名,**o 課程號from c

where **o in (

select **o from sc

group by **o

having count(sno) =(select count(distinct sno) from sc))

9樓:仙情雨神戀雲

前面的回答有一點錯誤應該是這樣

select **ame,**o

from c

where **o in (

select **o from sc

group by **o

having count(sno) =(select count(*) from s))

檢索全部學生都選修的課程的課程號和課程名

10樓:匿名使用者

select **o.**ame from c where not exists (select * from s where not exists (select*from sc where sc.s#=s.#br and sc.c#=c.c#

用資料庫sql語句:查詢只被一名學生選修的課程的課程號、課程名 10

11樓:匿名使用者

select a.courseid,a.coursename from coursetable as a where exsits (select b.

courseid,count(b.stuid) as c**um from 選修表 as b where b.c**um=1 and a.

courseid=b.courseid group by b.courseid)

12樓:匿名使用者

select t.課程號,t.課程名 from 課程表 tinner join

(select 課程號 from 選課表 group by 課程號,學生號 having count(學生號)=1

) t0

on t.課程號=t0.課程號

13樓:箎雨

select 課程

.課程號,課程.課程名 from 課程table as a where exsits (select 選修表.

課程號,count(選修表.學號) as 選修數from 選修表 as 選修表 where 選修表.選修數=1 and 課程.

課程號=選修表.課程號 group by 選修表.課程號)

資料庫sql語句中 查詢選修了全部課程的學生的學號和姓名 理解

14樓:匿名使用者

首先頭腦中有三點概念:

1 。 exists 子查詢找到的

提交not exists 子查詢中 找不到的提交

說明:不要去翻譯為存在和不存在,把腦袋搞暈。

2 。 建立程式迴圈的概念,這是乙個動態的查詢過程。如 for迴圈 。

3 。 exists執行的流程exists首先執行外層查詢,再執行記憶體查詢,與in相反。 流程為首先取出外

層中的第一元組, 再執行內層查詢,將外層表的第一元組代入,若內層查詢為真,即有結果

時。返回外層表中的第一元 組,接著取出第二元組,執行相同的演算法。一直到掃瞄完外層整表 。

for(int i =0; i<>eofout;i++)

然後再來看乙個例子: 三張表 學生表student (sno,sname), 課程表course (**o,**ame) 選課表sc

(sno,**o)

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

我的思路:

首先學生的選課資訊存在於sc表中, 要想知道某個學生是否選修了全部課程,至少我們需要知道一共有

幾門課程,這是首要的條件。其次,學生選修了與否,我們又要掃瞄sc全表,統計出選修了所有課程的

學生號,最後在student表中根據學生號打出姓名 。

語句如下: (已測試)

select sname from student

where sno in

(select sno from sc

group by sno //根據sno分組,統計每個學生選修了幾門課程。如果等於course的總數,就是我們要找的sno

having count(*) = (select count(*) from course )) //統計course中共有幾門課程

另一種思路:

引入:將題目換為 查詢學號為 00003 沒有選修的科目

思路:我們可以將已知學號代入,把每乙個科目代入(迴圈),這將形成1*count(*)種組合。

將這組成作為條件,一一與sc表種進行比對,找不到匹配的我們提交 。

select **ame from course where

not exists //找不到的組合,提交course

(select * from sc where course.**o = **o and sno = ''00003'')

//在sc中匹配

換個題目: 查詢沒有 沒有選修科目的學生姓名

思路:學號未知 , 科目未知,說明有兩個未知變數。應該有兩個exists。我們可以掃瞄

student 和 course共有 s * c 中組合,將這些組合與sc的每一項進行匹配,注意s*c組合已經包含所

有可能。如果全部找到 ,就說明已經選修了全部課程。找不到就說明有課程沒選修 。再將沒選修的的

提交給上一exists 迴圈 。若上一exists 不存在的再提交給外迴圈。

最後詳細回答你的問題:資料庫sql語句中 查詢選修了全部課程的學生的學號和姓名

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

select sname

from student

where not exists

(select *

from course

where not exists

(select *

from sc

where sno= student.sno

and **o= course.**o);

理解如下: 查詢選修了全部課程的學生姓名。

不用管怎麼樣,第乙個select 必定是在 student 表裡選 sname 既:

select sname

from student

加上條件即: where

條件是什麼呢? 條件就是---------------------》 查詢選修了全部課程的

因為沒有 (任意乙個)謂詞, 只能用 exists 或者 not exists 來表示。 這點理解吧?

所以要把條件翻譯成 -----------------------》 不存在一門課程這個學生沒有選修

where後面就是 不存在(not exists) (

一門課程這個學生沒有選修

)接下來就是把course表中的課程依次拿出來找出 沒有選修的

怎麼找呢? 因為 not exists 子查詢中 找不到的提交

另外你要明白 ----------------------------not exists 查詢 都是相關查詢----------

所以只要把 在最後乙個select 中

where sno= student.sno

and **o= course.**o);

就是將這個同學通過 sc 表 和 crouse的 課程連線一遍,找到連線不上的,即: 沒有選修的, 這樣就找到了一門課這個學生沒有選修, 存在沒有選修的課,那麼該學生被pass掉了,

一次進行乙個同學的判斷 。

若你學過程式程式設計,可以看下面的內容, 若沒有則可忽略、。----------

上述是理解是資料庫系統內部的實現,可以用for迴圈表示

for(i=1; i

}最後你找記住

1. 第乙個select 就是 你要選的就是 學生

select sname

from student

2. 第二個 select 就是 課程

3. 第三個select 就是 學生和課程發生關係的表 ------------sc選修表

讓他們連線起來

固定的模式 1 你要的結果的表 學生

2 滿足條件的表 課程表

3 產生關係的表 選修表

where 通過選修表把他們連線起來

用SQL語句查詢每個學生選修的課程名及其成績

select 姓名,課程名,成績 from 課程名所在的表名 c join 成績所在的表名 s on c.課程號 s.課程號 join 學生資訊表 on s.學號 學生資訊表.學號 具體的例子 select sname,ame,grade from student st left join scor...

sql求解1查詢選修了軟體工程課程學生的學號

我汗,你連個表結構都沒有,讓人怎麼回答。其實我很好奇 前兩個問題是啥 lz沒貼出來 憂固畢應券娛恆了夜爪 創屑腥迫爹床盲都唯勸 資料庫sql語句中 查詢選修了全部課程的學生的學號和姓名 理解 首先頭腦中有三點概念 1 exists 子查詢找到的 提交not exists 子查詢中 找不到的提交 說明...

sql自連線查詢至少選修了三門課程的學生的學生號

假設有學生表 student 課程表 course 學生課程關聯表 stu cou 學生的學號為student表的主鍵,那麼 select sno from stu cou group by sno having count o 3 資料庫查詢至少選修了3門課程的所有學生辦法 select from...