Ⅰ 用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