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

2021-03-26 12:53:11 字數 5302 閱讀 8436

1樓:匿名使用者

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)

2樓:箎雨

select 課程

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

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

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

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

3樓:匿名使用者

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

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

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

sql語句查詢沒有被學生選修過的課程(即課程號沒有在sc表中出現過)的名稱.

4樓:匿名使用者

1、建立學生及課程表,

create table test_student(stu_id number, class_id number);

create table test_class(class_id number, class_name varchar2(30));

2、插入測試資料,

insert into test_student values(1,1001);

insert into test_student values(2,1001);

insert into test_student values(3,1002);

insert into test_student values(4,1003);

insert into test_student values(5,1003);

insert into test_student values(6,1003);

insert into test_class values(1001,'美術');

insert into test_class values(1002,'**');

insert into test_class values(1003,'繪畫');

insert into test_class values(1004,'跆拳道');

3、查詢學生選修的課程,

select * from test_student t, test_class b where t.class_id = b.class_id

4、查詢無學生選修的課程,可以發現1004 跆拳道課程,無人選擇,

select b.*

from test_student t, test_class b

where t.class_id(+) = b.class_id

and t.class_id is null

5樓:偶梅花象婷

一般情況來說,有一個關於選修課程的表,我暫時叫他t_course,pk是courseid

一個學生表,叫t_student,pk是studentid,一個關係表,叫t_join,

pk是joinid,

fk是studentid和courseid我們定義了很多課程,然後有很多學生,如果一個學生選修了一個課程,就會有條關聯的資料放在t_join裡面,這樣的話,我們要知道有多少學生選修了一門課程的話,只需要

select

count(0)

from

t_courese

cinner

join

t_joinjon

c.courseid

=j.courseid

where

c.courseid=

6樓:匿名使用者

1)select a.課程 from 課程表 a where  not exists(

select 1 from sc b where b.課程號=a.課程號);

2)select distinct a.課程 from 課程表 a left join sc b

on a.課程號=b.課程號 where b.課程號 is null;

請按實際調整**中的表名和欄位名。

如果碰到大資料表時在有可利用的索引情況下推薦語句1其效率很高,否則語句1可能效率低下,這種情況下應採用語句2。

7樓:匿名使用者

select a.**o

from sc a

where

not exists

(select b.**o

from sc b

where a.**o=b.**o);

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

8樓:匿名使用者

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

))這個只不過是逆向思維來解決問題的方法。舉一反三,比如要查「被全部學生都選的課程名」

則是求「不存在有學生沒選它的課程」

select **ame from course where not exists(

select * from student where not exists(

select * from sc where sno=student.sno and **o=course.**o

))再如,查「所有人都沒選修的課程」,這個雖然是單次否定了,但仍需要兩個存在量詞表述。

等價於查詢「不存在有學生選了它的課程」。

select **ame from course where not exists (

select * from student where exists (

select * from sc where **o=course.**o and sno=student.sno))

9樓:風嘯無名

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

1 。 exists 子查詢找到的提交

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

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

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

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

10樓:月光雪松

樓主彆著急!

為好理解我們先從這條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 **o= course.**o)始終存在,當然,課程編號是任意的)。

那麼就輸出該學生的資訊。你不要為理解這條sql而忘記了它本身是要做什麼.

帶著sql的目的(要實現的功能)去理解就好了。

11樓:雨夜的緣分

1,select * from sc where sno= student.sno and **o= course.**o

在sc表中查詢符合sno= student.sno and **o= course.**o這兩個條件的所有資料,

2,select * from course where not exists (select * from sc where sno= student.sno and **o= course.**o);這句的意思是在course表中查詢不滿足1,中的所有資料

3,select sname from student where not exists (select * from course where not exists (select * from sc where sno= student.sno and **o= course.**o));

這整句的意思就是查詢student表中所有不滿足2,資料,就是選修了全部課程的學生了

只所以會有這麼多查詢,可能sno= student.sno and **o= course.**o這兩個條件是是sc表查詢的條件分散在另外兩個表中,引用了雙重否定,也就是肯定的意思,達到可以讓student.

sno ,course.**o,在sc表中作為條件的目的

夠詳細吧!!!!

資料庫查詢,SQL語句 查詢 統計

1全部可以在查詢分析器裡開啟相應資料庫 要輸使用者名稱,密碼 在查詢對話方塊輸入 select from 表名 你所說的某個表的表名 where 欄位 列名 12345 按f5就行了 tablename 你要查詢的資料表的名字 cellname 存放12345資料的列名1.如果是必須含有和12345...

sql語句,access資料庫,表相關查詢排序。。如圖所示

select from news where classid 1 order by id asc 你classid的欄位型別不是數字型 您好,在查詢設計器裡,將兩個表新增進來,點中其中一個表你要將它們關聯的欄位,拉到另一個表的相應欄位上去,然後在形成的線上雙擊,出來對話方塊,在裡面選擇關聯貫關係。語...

SQL資料庫中,模糊查詢的語句怎麼寫

select from abc like 1 你根本就沒有寫在哪個列裡查呀,肯定列名無效咯。select from abc where like 1 正確的應該是 select from 表名 where 欄位 like 1 c 模糊查詢sql語句怎麼寫?假設有表名稱 tb student 欄位 i...