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 通過選修表把他們連線起來 select 姓名,課程名,成績 from 課程名所在的表名 c join 成績所在的表名 s on c.課程號 s.課程號 join 學生資訊表 on s.學號 學生資訊表.學號 具體的例子 select sname,ame,grade from student st left join scor... 我汗,你連個表結構都沒有,讓人怎麼回答。其實我很好奇 前兩個問題是啥 lz沒貼出來 憂固畢應券娛恆了夜爪 創屑腥迫爹床盲都唯勸 資料庫sql語句中 查詢選修了全部課程的學生的學號和姓名 理解 首先頭腦中有三點概念 1 exists 子查詢找到的 提交not exists 子查詢中 找不到的提交 說明... 假設有學生表 student 課程表 course 學生課程關聯表 stu cou 學生的學號為student表的主鍵,那麼 select sno from stu cou group by sno having count o 3 資料庫查詢至少選修了3門課程的所有學生辦法 select from...用SQL語句查詢每個學生選修的課程名及其成績
sql求解1查詢選修了軟體工程課程學生的學號
sql自連線查詢至少選修了三門課程的學生的學生號