SQL經(jīng)典45題解題思路

(補(bǔ)充至第15題)

有疑問(wèn):第9題


注:一個(gè)SQL語(yǔ)句寫完后,用“;”結(jié)尾

練習(xí)數(shù)據(jù)

--1.學(xué)生表 Student(SId,Sname,Sage,Ssex) --SId 學(xué)生編號(hào),Sname 學(xué)生姓名,Sage 出生年月,Ssex 學(xué)生性別

--2.課程表 Course(CId,Cname,TId) --CId --課程編號(hào),Cname 課程名稱,TId 教師編號(hào)

--3.教師表 Teacher(TId,Tname) --TId 教師編號(hào),Tname 教師姓名

--4.成績(jī)表 SC(SId,CId,score) --SId 學(xué)生編號(hào),CId 課程編號(hào),score 分?jǐn)?shù)


練習(xí)題目

1.? ?①查詢" 01 "課程比" 02 "課程成績(jī)高的學(xué)生的學(xué)生編號(hào)及課程分?jǐn)?shù)

②查詢同時(shí)存在" 01 "課程和" 02 "課程的情況

③查詢存在" 01 "課程但可能不存在" 02 "課程的情況(不存在時(shí)顯示為 null )

④查詢不存在" 01 "課程但存在" 02 "課程的情況

解:

①思路:先分別把有01課程和02課程的分別查詢出來(lái),查詢時(shí)使用別名AS,再把相同的學(xué)生編號(hào)的課程01和課程02成績(jī)進(jìn)行比較,即有兩個(gè)并列條件——01成績(jī)>02成績(jī),兩門成績(jī)對(duì)應(yīng)的學(xué)生編號(hào)相等

①答案:

SELECT t1.SId, t1.score AS '01',t2.score AS '02'
FROM
(SELECT SId, scoreFROM SCWHERE CId = '01' ) AS t1,
(SELECT SId, scoreFROM SCWHERE CId = '02' ) AS t2
WHERE t1.SId = t2.SId AND t1.score > t2.score;

②思路:先把01課程存在和02課程存在分別查詢出來(lái),再取兩門課同時(shí)存在,即兩門課都有相同的SId

②答案:

SELECT *
FROM
(SELECT SId,score FROM SC WHERE SC.CId=‘01’) AS t1,
(SELECT SId,score FROM SC WHERE SC.CId=‘02’) AS t2
WHERE t1.SId=t2.SId;

③思路:SId作為主鍵是一定有的,課程編號(hào)和成績(jī)不一定有,01存在02不存在,采取左聯(lián)結(jié)取交集或只有01的部分,只用保證SId一致即可

③答案:

SELECT *
FROM
(SELECT *FROM SCWHERE CId = '01' ) AS t1
LEFT JOIN
(SELECT *FROM SCWHERE CId = '02' ) AS t2
ON t1.SId = t2.SId;

④思路:課程01不存在,可以先把存在的查詢出來(lái),再用NOT IN反選出不存在的,同時(shí)并列條件課程02存在

④答案:

SELECT *
FROM SC
WHERE SC.SId NOT IN (SELECT SId FROM SC WHERE SC.CId=‘01’)
AND SC.CId=‘02’;


2.? ?查詢平均成績(jī)大于等于 60 分的同學(xué)的學(xué)生編號(hào)和學(xué)生姓名和平均成績(jī)

解:

思路:在SC表格中以平均成績(jī)大于60分為條件,檢索出學(xué)生編號(hào)SId,再以此編號(hào)為條件,在Student表格出查詢出學(xué)生姓名,同時(shí)在前一個(gè)表格中查詢出平均成績(jī),需要用INNER JOIN將兩個(gè)表連接起來(lái)

注意:INNER JOIN接ON,GROUP BY接HAVING

答案:

SELECT Student.SId,Student.Sname,score_avg
FROM Student INNER JOIN (
SELECT SC.SId,AVG(SC.score) AS score_avg
FROM SC
GROUP BY SC.SId
HAVING AVG(SC.score)>=60
) AS t1
ON Student.SId=t1.SId;

