當前位置:首頁 » 編程語言 » sql查詢下周生日
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql查詢下周生日

發布時間: 2023-08-20 22:32:41

Ⅰ 用sql語句查詢生日以及今日生日!!

做兩個Edit控制項名稱為:Month,Day。
查詢的時候對生日進行分解,提取日和月對比,滿足日月吻合的就是符合篩選條件的生日會員。
select * from MemberTable Where Day(Birthday) = '''+Day.text+''' and Month(Birthday) = '''+Month.text+'''

Ⅱ SQL經典50題題解

本篇文章主要是對SQL經典50題進行詳細解析。

解析包含:1、解題思路,2、考核知識點,3、答案;

首先,表結構用腦圖輸出出來,如下所示:

先進行數據准備,建表以及插入數據。

1.查詢"01"課程比"02"課程成績高的學生的信息及課程分數

解題思路:

第一步:關鍵詞有「課程編號」、「課程成績」、「學生信息」,鎖定使用表:學生表、成績表。

第二步:給出學生信息及課程分數,通過主鍵sid關聯學生表和課程表。

第三步:比較同一個學生不同課程的成績,再關聯一次課程表,利用sid、cid進行關聯。

第四步:根據題目,用where比較分數篩選結果。

考核知識點: join,where

答案:

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

解題思路:

第一步:關鍵詞有「課程編號」、「學生編號」,鎖定使用表:成績表。

第二步:分別查詢出存在" 01 "課程的學生和存在" 02 "課程的學生。

第三步:對兩個子查詢進行關聯,用sid進行左聯接。

考核知識點: where, 子查詢,left join

答案:

1.2 查詢同時存在01和02課程的情況

解題思路: 同1.1,把left join改為join

考核知識點: where, 子查詢,join

答案:

1.3 查詢選擇了02課程但沒有01課程的情況

解題思路: 類似1.1,把left join改為right join

考核知識點: where, 子查詢,right join

答案:

小結: 上面的題主要考察join、left join、right join。

2.查詢平均成績大於等於 60 分的同學的學生編號和學生姓名和平均成績

解題思路:

第一步:關鍵詞有「平均成績」、「學生編號」、「學生姓名」,鎖定使用表:成績表、學生表。

第二步:給出學生信息及課程分數,通過主鍵sid關聯學生表和課程表。。

第三步:根據題目,用group by聚合計算出平均成績,然後篩選出大於等於60分的學生。

考核知識點: join、group by、avg()

答案:

3.查詢在 SC 表存在成績的學生信息

解題思路:

第一步:關鍵詞有「SC」、「學生信息」,鎖定使用表:成績表、學生表。

第二步:用EXISTS判斷在SC表存在成績的學生信息

考核知識點: EXISTS語句

答案:

4.查詢所有同學的學生編號、學生姓名、選課總數、所有課程的成績總和

解題思路:

第一步:關鍵詞有「學生編號」、「學生姓名」、「選課總數」、「課程成績」,鎖定使用表:成績表、學生表。

第二步:通過主鍵sid關聯學生表成績表,得到學生信息、學生成績的寬表

第三步:根據題目,用group by聚合計算選課總數和總成績

考核知識點: left join、group by、count()、sum()、ifnull()

答案:

5.查詢「李」姓老師的數量

解題思路:

第一步:關鍵詞有「老師的數量」,鎖定使用表:教師表。

第二步:先篩選出「李」姓老師,再匯總統計「李」姓老師的數量

考核知識點: like、where、%、count()

答案:

6.查詢學過「張三」老師授課的同學的信息

解題思路:

第一步:關鍵詞有「老師」、「學生信息」,鎖定使用表:教師表、學生表、成績表、課程表。

第二步:通過sid關聯學生表、成績表,再通過cid關聯課程表,最後通過tid關聯教師表。

第三步:用where篩選出「張三」老師授課的同學的信息。

考核知識點: 多重連接join

答案:

7.查詢沒有學全所有課程的同學的信息。

解題思路:

第一步:關鍵詞有「課程」、「學生信息」,鎖定使用表:學生表、成績表、課程表。

第二步:先統計學生的課程數量,再篩選出小於所有課程數量的學生。

考核知識點: left join、group by、count()

答案:

8.查詢至少有一門課與學號為" 01 "的同學所學相同的同學的信息。

解題思路:

第一步:關鍵詞有「課程」、「學生信息」,鎖定使用表:學生表、成績表。

第二步:先查詢學號「01」的同學學習的課程。

第三步:通過sid關聯學生表和成績表,獲取所有學生信息、課程信息。

第四步:用EXISTS篩選出至少1門課相同的同學信息。

