查詢至少選修了學生2019選修的全部課程的學生號碼

2021-04-23 23:46:25 字數 6047 閱讀 8910

1樓:匿名使用者

select 學生號碼 from 學生 where not exists(select * from 課程

where not exists(select * from 學習 where 學號

版=學生.學號 and 課程號權=課程.課程號 and 日期 =2011))

2樓:

不存來在這樣的課程

源y,學bai生2001選修du

了y,而學生zhix沒有選。

daoselect distinct snofrom sc scx

where not exists

(select * from sc scywhere scy.sno='2001'andnot exists

(select * from sc sczwhere scz.sno=scx.sno and scz.cno=scy.cno ));

3樓:匿名使用者

select * from table where 課程**=(

select distinct 課程** from table where 學號='2001')

sql查詢至少選了學生200215122選修的全部課程的學生號碼 5

4樓:hx何旭

好像是把 as 省略了 本來是

select distinct sno

from sc as scx

5樓:匿名使用者

別名,你還沒學好資料庫的基礎。sno是學號,sc是學生成績表。

用sql語言查詢:至少選修了0003號學生選修的全部課程的學生學號

6樓:張凱明

一樓的答案不敢苟同,本人理解如下:

select x.stuid from (select sum(case

when a.stuid<>t.stuid then 1 else 0 end) ds,

(select count(distinct kecheng) from table b where b.stuid='0003') zs,

t.stuid

from table t left join tabl a on t.kecheng=a.kecheng

where t.stuid='0003'

group by t.stuid) x where x.ds>=zs;

樓上的注意了,是至少選修了0003號學生的全部課程,即如果這個學生選了5門課,其它的學生必須也至少選了這5門課

7樓:匿名使用者

select id from table 1 where kecheng in (select kecheng from table2 where stuid = '0003')

查詢選修了全部課程的學生的姓名,用兩種查詢語句表示

用sql語句查詢至少選修了學生『張徵』選修的全部課程的學生的姓名和學號,**如圖,結果求圖,要驗證

8樓:匿名使用者

select s.sno,s.sname from(select sno, count(cno) as num from sc where cno in (

select cno from s join sc on s.sno = sc.sno and sname ='張徵'

)group by sno

) t2

join(select count(cno) num from s join sc on s.sno = sc.sno and sname ='張徵' ) t1 on t2.

num = t1.num

join s on s.sno = t2.sno已驗證過

9樓:唐城冬

你也太會玩了吧,讓人橫著看啊

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

10樓:狠有毅毅

第一問:兩個not exists表示雙重否定:沒有一個選了課的學生沒有選course表裡的課程

select sname

from student

where not exists /*沒有一個學生滿足以下條件*/

(select * from course

where not exists /*什麼條件呢?沒有選過course表裡的課*/

(select * from sc

where sno =student.sno /*這裡兩個=分別指對應的關係,表示選過課並且是course裡and cno=course.cno) 的課,只不過用not exists否定掉了*/

第二問:其實和not in 是一個意思 exists只返回true 或false 這裡not exists裡的內容 其實就是指學生選過的課程,再用not exists否定了,就變成了沒有選的

11樓:匿名使用者

分析原因如下:

第一問:兩個not exists表示雙重否定:沒有

一個選了課的學生沒有選course表裡的課程

select sname from student   where not exists /*沒有一個學生滿足以下條件*/

(select *   from course  where not exists  /*什麼條件呢?沒有選過course表裡的課*/

(select *  from sc  where sno =student.sno   /*這裡兩個=分別指對應的關係,表示選

過課並且是course裡and cno=course.cno)  的課,只不過用not exists否定掉了*/

第二問:其實和not in 是一個意思 exists只返回true 或false 這裡not exists裡的內容 其實就                     是指學生選過的課程,再用not exists否定了,就變成了沒有選

12樓:匿名使用者

exists 是類似於in 效率比in 好的多

not exists 類似於 not in 效率一樣比not in 一樣好的多

再來看這個sql語句,應該明白了吧

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

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

13樓:匿名使用者

這思路是用了個雙重否定來求解的。因為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))

14樓:風嘯無名

沒有資料庫難以具體說明,總的來說,就是一個多表查詢包括學生基本資訊表、課程資訊表、成績表等,學號為主鍵,查詢姓名和課程、分數等資訊,總分用sum算。

1 。 exists 子查詢找到的提交

not exists 子查詢中 找不到的提交說明:不要去翻譯為存在和不存在,把腦袋搞暈。

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

3 。 exists執行的流程exists首先執行外層查詢,再執行記憶體查詢,與in相反。 流程為首先取出外層中的第一元組, 再執行內層查詢,將外層表的第一元組代入,若內層查詢為真,即有結果時。

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

15樓:月光雪松

樓主彆著急!

為好理解我們先從這條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的目的(要實現的功能)去理解就好了。

16樓:雨夜的緣分

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表中作為條件的目的

夠詳細吧!!!!

1 查詢每個學生都選修了哪些課程 並寫出SQL語句 2查詢 資料庫 的先修課程的名稱,並寫出SQL語句

1 select a.sname,c.ame from student a,sc b,course c where a.sno b.sno and b.o c.o 2 沒看到你的意思啊,查詢課程名是 資料庫 的課程?學生表和課程表是分開的,多表查詢你要把你的表發出來 sql查詢全部學生都選修的課程的...

資料庫sql查詢同時選修了選修課1和選修課2的學生學號

你好像寫來錯了吧自,我感覺應該是 select sno from sc where o 1 and son in select sno from sc where o 2 或者where o 1 intersert select sno from sc where o 2 intersect對兩個查...

查詢同時只選修了1號和2號課程的學生的學號

select distinct t.學號 from select distinct 表名.學號 from表名 表名 t2 where表名.課程號 1 and t2.課程號 2 and 表名.學號 t2.學號 t where t.學號 not in select distinct 表名.學號 from...