也可直接用“逗號(hào)”連接,不用INNER JOIN。選出SC表格中平均分?jǐn)?shù)高于60分的SId和平均分→連接Student表→選出題目要的三個(gè)參數(shù)

SELECT t.SId, Student.Sname, t.score_avg
FROM
(SELECT SId, AVG(score) AS score_avg FROM SCGROUP BY SIdHAVING score_avg >= 60) AS t,
Student
WHERE t.SId = Student.SId;


3.? ? 查詢?cè)?SC 表存在成績(jī)的學(xué)生信息

解:

思路1:在SC里查詢出存在成績(jī)(IS NOT NULL)的學(xué)生id→從Student表里查詢出對(duì)應(yīng)的學(xué)生信息。注意每行為一門課程的成績(jī),因此SID會(huì)存在重復(fù)的情況,查詢時(shí)注意查詢唯一值(DISTINCT)。

答案1:

SELECT Student.*
FROM Student,(SELECT Distinct SId FROM SC WHERE score IS NOT NULL) AS t
WHERE Student.SId = t.SId;


思路2:SC表中篩選出唯一值的SId→再在Student表中篩選出對(duì)應(yīng)信息

答案2:

SELECT *
FROM Student
WHERE Student.SId IN (SELECT DISTINCT SId FROM SC);


4.? ? ①查詢所有同學(xué)的學(xué)生編號(hào)、學(xué)生姓名、選課總數(shù)、所有課程的總成績(jī)(沒(méi)成績(jī)的顯示為 null )?

②查有成績(jī)的學(xué)生信息

解:

①思路:按學(xué)生編號(hào)分組,查詢出編號(hào)、選課總數(shù)、總成績(jī)(不用加限定的表名)→兩個(gè)表合并,查詢出對(duì)應(yīng)的參數(shù)

①答案:

SELECT Student.SId, Student.Sname, t.CId_count, t.score_sum
FROM Student,
(SELECT SId, SUM(score) AS score_sum, COUNT(CId) AS CId_countFROM SCGROUP BY SId) AS t
WHERE Student.SId = t.SId;

②思路:SC.score非空(IS NOT NULL),選出對(duì)應(yīng)的SId——Student的SId在其中,IN

②答案:

SELECT Student.*
FROM Student
WHERE Student.SId IN (SELECT DISTINCT SId FROM SC WHERE score IS NOT NULL);

B表比A表大時(shí)(B表為后面的子查詢),適合用EXISTS的寫法:

SELECT Student.*
FROM Student
WHERE EXISTS(SELECT * FROM SC WHERE Student.SId=SC.SId);

注:EXISTS的用法參見(jiàn)《SQL里的IN和EXISTS》


5.? ? 查詢「李」姓老師的數(shù)量

解:

思路:用%通配符找到李X,再用count函數(shù)計(jì)算數(shù)量,注意通配符要和LIKE連用

答案:

SELECT COUNT(Tname)
FROM Teacher
WHERE Tname LIKE '李%';


6.? ? 查詢學(xué)過(guò)「張三」老師授課的同學(xué)的信息

解:

思路:Teacher.Tname——Teacher.TId=Course.TId——Course.CId=SC.CId——SC.SId=Student.SId——Student.*

答案:

SELECT *
FROM Student
WHERE SId IN?
(SELECT SId FROM SC WHERE CId IN
(SELECT CId FROM Course WHERE TId IN?
(SELECT TId FROM Teacher WHERE Tname = '張三')));

可更簡(jiǎn)化一點(diǎn),直接使用AND:

SELECT DISTINCT Student.*
FROM Student, Course, Teacher, SC
WHERE Teacher.Tname = '張三'
AND Teacher.TId = Course.TId
AND Course.CId = SC.CId
AND SC.SId = Student.SId;


7.? ? 查詢沒(méi)有學(xué)全所有課程的同學(xué)的信息

解:

思路:①在Course表中利用count函數(shù)計(jì)算出課程數(shù)量 ②在SC表中,以SId分組,用count函數(shù)計(jì)算出每個(gè)學(xué)生學(xué)的課程數(shù)量 ③利用having關(guān)鍵字選出②<①的SId ④到Student表中獲取對(duì)應(yīng)信息,注意用IN

答案:

SELECT Student.*
FROM Student
WHERE Student.SId IN (
SELECT SId
FROM SC
GROUP BY SId
HAVING COUNT(CId) < (SELECT COUNT(DISTINCT CId)FROM Course));

使用內(nèi)部聯(lián)結(jié):

SELECT Student.*
FROM Student, SC
WHERE Student.SId = SC.SId
GROUP BY SC.SId
HAVING COUNT(CId) < (SELECT COUNT(DISTINCT CId)FROM Course);

以上兩種方法得出來(lái)的結(jié)果不包括什么課都沒(méi)選的同學(xué),下面利用笛卡爾積可以把什么課都沒(méi)選的同學(xué)查詢出來(lái):

SELECT DISTINCT Student.*
FROM (
(SELECT Student.SId, Course.CIdFROM Student, Course) AS t1
LEFT JOIN
(SELECT SC.SId, SC.CIdFROM SC) AS t2
ON t1.SId = t2.SId AND t1.CId = t2.CId)
,
Student
WHERE t1.SId = Student.SId AND t2.SId IS NULL;

t1:笛卡爾積——SId和CId任意組合
t2
t1 LEFT JOIN t2


8.? ? 查詢至少有一門課與學(xué)號(hào)為" 01 "的同學(xué)所學(xué)相同的同學(xué)的信息

解:

思路:內(nèi)部聯(lián)結(jié)Student和SC兩個(gè)表(一定要用WHERE Student.SId=SC.SId),找出學(xué)號(hào)01所學(xué)的課程編號(hào),之后用in關(guān)鍵字,取唯一值。

答案:

SELECT DISTINCT Student.*
FROM Student,SC
WHERE Student.SId=SC.SId
AND SC.CId IN (SELECT SC.CId FROM SC WHERE SC.SId=01)

使用自聯(lián)結(jié):

SELECT DISTINCT Student.*
FROM Student, SC AS s1, SC AS s2
WHERE Student.SId = s2.SId
AND s1.SId = '01'
AND s1.CId = s2.CId


9.? ? 查詢和" 01 "號(hào)的同學(xué)學(xué)習(xí)的課程 完全相同的其他同學(xué)的信息

注:關(guān)于此題更多思路,參見(jiàn)https://blog.csdn.net/qq_34303423/article/details/107237657

解:

思路:使用GROUP_CONCAT()函數(shù)(分組中的值拼接),把每個(gè)學(xué)生的CId按升序拼接起來(lái)進(jìn)行對(duì)比,找出拼接后CId相等的SId

答案:

SELECT Student.*
FROM Student,
(SELECT SId?FROM SC?GROUP BY SId
HAVING GROUP_CONCAT(CId ORDER BY CId) =
(SELECT GROUP_CONCAT(CId ORDER BY CId) FROM SC GROUP BY SId HAVING SId = '01')
AND SId != '01') AS t
WHERE Student.SId = t.SId


思路2:所學(xué)課程數(shù)量相等,且課程id屬于01所學(xué)的課程

【但此方法只能查找該學(xué)生學(xué)習(xí)課程數(shù)>=其他學(xué)生的情況,其他情況會(huì)出錯(cuò),比如把01改成05后出錯(cuò)】

【子集從屬關(guān)系不好操作】

答案:

SELECT DISTINCT Student.*
FROM
  (SELECT DISTINCT t1.SId
    FROM
      (SELECT SId, COUNT(SC.CId) AS CId_count
        FROM SC
        GROUP BY SC.SId) AS t1, #每個(gè)學(xué)生所學(xué)課程數(shù)量
      (SELECT COUNT(SC.CId) AS CId_01 FROM SC WHERE SId = '01') AS t2  #01學(xué)生所學(xué)課程數(shù)量
    WHERE t1.CId_count = CId_01) AS t4, #和01所學(xué)課程數(shù)量相等的學(xué)生
  SC, Student