考核知識點: left join、子查詢、EXISTS

答案:

9.查詢和" 01 "號的同學學習的課程完全相同的其他同學的信息

解題思路:

第一步:關鍵詞有「課程」、「學生信息」,鎖定使用表:學生表、成績表。

第二步:用「01」號的同學學習的課程左關聯學生課程表,篩選出關鏈課程數一致的其他同學的sid

第三步:通過sid關聯學生表和成績表,獲取完整的學生信息。

考核知識點: left join、子查詢、group by

答案:

10.查詢沒學過"張三"老師講授的任一門課程的學生姓名

解題思路:

第一步:關鍵詞有「老師」、「學生姓名」,鎖定使用表:學生表、成績表、課程表、教師表。

第二步:反向求解。先查詢至少學過「張三」老師講授的課程的學生sid

第三步:用NOT EXISTS篩選出不在第二步查詢結果的學生信息,。

考核知識點: 多重連接join、NOT EXISTS、子查詢

答案:

11.查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績

解題思路:

第一步:關鍵詞有「姓名」、「平均成績」,鎖定使用表:學生表、成績表。

第二步:通過sid關聯學生表和成績表,得到學生成績信息寬表

第三步:用group by聚合統計,having對聚合的結果進行篩選。

考核知識點: join、group by、having、case when語句、avg()

答案:

12.檢索" 01 "課程分數小於 60,按分數降序排列的學生信息

解題思路:

第一步:關鍵詞有「課程分數」、「學生信息」,鎖定使用表:學生表、成績表。

第二步:通過sid關聯學生表和成績表,得到學生成績信息寬表

第三步:用where篩選" 01 "課程分數小於 60的記錄,並按照分數降序排列。

考核知識點: join、where、order by

答案:

13.按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績

解題思路:

第一步:關鍵詞有「平均成績」,鎖定使用表:成績表。

第二步:用group by將學生課程的成績由行轉換為列並計算平均成績。

第三步:按照平均成績降序顯示學生的所有課程的成績以及平均成績。

考核知識點: join

答案:

14.查詢各科成績最高分、最低分和平均分,以如下形式顯示:

以如下形式顯示:課程 ID,課程 name,最高分,最低分,平均分,及格率,中等率,

優良率,優秀率

及格為>=60,中等為:70-80,優良為:80-90,優秀為:>=90

要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列

解題思路:

第一步:關鍵詞有「課程name」、「最高分」,鎖定使用表:課程表、成績表。

第二步:用group by聚合計算課程最高分、最低分、平均分。

第三步:用case語句判斷及格、中等、優良、優秀,並結合group by計算。

考核知識點: join、group by、max()、min()、avg()、sum()、case when語句

答案:

15.按各科成績進行排序,並顯示排名, Score 重復時保留名次空缺

解題思路:

第一步:關鍵詞有「各科成績」,鎖定使用表:成績表。

第二步:用rank()排名。

考核知識點: rank() over(partition by)

答案:

15.1 按各科成績進行行排序,並顯示排名, Score 重復時合並名次

解題思路:

第一步:關鍵詞有「各科成績」,鎖定使用表:成績表。

第二步:用dense_rank()排名。

考核知識點: dense_rank() over(partition by)

答案:

16.查詢學生的總成績,並進行排名,總分重復時保留名次空缺

解題思路:

第一步:關鍵詞有「總成績」,鎖定使用表:成績表。

第二步:用group by統計學生的總成績。

第三步:用left join自關聯進行排名。

考核知識點: group by、 left join

答案:

16.1 查詢學生的總成績,並進行排名,總分重復時不保留名次空缺

解題思路:

第一步:關鍵詞有「總成績」,鎖定使用表:成績表。

第二步:用group by統計學生的總成績。

第三步:用變數進行排名。

考核知識點: group by、變數

答案:

17. 統計各科成績各分數段人數:課程編號,課程名稱,[100-85],[85-70],[70-60],[60-0] 及所佔百分比

解題思路:

第一步:關鍵詞有「各科成績」、「課程名稱」,鎖定使用表:成績表、課程表。

第二步:通過cid關聯課程表和成績表,得到課程、成績信息寬表。

第三步:用group by聚合統計各分段的人數及百分比。

考核知識點: join、group by、case when條件語句

答案:

18.查詢各科成績前三名的記錄

解題思路:

第一步:關鍵詞有「各科成績」,鎖定使用表:成績表。

第二步:篩選出各科比當前成績高的人數小於3的學生記為各科的前三名。

考核知識點: 子查詢

答案:

19.查詢每門課程被選修的學生數

解題思路:

