當前位置:首頁 » 課程設計 » 查詢001課程比002課程

查詢001課程比002課程

發布時間: 2021-02-28 14:10:23

㈠ 8、查詢課程編號「002」的成績比課程編號「001」課程低的所有同學的學號、姓名; Select S#,Sname from (s

(select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') AS score2
from Student,SC where Student.S#=SC.S# and C#='001') AS S_2
註:sc sc_2=sc as sc_2
組成一個包含s#,sname,score,score2的表,這個表叫S_2
在S2表中取S#,sname,加個where條件
中間省略專了3個as,這樣就容易懂屬了。

㈡ sql中怎麼實現如下查詢: 學生01學了001,002倆課程,怎麼查詢出和學生01所學課程完全一樣的同學

SELECT * FROM STUDENT WHERE SID IN
(SELECT a.SID FROM (SELECT SID,GROUP_CONCAT(CID ORDER BY CID ) AS gc FROM SC GROUP BY SID )a WHERE a.gc = (SELECT GROUP_CONCAT(CID ORDER BY CID) FROM SC WHERE SID = '01') AND a.SID <>'01')
解題思路:
STUDENT 為學生表 有 SID 和 其他學生信息
SC為成績表 有 課程CID 和 SID 關聯
先查回SC 表 獲取 SID 和 對應所選課程 按一答定順序排序的 CID 字元串的拼接(如 學號01 選了課程 01 02 03 那麼對CID進行字元串拼接 成 學號 :01 gc:01,02,03 格式 )然後獲取 01 學生的gc 字元串 , 再獲取其他gc = 01 學生的gc 排除 01的 SID 最後 查 STUDENT 信息 根據獲取的 SID 到此結束。

㈢ 求同時選修了001和002號課程的學生號

第一個正確。
第一個結果是選修了001和002課的學生。
第二個結果還要包括成績相同

㈣ 資料庫查詢 查詢「001」課程比「002」課程成績高的所有學生的學號

分析如下:

--1selectSC1.S#fromSCSC1JOINSCSC2ONSC1.S#=SC2.S#

WHERESC1.C#='001'ANDSC2.C#='002'ANDSC1.score>SC2.score

--2selectS#,AVG(score)

平均成績fromSCgroupbyS#

havingAVG(score)>60--3selectStudent.S#,

Sname,COUNT(*)選課數,SUM(score)總成績

fromStudentJOINSConStudent.S#=SC.S#

groupbyStudent.S#,Sname

(4)查詢001課程比002課程擴展閱讀:

資料庫操作的注意事項

1、對查詢進行優化,要盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。

2、應盡量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:select id from t where num is null

最好不要給資料庫留NULL,盡可能的使用NOT NULL填充資料庫.

備注、描述、評論之類的可以設置為NULL,其他的,最好不要使用NULL。

不要以為NULL不需要空間,比如:char(100)型,在欄位建立時,空間就固定了,不管是否插入值(NULL也包含在內),都是佔用100個字元的空間的,如果是varchar這樣的變長欄位,null不佔用空間。

可以在num上設置默認值0,確保表中num列沒有null值,然後這樣查詢:select id from t where num = 0

3、應盡量避免在 where 子句中使用 != 或 <> 操作符,否則將引擎放棄使用索引而進行全表掃描。

4、應盡量避免在 where 子句中使用 or 來連接條件,如果一個欄位有索引,一個欄位沒有索引,將導致引擎放棄使用索引而進行全表掃描,如:select id from t where num=10 or Name = 'admin'

可以這樣查詢:
select id from t where num = 10
union all
select id from t where Name = 'admin'

5、in 和 not in 也要慎用,否則會導致全表掃描,如:select id from t where num in(1,2,3)

對於連續的數值,能用 between 就不要用 in 了:select id from t where num between 1 and 3

很多時候用exists 代替 in是一個好的選擇:select num from a where num in(select num from b)

用下面的語句替換:select num from a where exists(select 1 from b where num=a.num)

6、下面的查詢也將導致全表掃描:select id from t where name like 『%abc%』

若要提高效率,可以考慮全文檢索。

7、如果在 where 子句中使用參數,也會導致全表掃描。因為SQL只有在運行時才會解析局部變數,但優化程序不能將訪問計劃的選擇推遲到運行時;它必須在編譯時進行選擇。然 而,如果在編譯時建立訪問計劃,變數的值還是未知的,因而無法作為索引選擇的輸入項。

㈤ 使用sql語言查詢下列語句,特急,求答案,謝謝了

很簡單 但這也太多了 !
別說一個都不會啊
還沒分,那會有人給你做啊
你挑出幾個不會的 再問吧

㈥ 關於sql語句:查詢學過「001」並且也學過編號「002」課程的同學的學號、姓名;

這個語句前抄半段您能理解吧襲,即【 select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001' 】,這段是篩選出學過『001』課程的學生姓名和學號,而後半段【 and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002') 】則是判斷該學生是否也學過『002』課程,留意SC表自連接這一段,即【 where SC_2.S#=SC.S# 】這個是關鍵,正是因為有了這個條件,所以才把整條語句的前半段和後半段的結果結合起來,如果沒有這個條件的話就會變成,你所說的『返回值恆等於true』。

簡單來說就是,前半段是【學過『001』課程的學生】,後半段是【學過『002』課程的學生】;其中【 where SC_2.S#=SC.S# 】是把前後兩段結果連接起來的關鍵,相當於把兩個結果 Inner Join,從而得出最終結果【同時學過『001』和『002』的學生】。

㈦ 怎麼查詢「001」課程比「002」課程成績高的所有學生的學號表結構如下:

select a.sid, a.score as score1,b.score as score2 from (select * from scoretable where cid='001') a
left join
(select * from scoretable where cid='002')b
on a.sid=b.sid
where a.score>b.score

㈧ sql 查詢課程為001的成績大於課程為002成績的學生

select * from table where 001成績>002成績
你不說你的表結構,也只能寫這個了

㈨ 用sql語言進行查詢

親,你這個也太高難度了吧,幫你解答完,都不知道需要多少時間啊,最好是自己做吧

熱點內容
幼師專業怎麼樣 發布:2021-03-16 21:42:13 瀏覽:24
音樂小毛驢故事 發布:2021-03-16 21:40:57 瀏覽:196
昂立中學生教育閘北 發布:2021-03-16 21:40:47 瀏覽:568
建築業一建報考條件 發布:2021-03-16 21:39:53 瀏覽:666
2017年教師資格注冊結果 發布:2021-03-16 21:39:49 瀏覽:642
中國教師資格證查分 發布:2021-03-16 21:39:41 瀏覽:133
踵什麼成語有哪些 發布:2021-03-16 21:38:20 瀏覽:962
東營幼師專業學校 發布:2021-03-16 21:35:26 瀏覽:467
機械電子研究生課程 發布:2021-03-16 21:33:36 瀏覽:875
杭州朝日教育培訓中心怎麼樣 發布:2021-03-16 21:33:28 瀏覽:238