WHERE t4.SId = Student.SId
AND Student.SId != '01'
AND SC.CId IN (SELECT CId FROM SC WHERE SId = '01') #01學(xué)生所學(xué)課程








t4:選出和05相同門數(shù)的學(xué)生


05所學(xué)課程


student
sc


10.? 查詢沒(méi)學(xué)過(guò)"張三"老師講授的任一門課程的學(xué)生姓名

解:

思路:張三老師所授課程的CId——上過(guò)對(duì)應(yīng)CId課程的學(xué)生編號(hào)SId——查詢不在上一步的SId里學(xué)生信息(NOT IN)

答案:

SELECT DISTINCT Student.SId, Student.Sname
FROM Student
WHERE SId NOT IN
(SELECT Student.SId
FROM Student, Course, Teacher, SC
WHERE Teacher.Tname = '張三'
AND Teacher.TId = Course.TId
AND SC.CId = Course.CId
AND Student.SId = SC.SId)

另一種用聯(lián)結(jié)和EXISTS 的方法:

SELECT *
FROM Student
WHERE Student.SId NOT IN (
SELECT Student.SId FROM Student LEFT JOIN SC ON Student.SId=SC.SId
WHERE EXISTS
(SELECT * FROM Teacher,Course WHERE Teacher.Tname='張三'
AND Teacher.TId=Course.TId
AND Course.CId=SC.CId))


11.? 查詢兩門及其以上不及格課程的同學(xué)的學(xué)號(hào),姓名及其平均成績(jī)

解:

思路:找出小于60分的學(xué)生ID及成績(jī)——按學(xué)生ID分組,過(guò)濾出數(shù)量大于等于2的學(xué)生ID——再?gòu)腟C表GROUP BY計(jì)算平均分?jǐn)?shù)【確保該學(xué)生所有分?jǐn)?shù)都被納入計(jì)算】

答案:注意不能把條件“score<60”放在開(kāi)始的SELECT語(yǔ)句里,應(yīng)該在后面用WHERE表示。

SELECT Student.SId, Student.Sname, AVG(SC.score)
FROM Student, SC,
 (SELECT SId,COUNT(score) AS score_c
   FROM
     (SELECT SId, score?FROM SC WHERE score < 60) AS t1
    GROUP BY SId
    HAVING score_c >= 2) AS t2? #兩門以上不及格的學(xué)生ID
WHERE Student.SId = t2.SId
AND Student.SId = SC.SId
GROUP BY SC.SId


12.? 檢索" 01 "課程分?jǐn)?shù)小于 60,按分?jǐn)?shù)降序排列的學(xué)生信息

解:

思路:最基礎(chǔ)的語(yǔ)句,把幾個(gè)條件用AND連接好即可

答案:

SELECT Student.*
FROM Student,SC
WHERE Student.SId=SC.SId
AND SC.CId='01'
AND SC.score<60
ORDER BY score DESC


13.? 按平均成績(jī)從高到低顯示所有學(xué)生的所有課程的成績(jī)以及平均成績(jī)

解:

思路:計(jì)算每位學(xué)生的平均成績(jī)——以SC為基準(zhǔn)聯(lián)結(jié)——排序

答案:

SELECT t.SId, SC.CId, SC.score, t.score_avg
FROM SC
LEFT JOIN
  (SELECT SId,AVG(score) AS score_avg
    FROM SC
    GROUP BY SId) AS t
ON t.SId = SC.SId
ORDER BY score_avg DESC

但上述方式最后生成的表格不太科學(xué),因?yàn)樵瓟?shù)據(jù)是將成績(jī)一條條導(dǎo)入的,并不是按照學(xué)生編號(hào)把成績(jī)統(tǒng)一到一條數(shù)據(jù)里,因而需要把豎向的數(shù)據(jù)橫向合并顯示。主要用到了LEFTJOIN來(lái)連接各個(gè)數(shù)據(jù),平均成績(jī)也用此方法連接。