第一步:關鍵詞有「每門課程」、「學生數」,鎖定使用表:課程表、成績表。

第二步:用left join關聯課程表和成績表,再用group by分組匯總各科的學生數。

考核知識點: left join、group by

答案:

20.查詢出只選修兩門課程的學生學號和姓名

解題思路:

第一步:關鍵詞有「選修課程」、「學生姓名」,鎖定使用表:學生表、成績表。

第二步:用join關聯學生表和成績表,再用group by分組匯總每個學生的選修課程數,最後用having對分組匯總結果篩選出選修兩門課程的學生。

考核知識點: join、group by、having

答案:

21. 查詢男生、女生人數

解題思路:

第一步:關鍵詞有「男生、女生」,鎖定使用表:學生表。

第二步:通過ssex學生表用group by分組匯總男生、女生人數。

考核知識點: group by

答案:

22. 查詢名字中含有「風」字的學生信息

解題思路:

第一步:關鍵詞有「學生信息」,鎖定使用表:學生表。

第二步:用like匹配姓名中含有風」字的學生。

考核知識點: like、%

答案:

23查詢同名同性學生名單,並統計同名人數

解題思路:

第一步:關鍵詞有「學生名單」,鎖定使用表:學生表。

第二步:使用group by,匯總同名同性人數,再用having篩選出大於1的記錄

考核知識點: group by、having

答案:

24.查詢 1990 年出生的學生名單

解題思路:

第一步:關鍵詞有「學生名單」,鎖定使用表:學生表。

第二步:用where篩選出1990年出生的學生名單

考核知識點: where、year

答案:

25.查詢每門課程的平均成績,結果按平均成績降序排列,平均成績相同時,按課程編

號升序排列。

解題思路:

第一步:關鍵詞有「平均成績」,鎖定使用表:成績表。

第二步:用group by分組計算各科平均成績,再用order by完成多列排序

考核知識點: group by、order by

答案:

26.查詢平均成績大於等於 85 的所有學生的學號、姓名和平均成績

解題思路:

第一步:關鍵詞有「平均成績」、「學生姓名」,鎖定使用表:成績表、學生表。

第二步:用join關聯學生表和成績表

第三步:用group by分組匯總計算每個學生的平均成績,再用having篩選平均成績>=85的記錄

考核知識點: join、group by、having

答案:

27.查詢課程名稱為「數學」,且分數低於 60 的學生姓名和分數

解題思路:

第一步:關鍵詞有「課程名稱」、「分數」、「學生姓名」,鎖定使用表:課程表、成績表、學生表。

第二步:用join關聯學生表、成績表、課程表,再用where篩選

考核知識點: 多重join、where

答案:

28. 查詢所有學生的課程及分數情況(存在學生沒成績,沒選課的情況)

解題思路:

第一步:關鍵詞有「所有學生」、「分數」,鎖定使用表:學生表、成績表

第二步:用left join關聯學生表、成績表

考核知識點: left join

答案:

29.查詢任何一門課程成績在 70 分以上的姓名、課程名稱和分數

解題思路:

第一步:關鍵詞有「課程成績」、「姓名」、「課程名稱」,鎖定使用表:學生表、成績表、課程表

第二步:用join關聯學生表、成績表、課程表,再篩選出課程成績在70分以上的。

考核知識點: 多重join

答案:

30.查詢不及格的課程

解題思路:

第一步:關鍵詞有「不及格的課程」,鎖定使用表:成績表、課程表

第二步:關聯課程表和成績表,再條件篩選出不及格的課程信息。

考核知識點: join、where、去重

答案:

31.查詢課程編號為 01 且課程成績在 80 分以上的學生的學號和姓名

解題思路:

第一步:關鍵詞有「課程編號」、「課程成績」、「姓名」,鎖定使用表:成績表、學生表

第二步:關聯成績表和學生表,再條件篩選出結果。

考核知識點: join、where

答案:

32.求每門課程的學生人數

解題思路:

第一步:關鍵詞有「課程」、「學生人數」,鎖定使用表:成績表

第二步:用group by分組匯總各科的學生人數。

考核知識點: group by

答案:

33.成績不重復,查詢選修「張三」老師所授課程的學生中,成績最高的學生信息及其成績

解題思路:

第一步:關鍵詞有「成績」、「「張三」老師」、「學生信息」,鎖定使用表:成績表、課程表、學生表、教師表

第二步:關聯所有表,篩選出選修「張三」老師所授課程的學生。

第三步:因為成績不重復,對學生成績由高到低排序,篩選出第一行記錄。

考核知識點: 多重join、order by、limit

答案:

34.成績有重復的情況下,查詢選修「張三」老師所授課程的學生中,成績最高的學生

