在SQL Server資料庫中,查人同時至少選擇兩種科目的學號應該怎麼寫啊

時間 2022-03-17 11:40:17

1樓:時光x雜記

你的意思是,查某個人的學號,他同時選擇了兩個科目,你表結構怎麼樣的,關聯是那個欄位?

sql中如何將一個人的學號最後2位取出

2樓:匿名使用者

select right(學號,2) from 表名

3樓:匿名使用者

可以使用sql的擷取字串的方法substring(expression, start, length)

資料庫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

top1

學生資訊表.學號

學生資訊表.學生姓名

學生資訊表.性別

學生成績表.科目編號

學生成績表.成績

from

學生資訊表

inner

join

學生成績表

on學生資訊表.學號=學生成績表.學號

9樓:匿名使用者

t1 學生資訊表

編號 姓名

t2 學生成績表

編號 課程編號 學生編號 成績

t3 課程資訊表

編號 課程

select t1.* , t3.課程, t.成績from t1 left join (select min(編號) 編號, 課程編號, max(成績) 成績

from t2 group by 課程編號) t on t1.編號 = t.學生編號

left join t3 on t2.課程編號 = t3.編號

10樓:匿名使用者

select 學號,姓名 from 學生表 where 學號 in

(select top 1 學號 from 學生成績表 group by 課程號 order by 成績 desc)

sql查詢選修了兩門以上(包括兩門)課程的學生資訊

11樓:袁丙漢

昨天面試才看到這道題

select distinct s.id , s.namefrom close_class  c

left join student s

on s.s_id = c.s_id

where count(c.id)>1

12樓:南柯一夢丶

沒有表結構啊?????

在sql server中查詢每個學生的班級、學號、姓名、平均分,結果按平均分降序排列,平均分相同者按班級排列

13樓:匿名使用者

where 語句 不能和order by 語句同時使用

14樓:新發現新思維

學生資訊表:stuinfo學號:stuid,姓名:stuname,班級編號:classid,教學成績表:gradeinfo.平均分:gradeage

按平均分降序排列:select stuid stuname,classid gradeage from stuinfo inner join gradeinfo on stuinfo.stuid=gradeinfo.

stuid group by gradeage

在sql server中查詢資料庫中第幾條至第幾條之間的資料sql語句怎麼寫

15樓:匿名使用者

在sql server中查bai詢資料庫中第幾條至第幾條之du間的資料sql語句zhi

示例dao如下:

select top 20 * from 表 where id not in (select top 10 id from 表 order by id)

order by id;

以上sql語句實內現查詢第10條至容20條之間

的記錄,此方法是先取出前20條的id,排除前10條資料的id,然後在剩下的資料裡面取出前10條資料。

擴充套件資料

sql server常用操作sql語句介紹:

1、查詢:select * from table1 where 範圍

2、插入:insert into table1(field1,field2) values(value1,value2)

3、刪除:delete from table1 where 範圍

4、更新:update table1 set field1=value1 where 範圍

5、查詢:select * from table1 where field1 like 』%value1%』

16樓:匿名使用者

1、首先我們先來來看一下查詢語源句的like優化,如下圖所示,分別將百分號放在前面和後面。

2、百分號放在後面的查詢更高效一些。

3、接下來我們在來看一下or查詢的效率,如下圖所示,通過or來查詢兩個條件的記錄。

4、執行後看執行計劃,我們看到這種or查詢的效率也不是很高。

5、如果想替換or查詢就可用union all來代替,如下圖所示,用兩個單獨的查詢實現。

6、第一種很顯然會比第二種慢,所以在使用的時候查詢條件儘量不要有計算。

17樓:本將仍在

--查第3條到第5條 一共3條資料

declare @

tou int,@wei int

set @tou = 3

set @wei = 5

select top (@wei - @tou + 1) * from 表名 where id not in (select top (@tou - 1) id from 表名 order by id)

自己把表名替版換 執行一下就看到權效果了

在SQL Server資料庫中,如何將某

建立表的時候,把這一列設為int型,然後把標識這一個選成是,就可以自動編號了。如果使用語法建立 create table 表名字 自增列名字 int identity 1,1 not null 其他列 你的問題感覺就是改變 增刪改 表的結構而已。alter table 表名 add 列名 型別 增加...

sqlserver資料庫中怎麼查詢某個欄位中含有某些字

用like語句查詢。舉例 表名為zwj,欄位為sp,查詢sp欄位中含有 所有 的語句為 select from zwj where sp like 所有 表名為zwj,欄位為sp,查詢sp欄位中含有 所 或 有 的語句為 select from zwj where sp like 所 or sp l...

Access資料庫和SQL Server資料庫有什麼區別

access是一種桌面資料庫,只適合資料量少的應用,在處理少量資料和單機訪問的資料庫時是很好的,效率也很高。但是它的同時訪問客戶端不能多於4個。access資料庫有一定的極限,如果資料達到100m左右,很容易造成伺服器iis假死,或者消耗掉伺服器的記憶體導致伺服器崩潰。sql server是基於伺服...