【雖然此操作最后顯示結(jié)果是滿意的,但不好的地方在于語(yǔ)句中直接使用了CId的編號(hào)(在此操作前查看了CId的的數(shù)值),不知道是否可以不進(jìn)行此操作,即不進(jìn)行CId指定直接把豎向數(shù)據(jù)橫向合并顯示?!?/b>

答案2:

SELECT DISTINCT SC.SId,d.p AS AVG,a.score AS score_01 ,b.score AS score_02 ,c.score AS score_03
FROM SC
LEFT JOIN (SELECT SId,CId,score FROM SC WHERE CId='01') AS a
ON SC.SId=a.SId
LEFT JOIN (SELECT SId,CId,score FROM SC WHERE CId='02') AS b
ON SC.SId=b.SId
LEFT JOIN (SELECT SId,CId,score FROM SC WHERE CId='03') AS c
ON SC.SId=c.SId
LEFT JOIN (SELECT SId,AVG(score) AS p FROM SC GROUP BY SC.SId) AS d
ON SC.SId=d.SId
ORDER BY d.p

最后的查詢結(jié)果如圖所示:

LEFT JOIN

答案3:和方法2輸出結(jié)果一致,使用CASE WHEN THEN END更簡(jiǎn)潔

SELECT SId,
SUM(CASE WHEN CId = '01' THEN score ELSE NULL END) AS score_01,
SUM(CASE WHEN CId = '02' THEN score ELSE NULL END) AS score_02,
SUM(CASE WHEN CId = '03' THEN score ELSE NULL END) AS score_03,
AVG(score)
FROM SC
GROUP BY SId
ORDER BY AVG(score) DESC


14.? 查詢各科成績(jī)最高分、最低分和平均分:以如下形式顯示:課程 ID,課程 name,最高分,最低分,平均分,及格率,中等率,優(yōu)良率,優(yōu)秀率及格為>=60,中等為:70-80,優(yōu)良為:80-90,優(yōu)秀為:>=90 要求輸出課程號(hào)和選修人數(shù),查詢結(jié)果按人數(shù)降序排列,若人數(shù)相同,按課程號(hào)升序排列

解:

思路:輸出項(xiàng)——多條件判斷CASE WHEN THEN END——FROM……INNER JOIN (ON)——分組GROUP BY——排序

答案:

SELECT SC.CId AS 課程ID,Course.Cname AS 課程名,MAX(score)AS 最高分,MIN(score) AS 最低分,AVG(score) AS 平均分,count(SC.CId) AS 選修人數(shù),
SUM(CASE WHEN SC.score>=60 THEN 1 ELSE 0 END)/COUNT(*)AS 及格率,
SUM(CASE WHEN SC.score>=70 AND SC.score<80 THEN 1 ELSE 0 END)/COUNT(*)AS 中等率,
SUM(CASE WHEN SC.score>=80 AND SC.score<90 THEN 1 ELSE 0 END)/COUNT(*)AS 優(yōu)良率,
SUM(CASE WHEN SC.score>=90 THEN 1 ELSE 0 END)/COUNT(*)AS 優(yōu)秀率
FROM SC INNER JOIN Course
ON SC.CId=Course.CId
GROUP BY SC.CId
ORDER BY count(score),SC.CId ASC


運(yùn)行結(jié)果


15.? ①按各科成績(jī)進(jìn)行排序,并顯示排名, Score 重復(fù)時(shí)保留名次空缺

②按各科成績(jī)進(jìn)行排序,并顯示排名, Score 重復(fù)時(shí)合并名次

【沒(méi)太看懂這個(gè)題,暫時(shí)按①1233367 ②1233345這種理解來(lái)解答】

解:

①思路:@ 定義變量,:= 賦值,= 判定相等。IF(條件,A,B),滿足條件,返回A,不滿足返回B。