信息及其成績

解題思路:

第一步:關鍵詞有「成績」、「「張三」老師」、「學生信息」,鎖定使用表:成績表、課程表、學生表、教師表

第二步:關聯所有表,篩選出選修「張三」老師所授課程的學生。

第三步:因為成績有重復,先求出最高成績,再匹配最高成績對應的學生信息。

考核知識點: 多重join、max()

答案:

35.查詢不同課程成績相同的學生的學生編號、課程編號、學生成績

解題思路:

第一步:關鍵詞有「成績」,鎖定使用表:成績表

第二步:自聯接,篩選出不同課程成績相同的記錄

考核知識點: 自聯接join

答案:

36. 查詢每門成績最好的前兩名

解題思路:

第一步:關鍵詞有「成績」,鎖定使用表:成績表

第二步:自聯接,篩選出各科低於自身成績的人數為2的。

考核知識點: left join

答案:

37. 統計每門課程的學生選修人數(超過 5 人的課程才統計)。

解題思路:

第一步:關鍵詞有「選修人數」,鎖定使用表:成績表

第二步:先用group by分組匯總各科的選修人數,再條件篩選出超過5人的課程。

考核知識點: group by、having

答案:

38.檢索至少選修兩門課程的學生學號

解題思路:

第一步:關鍵詞有「兩門課程」,鎖定使用表:成績表

第二步:先用group by分組匯總每個學生的選修課程數,再用having篩選出至少2門課程的學生學號

考核知識點: group by、having

答案:

39.查詢選修了全部課程的學生信息

解題思路:

第一步:關鍵詞有「全部課程」、「學生信息」,鎖定使用表:成績表、課程表、學生表

第二步:關聯學生表和成績表,再用group by分組統計每個學生的選修課程數

第三步:最後用having篩選出等於全部課程數的學生信息。

考核知識點: join、 group by、having、子查詢

答案:

40.查詢各學生的年齡,只按年份來算

解題思路:

第一步:關鍵詞有「學生的年齡」,鎖定使用表:學生表

第二步:用year和now來統計

考核知識點: year、now

答案:

41. 按照出生日期來算,當前月日 < 出生年月的月日則,年齡減一

解題思路:

第一步:關鍵詞有「出生日期」,鎖定使用表:學生表

第二步:用timestampdiff()統計年齡

考核知識點: timestampdiff()

答案:

42.查詢本周過生日的學生

解題思路:

第一步:關鍵詞有「過生日」,鎖定使用表:學生表

第二步:用week函數

考核知識點: week()

答案:

43. 查詢下周過生日的學生

解題思路:

第一步:關鍵詞有「過生日」,鎖定使用表:學生表

第二步:用week函數

考核知識點: week()

答案:

44.查詢本月過生日的學生

解題思路:

第一步:關鍵詞有「過生日」,鎖定使用表:學生表

第二步:用month函數

考核知識點: month()

答案:

45.查詢下月過生日的學生

解題思路:

第一步:關鍵詞有「過生日」,鎖定使用表:學生表

第二步:用month函數

考核知識點: month()

答案:

Ⅲ SQL中查詢日期語句

SQL SERVER:

用函數datepart處理就可以了,示例:
select datepart(weekday,getdate()) as 周內的第幾日

select datepart(week,getdate()) as 年內的第幾周

select datepart(quarter,getdate()) as 年內的第幾季

周內的第幾日
-----------
5

(所影響的行數為 1 行)

年內的第幾周
-----------
34

(所影響的行數為 1 行)

年內的第幾季
-----------
3

(所影響的行數為 1 行)

Ⅳ sql資料庫如何計算生日

那就截取月日部分,把年拼接一個相同的值
select datediff(d,'2010-'+substring('2010-12-01',6,5),'2010-'+substring(另一個欄位,6,5))

Ⅳ 求高手解決:SQL語句查詢本周內生日的同學,以及本月內生日的同學....

本周有點麻煩, 本月很簡單

本月就是
WHERE MONTH( 生日欄位) = MONTH ( GetDate() )

本周就首先要計算出本周的第一天與最後一天

-- 本周一
set @dt1 = DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0)
-- 下周一
set @dt2 = DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()) + 1, 0)

然後一個有點復雜的 SQL
WHERE DATEADD(Year,DATEDIFF(Year,Birthday,@dt1),Birthday)
BETWEEN @dt1 AND @dt2
OR DATEADD(Year,DATEDIFF(Year,Birthday,@dt2),Birthday)
BETWEEN @dt1 AND @dt2

SQL 的解釋如下:
http://..com/question/233016367.html