1樓:
select sno, sname, sdeptfrom student a,
(select sno, count(distinct cno) as cno_count from sc group by sno) b, ---計算每copy個學生
bai的選課數
(select max(cno_count) as max_count
from (select sno, count(distinct cno) as cno_count
from sc
group by sno)) c --計算擔du任選zhi課最多的數量dao
where a.sno = b.sno
and cno_count = max_count;
查詢所有至少選修2門課程的學生的學號的語句怎麼寫?
2樓:匿名使用者
⑥ select distinct x.s#
from sc as x, sc as y
where x.s#=y.s# and x.c#!=y.c#;
3樓:匿名使用者
selece 學號 from 表 條件(選修課程大於或等於2的不就行了麼)
用sql語句查詢選修了3門及以上課程的學生學號,姓名,選修的課程數
資料庫sql語句中 查詢選修了全部課程的學生的學號和姓名 理解
4樓:匿名使用者
這思路是用了個雙重否定來求解的。因為sql中沒有全稱量詞,於是要把題目轉換成等價的存在量詞表達形式。即根據(∀x)p≡¬∃(¬p)來轉化為雙重否定的表達。
同時由於「學生x選修課程y 」
之間是不定的,需要使用兩個exist。
於是「選修了全部課程的學生」等價於「不存在(有他沒選的課的)學生」
使用了兩次not exists來實現雙重否定。
先查詢在課程裡查詢「沒有學生選的課程」,第一次否定,
然後再在學生裡查詢「沒有屬於上面情況的學生」的名字,第二次否定;
結合起來,就是 「沒有(沒選的課程)的學生」了。
好了,從裡到外寫出來,就是
select sname from student where not exists(
select * from course where not exists(
select * from sc where sno=student.sno and cno=course.cno
))這個只不過是逆向思維來解決問題的方法。舉一反三,比如要查「被全部學生都選的課程名」
則是求「不存在有學生沒選它的課程」
select cname from course where not exists(
select * from student where not exists(
select * from sc where sno=student.sno and cno=course.cno
))再如,查「所有人都沒選修的課程」,這個雖然是單次否定了,但仍需要兩個存在量詞表述。
等價於查詢「不存在有學生選了它的課程」。
select cname from course where not exists (
select * from student where exists (
select * from sc where cno=course.cno and sno=student.sno))
5樓:風嘯無名
沒有資料庫難以具體說明,總的來說,就是一個多表查詢包括學生基本資訊表、課程資訊表、成績表等,學號為主鍵,查詢姓名和課程、分數等資訊,總分用sum算。
1 。 exists 子查詢找到的提交
not exists 子查詢中 找不到的提交說明:不要去翻譯為存在和不存在,把腦袋搞暈。
2 。 建立程式迴圈的概念,這是一個動態的查詢過程。如 for迴圈 。
3 。 exists執行的流程exists首先執行外層查詢,再執行記憶體查詢,與in相反。 流程為首先取出外層中的第一元組, 再執行內層查詢,將外層表的第一元組代入,若內層查詢為真,即有結果時。
返回外層表中的第一元 組,接著取出第二元組,執行相同的演算法。一直到掃描完外層整表 。
6樓:月光雪松
樓主彆著急!
為好理解我們先從這條sql語句所要實現的功能入手。
功能:查出選修了全部課程的學資訊。那麼sql在查詢資料的時候的遍歷每一個學生資訊。判斷該學生是否滿足條件。
1 如果存在這麼一條course記錄a(暫命名為a), 則不選擇該學生。否則該學生就被查詢出來
2 那麼記錄a,是怎麼查出來的呢?a查出的條件是:不存在sc記錄b,只要不存在b,就可查出a
3 那麼b記錄是什麼?b記錄是選課資訊表,根據學號和課程號可查出記錄b
如果b為空(該學生有沒有選的課程)也就是不存在,則a就有一條記錄,根據規則2可知:因為有a,所以該學生資訊將不被輸出。
如果在sc中每一個課程編號和該學生編號為條件都能夠查出一條記錄b(也就是該學生選修了全部課程),所以a記錄不存在,則輸出該學生的資訊。
也就是在選課表中,如果學生選了全部課程(也就是滿足select * from sc where sno= student.sno and cno= course.cno)始終存在,當然,課程編號是任意的)。
那麼就輸出該學生的資訊。你不要為理解這條sql而忘記了它本身是要做什麼.
帶著sql的目的(要實現的功能)去理解就好了。
7樓:雨夜的緣分
1,select * from sc where sno= student.sno and cno= course.cno
在sc表中查詢符合sno= student.sno and cno= course.cno這兩個條件的所有資料,
2,select * from course where not exists (select * from sc where sno= student.sno and cno= course.cno);這句的意思是在course表中查詢不滿足1,中的所有資料
3,select sname from student where not exists (select * from course where not exists (select * from sc where sno= student.sno and cno= course.cno));
這整句的意思就是查詢student表中所有不滿足2,資料,就是選修了全部課程的學生了
只所以會有這麼多查詢,可能sno= student.sno and cno= course.cno這兩個條件是是sc表查詢的條件分散在另外兩個表中,引用了雙重否定,也就是肯定的意思,達到可以讓student.
sno ,course.cno,在sc表中作為條件的目的
夠詳細吧!!!!
sql:查詢每門課程的課程名、選課學生姓名及其學號,選課人數
8樓:匿名使用者
我的學生資料庫跟你的差不多,我就用我的這些表給你做了個
select c.cno,s.sname,s.sno,選課人數 from course c
left join sc on c.cno=sc.cno
left join student s on s.sno=sc.sno
left join (select c.cno, count(s.sno) 選課人數 from
course c left join sc on c.cno=sc.cno
left join student s on s.sno=sc.sno
group by c.cno) as t on t.cno=c.cno
9樓:
你連關係都沒給,怎麼查。。。
檢索出選修課程至少等於三門的學生學號和選課門數
查詢選修了3門以上課程的學生學號;; 5
求選修課程超過2門課的學生的學號、平均成績和選課門數,並按平均成績降序排列
如何查詢自己大學的選修課情況
如何查詢自己大學的選修課情況 很多大學登入學校的教務系統,輸入自己的學號或帳號,可以檢視到相關資訊。1 有一些手機軟體也可以查詢,比如超級課程表,一般和大學的教務系統繫結了,可以檢視到自己的課程表,選課情況等等。擴充套件資料 大學選修課型別 就性質來說,大學選修課可以概括分為兩類 公共選修課和專業選...
關於自考的選修課的問題,自考法律本科選修課哪幾門比較容易?
自考的選修課以學分為主,滿足了選修課最低學分要求即可,因為選修課學分不會分配到必修課學分之中 也就是說,滿足選修課最低學分要求,多餘的學分不會加到總學分上。自考專業畢業學分由三部分構成 總學分 必修課學分 選修課學分,三個學分都要到達最低要求。舉例說明如下。自考英語本科段考試科目 專業學分 54 說...
湖南師範大學公共藝術課程算選修課嗎
當然算選修課。最直接的是問你的班主任 輔導員。只要努力付出過,大學公共藝術課程如何分類?一般分為四大類 語言藝術 文學 表情藝術 舞蹈 造型藝術 美術 書法 篆刻等 綜合藝術 戲劇 影視等 公共藝術專業有哪些有趣的課程?其實這個專業有趣的課程挺多的,我是很慶幸自己能選擇喜歡的專業的。在介紹課程之前,...