事先賦值:(SELECT @curRank := 0,@precRank := NULL, @incRank := 1) AS r?

從上往下執(zhí)行:

@curRank := IF(@prevRank =score,@curRank,@incRank) AS rank,

@incRank := @incRank + 1,

@prevRank := score

第一次執(zhí)行@curRank時(shí)@prevRank為NULL,不等于score,因此返回@incRank(此時(shí)為初始值1),隨之@incRank+1,@prevRank賦值為第一個(gè)score;第二次執(zhí)行,如果第二個(gè)score和第一個(gè)score不相等,則返回上次計(jì)算后的@incRank(即@incRank+1 = 2),如果相等,則返回上一次的@curRank(即1);……即以@incRank為循環(huán)

①答案:

SELECT SId, CId, score, rank
FROM
(SELECT *,
@curRank := IF(@prevRank =score,@curRank,@incRank) AS rank,
@incRank := @incRank + 1,
@prevRank := score
FROM SC, (SELECT @curRank := 0,@precRank := NULL, @incRank := 1) AS r
ORDER BY score DESC) AS s


②思路:使用CASE WHEN TEHN,當(dāng)@prevRank = score THEN @curRank不滿足時(shí)執(zhí)行之后的WHEN @prevRank := score THEN @curRank := @curRank + 1,依次循環(huán)

②答案:

SELECT SId, CId, score,
CASE
WHEN @prevRank = score THEN @curRank
WHEN @prevRank := score THEN @curRank := @curRank + 1
END AS rank
FROM SC, (SELECT @curRank := 0, @prevRank := NULL) AS r
ORDER BY score DESC


③附最簡(jiǎn)單的排序,直接按123456789來(lái)排序的方法:

SELECT SId, CId, score,@curRank := @curRank + 1 AS rank
FROM SC, (SELECT @curRank := 0) AS q
ORDER BY score desc

或事先用set定義好,但此方法會(huì)執(zhí)行兩次查詢,建議還是用上面的

SET @curRank := 0;
SELECT *,@curRank := @curRank + 1 AS rank
FROM SC
ORDER BY score desc


16.?① 查詢學(xué)生的總成績(jī),并進(jìn)行排名,總分重復(fù)時(shí)保留名次空缺

②查詢學(xué)生的總成績(jī),并進(jìn)行排名,總分重復(fù)時(shí)不保留名次空缺

解:

--1.學(xué)生表 Student(SId,Sname,Sage,Ssex) --SId 學(xué)生編號(hào),Sname 學(xué)生姓名,Sage 出生年月,Ssex 學(xué)生性別

--2.課程表 Course(CId,Cname,TId) --CId --課程編號(hào),Cname 課程名稱,TId 教師編號(hào)

--3.教師表 Teacher(TId,Tname) --TId 教師編號(hào),Tname 教師姓名

--4.成績(jī)表 SC(SId,CId,score) --SId 學(xué)生編號(hào),CId 課程編號(hào),score 分?jǐn)?shù)

①思路:

①答案:


②思路:

②答案:


17.? 統(tǒng)計(jì)各科成績(jī)各分?jǐn)?shù)段人數(shù):課程編號(hào),課程名稱,[100-85],[85-70],[70-60],[60-0] 及所占百分比

解:

思路:

答案:

18.? 查詢各科成績(jī)前三名的記錄

解:

思路:

答案:

19.? 查詢每門課程被選修的學(xué)生數(shù)

解:

思路:

答案:

20.? 查詢出只選修兩門課程的學(xué)生學(xué)號(hào)和姓名

解:

思路:

答案:

21.? 查詢男生、女生人數(shù)

解:

思路:

答案:

22.? 查詢名字中含有「風(fēng)」字的學(xué)生信息

解:

思路:

答案:

23.? 查詢同名同性學(xué)生名單,并統(tǒng)計(jì)同名人數(shù)

解:

思路:

答案:

24.? 查詢 1990 年出生的學(xué)生名單

