1樓:
select 課程
.課程號,課程.課程名
from 課程 where 課程號 in(select distinct 課程號 from 選課group by 課程號
having count(*) =(select count(*) from 學生)
)根據人數判斷 ,比較土,可以這樣試試。
資料庫中查詢全部學生都選修了的課程號和課程名??、
2樓:
select 課程.課程號
,課程.課程名
from 課程 where 課程號 in(select distinct 課程號 from 選課group by 課程號
having count(*) =(select count(*) from 學生)
)根據人數判斷 ,比較土,可以這樣試試。
3樓:匿名使用者
樓上回答的 很不錯了 可以這樣做的。
這個問題其實真的很簡單的。。。
sql查詢全部學生都選修的課程的課程號和課程名問題
4樓:匿名使用者
首先,簡單的把課程表與選修表關聯,
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查詢全部學生都選了人課程號和課程名
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樓:消逝的風
select 姓名,課程名,成績 from (課程名所在的表名 c join 成績所在的表名 s on c.課程號=s.課程號) join 學生資訊表 on s.
學號=學生資訊表.學號 ;
具體的例子:
select sname,**ame,grade from student st left join(score s left join course c on s.**o=c.**o)
on st.sno=s.sno;
資料庫sql語句中 查詢選修了全部課程的學生的學號和姓名 理解
8樓:匿名使用者
首先頭腦中有三點概念:
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 選課表 where 學號 2001050105 sql資料庫中查詢選修了所有課程的學生的學號和姓名及選修門數 所有離開了資料結構 表結構 的sql語句都是白搭!先假設資料結構為 學生表 學號 主鍵或設有唯一索引,姓名,性別 課程表 課程號 主鍵或設有唯一索引,課程... 1.從庫中查詢計算機系選修資料庫基礎與應用的學生的學號 姓名 成績,按學號遞增專排序,存入遊屬標student中,唯讀。2.查詢資訊工程系學生的年齡。3.cover的這個啥沒學過就幫不上忙了 等待高人吧4.貌似 如果讀取的數值為0,則不允許刪除且允許定義新值ps 不是很肯定,你可以再參考下其他人的答... 1 首先,開啟資料庫檔案。2 在 建立 功能區的 查詢 分組中單擊 查詢設計 按鈕,系統彈出查詢設計器。3 在 顯示錶 對話方塊中新增 tbmp 表,關閉 顯示錶 對話方塊。4 單擊 查詢型別 分組中的 刪除 按鈕,在查詢設計器中出現 刪除 行。5 雙擊 tbmp 中 姓名 欄位,在 條件 行中新增...資料庫的操作題查詢選修了學號為
有「學生課程」資料庫,資料庫中包括表
access資料庫中查詢條件不為空怎麼寫