解:

思路:

答案:

25.? 查詢每門課程的平均成績(jī),結(jié)果按平均成績(jī)降序排列,平均成績(jī)相同時(shí),按課程編號(hào)升序排列

解:

思路:

答案:

26.? 查詢平均成績(jī)大于等于 85 的所有學(xué)生的學(xué)號(hào)、姓名和平均成績(jī)

解:

思路:

答案:

27.? 查詢課程名稱為「數(shù)學(xué)」,且分?jǐn)?shù)低于 60 的學(xué)生姓名和分?jǐn)?shù)

解:

思路:

答案:

28.? 查詢所有學(xué)生的課程及分?jǐn)?shù)情況(存在學(xué)生沒(méi)成績(jī),沒(méi)選課的情況)

解:

思路:

答案:

29.? 查詢?nèi)魏我婚T課程成績(jī)?cè)?70 分以上的姓名、課程名稱和分?jǐn)?shù)

解:

思路:

答案:

30.? 查詢不及格的課程

解:

思路:

答案:

31.? 查詢課程編號(hào)為 01 且課程成績(jī)?cè)?80 分以上的學(xué)生的學(xué)號(hào)和姓名

解:

思路:

答案:

32.? 求每門課程的學(xué)生人數(shù)

解:

思路:

答案:

33.? 成績(jī)不重復(fù),查詢選修「張三」老師所授課程的學(xué)生中,成績(jī)最高的學(xué)生信息及其成績(jī)

解:

思路:

答案:

34.? 成績(jī)有重復(fù)的情況下,查詢選修「張三」老師所授課程的學(xué)生中,成績(jī)最高的學(xué)生信息及其成績(jī)

解:

思路:

答案:

35.? 查詢不同課程成績(jī)相同的學(xué)生的學(xué)生編號(hào)、課程編號(hào)、學(xué)生成績(jī)

解:

思路:

答案:

36.? 查詢每門功成績(jī)最好的前兩名

解:

思路:

答案:

37.? 統(tǒng)計(jì)每門課程的學(xué)生選修人數(shù)(超過(guò) 5 人的課程才統(tǒng)計(jì))

解:

思路:

答案:

38.? 檢索至少選修兩門課程的學(xué)生學(xué)號(hào)

解:

思路:

答案:

39.? 查詢選修了全部課程的學(xué)生信息

解:

思路:

答案:

40.? 查詢各學(xué)生的年齡,只按年份來(lái)算

解:

思路:

答案:

41.? 按照出生日期來(lái)算,當(dāng)前月日 < 出生年月的月日則,年齡減一

解:

思路:

答案:

42.? 查詢本周過(guò)生日的學(xué)生

解:

思路:

答案:

43.? 查詢下周過(guò)生日的學(xué)生

解:

思路:

答案:

44.? 查詢本月過(guò)生日的學(xué)生

解:

思路:

答案:

45.? 查詢下月過(guò)生日的學(xué)生

解:

思路:

答案:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 希望對(duì)大家面試有幫助,很經(jīng)典的幾道題,大家有興趣的話,歡迎大家加群討論,QQ群號(hào):295383988 問(wèn)題及描述:...
    hc愛(ài)編程閱讀 1,949評(píng)論 0 12
  • Student(Sid,Sname,Sage,Ssex) 學(xué)生表Course(Cid,Cname,Tid) 課程表...
    小爐爐閱讀 1,536評(píng)論 0 0
  • 50個(gè)常用的sql語(yǔ)句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,326評(píng)論 0 7
  • Student(S#,Sname,Sage,Ssex) 學(xué)生表 Course(C#,Cname,T#) 課程表 S...
    望l閱讀 361評(píng)論 0 0
  • 1、要體驗(yàn)時(shí)間的力量,可以找一件每天都做的事。這事不一定非得是寫作,或者是其它的什么要另身體付出很大努力之事。也可...
    dc的夢(mèng)囈閱讀 173評(píng)論 0 0

友情鏈接更多精彩內(nèi)容