說明
本文章整理了47道常見sql聯系題,包括建表語句,表結構,習題列表,解題答案都涵蓋在本文章內。文末提供了所用SQL腳本下載鏈接。所有解題答案都是本人自己寫的,廣大讀者如果在閱讀使用中,有任何問題歡迎留言,對我寫的有問題的,歡迎指正,謝謝。
數據庫:oracle11g
表結構
可使用plsql-工具-導入表,導入如下sql腳本。
學生表
Student(SId,Sname,Sage,Ssex)
SId 學生編號,Sname 學生姓名,Sage 出生年月,Ssex 學生性別
create table Student(SId varchar(10),Sname varchar(10),Sage date,Ssex varchar(10)); insert into Student values('01' , '趙雷' , to_date('1990-01-01','yyyy-mm-dd'), '男'); insert into Student values('02' , '錢電' , to_date('1990-12-21','yyyy-mm-dd') , '男'); insert into Student values('03' , '孫風' , to_date('1990-12-20','yyyy-mm-dd') , '男'); insert into Student values('04' , '李雲' , to_date('1990-12-06','yyyy-mm-dd') , '男'); insert into Student values('05' , '周梅' , to_date('1991-12-01','yyyy-mm-dd') , '女'); insert into Student values('06' , '吳蘭' , to_date('1992-01-01','yyyy-mm-dd') , '女'); insert into Student values('07' , '鄭竹' , to_date('1989-01-01','yyyy-mm-dd') , '女'); insert into Student values('09' , '張三' , to_date('2017-12-20','yyyy-mm-dd') , '女'); insert into Student values('10' , '李四' , to_date('2017-12-25','yyyy-mm-dd') , '女'); insert into Student values('11' , '李四' , to_date('2012-06-06','yyyy-mm-dd') , '女'); insert into Student values('12' , '趙六' , to_date('2013-06-13','yyyy-mm-dd') , '女'); insert into Student values('13' , '孫七' , to_date('2014-06-01','yyyy-mm-dd') , '女');
課程表
Course(CId,Cname,TId)
CId 課程編號,Cname 課程名稱,TId 教師編號
create table Course(CId varchar(10),Cname varchar(10),TId varchar(10)); insert into Course values('01' , '語文' , '02'); insert into Course values('02' , '數學' , '01'); insert into Course values('03' , '英語' , '03');
教師表
Teacher(TId,Tname)
TId 教師編號,Tname 教師姓名
create table Teacher(TId varchar(10),Tname varchar(10)); insert into Teacher values('01' , '張三'); insert into Teacher values('02' , '李四'); insert into Teacher values('03' , '王五');
成績表
SC(SId,CId,score)
SId 學生編號,CId 課程編號,score 分數
create table SC(SId varchar(10),CId varchar(10),score decimal(18,1)); insert into SC values('01' , '01' , 80); insert into SC values('01' , '02' , 90); insert into SC values('01' , '03' , 99); insert into SC values('02' , '01' , 70); insert into SC values('02' , '02' , 60); insert into SC values('02' , '03' , 80); insert into SC values('03' , '01' , 80); insert into SC values('03' , '02' , 80); insert into SC values('03' , '03' , 80); insert into SC values('04' , '01' , 50); insert into SC values('04' , '02' , 30); insert into SC values('04' , '03' , 20); insert into SC values('05' , '01' , 76); insert into SC values('05' , '02' , 87); insert into SC values('06' , '01' , 31); insert into SC values('06' , '03' , 34); insert into SC values('07' , '02' , 89); insert into SC values('07' , '03' , 98);
練習題
1 查詢 01 課程比 02 課程成績高的學生的信息及課程分數
2 查詢同時存在" 01 "課程和" 02 "課程的情況
3 查詢存在" 01 "課程但可能不存在" 02 "課程的情況(不存在時顯示為 null )
4 查詢不存在" 01 "課程但存在" 02 "課程的情況
5 查詢平均成績大於等於 60 分的同學的學生編號和學生姓名和平均成績
6 查詢所有同學的學生編號、學生姓名、選課總數、所有課程的總成績(沒成績的顯示為 null )
7 查有成績的學生信息
8 查詢「李」姓老師的數量
9 查詢「李」姓老師的數量
10 查詢沒有學全所有課程的同學的信息
11 查詢至少有一門課與學號為" 01 "的同學所學相同的同學的信息
12 查詢和" 01 "號的同學學習的課程 完全相同的其他同學的信息
13 查詢沒學過"張三"老師講授的任一門課程的學生姓名
14 查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績
15 檢索" 01 "課程分數小於 60,按分數降序排列的學生信息
16 按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績
17 查詢各科成績最高分、最低分和平均分:
以如下形式顯示:課程 ID,課程 name,最高分,最低分,平均分,及格率,中等率,優良率,優秀率
及格為>=60,中等為:70-80,優良為:80-90,優秀為:>=90
要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列
18 按各科成績進行排序,並顯示排名, Score 重復時保留名次空缺
19 查詢學生的總成績,並進行排名,總分重復時保留名次空缺
20 查詢學生的總成績,並進行排名,總分重復時不保留名次空缺
21 統計各科成績各分數段人數:課程編號,課程名稱,[100-85],[85-70],[70-60],[60-0] 及所占百分比
22 查詢各科成績前三名的記錄
21 查詢每門課程被選修的學生數
22 查詢出只選修兩門課程的學生學號和姓名
23 查詢男生、女生人數
24 查詢名字中含有「風」字的學生信息
25 查詢同名同性學生名單,並統計同名人數
26 查詢 1990 年出生的學生名單
27 查詢每門課程的平均成績,結果按平均成績降序排列,平均成績相同時,按課程編號升序排列
28 查詢平均成績大於等於 85 的所有學生的學號、姓名和平均成績
29 查詢課程名稱為「數學」,且分數低於 60 的學生姓名和分數
30 查詢所有學生的課程及分數情況(存在學生沒成績,沒選課的情況)
31 查詢任何一門課程成績在 70 分以上的姓名、課程名稱和分數
32 查詢不及格的課程
33 查詢課程編號為 01 且課程成績在 80 分以上的學生的學號和姓名
34 求每門課程的學生人數
35 成績不重復,查詢選修「張三」老師所授課程的學生中,成績最高的學生信息及其成績
36 成績有重復的情況下,查詢選修「張三」老師所授課程的學生中,成績最高的學生信息及其成績
37 查詢不同課程成績相同的學生的學生編號、課程編號、學生成績
38 查詢每門功成績最好的前兩名
39 統計每門課程的學生選修人數(超過 5 人的課程才統計)
40 檢索至少選修兩門課程的學生學號
41 查詢選修了全部課程的學生信息
42 查詢各學生的年齡,只按年份來算
43 按照出生日期來算,當前月日 < 出生年月的月日則,年齡減一
44 查詢本周過生日的學生
45 查詢下周過生日的學生
46 查詢本月過生日的學生
47 查詢下月過生日的學生
解題答案
----查詢" 01 "課程比" 02 "課程成績高的學生的信息及課程分數 SELECT ST.SID SID,ST.SNAME NAME,S1.SCORE SCORE1,S2.SCORE SCORE2 FROM (SELECT * FROM SC WHERE CID = '01') S1, (SELECT * FROM SC WHERE CID = '02') S2, STUDENT ST WHERE S1.SID = S2.SID AND S1.SCORE > S2.SCORE AND S1.SID = ST.SID; ---1.1 查詢同時存在" 01 "課程和" 02 "課程的情況 SELECT ST.SID SID,ST.SNAME NAME,S1.SCORE SCORE1,S2.SCORE SCORE2 FROM (SELECT * FROM SC WHERE CID = '01') S1, (SELECT * FROM SC WHERE CID = '02') S2, STUDENT ST WHERE S1.SID = S2.SID AND S1.SID = ST.SID; ----1.2 查詢存在" 01 "課程但可能不存在" 02 "課程的情況(不存在時顯示為 NULL ) SELECT * FROM (SELECT * FROM SC WHERE SC.CID = '01') SC1 LEFT JOIN (SELECT * FROM SC WHERE SC.CID = '02') SC2 ON SC1.SID = SC2.SID; ----1.3 查詢不存在" 01 "課程但存在" 02 "課程的情況 SELECT * FROM SC WHERE SC.SID NOT IN (SELECT SID FROM SC WHERE SC.CID = '01') AND SC.CID = '02'; ----2查詢平均成績大於等於 60 分的同學的學生編號和學生姓名和平均成績 SELECT * FROM (SELECT SC.SID SSID,ST.SNAME NAME,AVG(SC.SCORE) AV FROM STUDENT ST,SC WHERE ST.SID = SC.SID GROUP BY SC.SID ,ST.SNAME ) RS WHERE RS.AV >= 60 ORDER BY RS.AV; ---查詢所有同學的學生編號、學生姓名、選課總數、所有課程的總成績(沒成績的顯示為 NULL ) SELECT ST.SID,ST.SNAME,SCC.CIDS,SCC.SCORES FROM STUDENT ST LEFT JOIN (SELECT SC.SID SSID,ST.SNAME NAME,COUNT(SC.CID) CIDS,SUM(SC.SCORE) SCORES FROM STUDENT ST,SC WHERE ST.SID = SC.SID GROUP BY SC.SID ,ST.SNAME) SCC ON ST.SID = SCC.SSID; -- 查有成績的學生信息 SELECT SC.SID SSID,ST.SNAME NAME,COUNT(SC.CID) CIDS,SUM(SC.SCORE) SUM FROM STUDENT ST,SC WHERE ST.SID = SC.SID GROUP BY SC.SID ,ST.SNAME; --查詢「李」姓老師的數量 SELECT COUNT(*) FROM TEACHER TR WHERE TR.TNAME LIKE '李%' ; --查詢學過「張三」老師授課的同學的信息 SELECT ST.SID,ST.SNAME FROM TEACHER TR,SC,STUDENT ST,COURSE CS WHERE TR.TNAME = '張三' AND TR.TID = CS.TID AND CS.CID = SC.CID AND ST.SID = SC.SID; --查詢沒有學全所有課程的同學的信息 SELECT ST.SID,ST.SNAME FROM STUDENT ST WHERE ST.SID NOT IN( SELECT SID FROM( SELECT SID,COUNT(CID) CIDS FROM SC GROUP BY SID) NL WHERE NL.CIDS = (SELECT COUNT(CID) FROM COURSE)); --查詢至少有一門課與學號為" 01 "的同學所學相同的同學的信息 SELECT * FROM STUDENT WHERE SID IN( SELECT DISTINCT SID FROM SC WHERE CID IN( SELECT SC.CID FROM SC WHERE SC.SID = '01')); --查詢和" 01 "號的同學學習的課程 完全相同的其他同學的信息 WITH B AS (SELECT DISTINCT CID AS DISTINCT_CID FROM SC WHERE SID = '01') SELECT * FROM STUDENT WHERE SID IN ( SELECT SC.SID FROM SC LEFT JOIN B ON B.DISTINCT_CID = SC.CID GROUP BY SC.SID HAVING COUNT(SC.CID) = (SELECT COUNT(DISTINCT_CID) FROM B ) AND COUNT(B.DISTINCT_CID) = (SELECT COUNT(DISTINCT_CID) FROM B ) ); --查詢沒學過"張三"老師講授的任一門課程的學生姓名 SELECT ST.SNAME,ST.SID FROM STUDENT ST WHERE ST.SID NOT IN (SELECT SC.SID SSID FROM TEACHER TR,COURSE CS,SC WHERE TR.TNAME = '張三' AND TR.TID = CS.TID AND CS.CID = SC.CID); --查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績 WITH B AS (SELECT DISTINCT SID,COUNT(SID) NUMS FROM SC WHERE SC.SCORE < 60 GROUP BY SID) SELECT ST.* FROM STUDENT ST RIGHT JOIN B ON ST.SID = B.SID AND B.NUMS >1; --檢索" 01 "課程分數小於 60,按分數降序排列的學生信息 SELECT ST.*,SC.SCORE FROM SC,STUDENT ST WHERE SC.CID = '01' AND SC.SCORE < 60 AND ST.SID = SC.SID ORDER BY SCORE DESC; --按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績 WITH B AS (SELECT DISTINCT SID DISTINCT_SID,AVG(SCORE) AVGSCORE FROM SC GROUP BY SID) SELECT SID,CID, SCORE,B.AVGSCORE FROM SC LEFT JOIN B ON B.DISTINCT_SID = SC.SID ORDER BY B.AVGSCORE DESC,CID ASC,SID ASC; --查詢各科成績最高分、最低分和平均分: --以如下形式顯示:課程 ID,課程 NAME,最高分,最低分,平均分,及格率,中等率,優良率,優秀率 --及格為>=60,中等為:70-80,優良為:80-90,優秀為:>=90 --要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列 SELECT DISTINCT SC.CID DISTINCT_CID,CS.CNAME,COUNT(CS.CID) NUMS,MAX(SCORE) MAX_SCORE,MIN(SCORE) MIN_SCORE,ROUND(AVG(SCORE),2) AVG_SCORE, ROUND(100*SUM(CASE WHEN SC.SCORE>=60 THEN 1 ELSE 0 END)/COUNT(CS.CID),2)||'%' AS 及格率, ROUND(100*SUM(CASE WHEN SC.SCORE>=70 AND SC.SCORE <80 THEN 1 ELSE 0 END)/COUNT(CS.CID),2)||'%' AS 中等率, ROUND(100*SUM(CASE WHEN SC.SCORE>=80 AND SC.SCORE <90 THEN 1 ELSE 0 END)/COUNT(CS.CID),2)||'%' AS 優良率, ROUND(100*SUM(CASE WHEN SC.SCORE>=90 THEN 1 ELSE 0 END)/COUNT(CS.CID),2)||'%' AS 優秀率 FROM SC,COURSE CS WHERE SC.CID = CS.CID GROUP BY SC.CID,CS.CNAME ORDER BY NUMS DESC,DISTINCT_CID ASC; --按各科成績進行排序,並顯示排名, SCORE 重復時保留名次空缺 SELECT CID,SID,SCORE, RANK() OVER(PARTITION BY CID ORDER BY SCORE DESC) RANK FROM SC GROUP BY CID,SID,SCORE ORDER BY CID,SCORE DESC,RANK; --按各科成績進行排序,並顯示排名, SCORE 重復時合並名次 SELECT CID,SID,SCORE, ROW_NUMBER() OVER(PARTITION BY CID ORDER BY SCORE DESC) RANK FROM SC GROUP BY CID,SID,SCORE ORDER BY CID,SCORE DESC,RANK; --查詢學生的總成績,並進行排名,總分重復時保留名次空缺 SELECT DISTINCT A.SID ID,SUM(A.SCORE) ZF,ROW_NUMBER() OVER(ORDER BY SUM(A.SCORE) DESC) RANK FROM SC A GROUP BY SID ORDER BY SUM(SCORE) DESC; --查詢學生的總成績,並進行排名,總分重復時不保留名次空缺 SELECT DISTINCT A.SID ID,SUM(A.SCORE) ZF,RANK() OVER(ORDER BY SUM(A.SCORE) DESC) RANK FROM SC A GROUP BY SID ORDER BY SUM(SCORE) DESC; --統計各科成績各分數段人數:課程編號,課程名稱,[100-85],[85-70],[70-60],[60-0] 及所占百分比 SELECT SC.CID,CS.CNAME, SUM((CASE WHEN SC.SCORE>=85 THEN 1 ELSE 0 END)) QJ1, ROUND(SUM((CASE WHEN SC.SCORE>=85 THEN 1 ELSE 0 END))/SUM(SC.SCORE)*100,2)||'%' QJ1L, SUM((CASE WHEN SC.SCORE<85 AND SC.SCORE >=70 THEN 1 ELSE 0 END)) QJ2, ROUND(SUM((CASE WHEN SC.SCORE<85 AND SC.SCORE >=70 THEN 1 ELSE 0 END))/SUM(SC.SCORE)*100,2)||'%' QJ2L, SUM((CASE WHEN SC.SCORE<70 AND SC.SCORE >=60 THEN 1 ELSE 0 END)) QJ3, ROUND(SUM((CASE WHEN SC.SCORE<70 AND SC.SCORE >=60 THEN 1 ELSE 0 END))/SUM(SC.SCORE)*100,2)||'%' QJ3L, SUM((CASE WHEN SC.SCORE<60 THEN 1 ELSE 0 END)) QJ4, ROUND(SUM((CASE WHEN SC.SCORE<60 THEN 1 ELSE 0 END))/SUM(SC.SCORE)*100,2)||'%' QJ4L FROM COURSE CS,SC WHERE SC.CID = CS.CID GROUP BY SC.CID,CS.CNAME; --查詢各科成績前三名的記錄 SELECT * FROM (SELECT CID,SID,SCORE, RANK() OVER(PARTITION BY CID ORDER BY SCORE DESC) RANK FROM SC GROUP BY CID,SID,SCORE ORDER BY CID,SCORE DESC,RANK) B WHERE B.RANK <=3; --查詢每門課程被選修的學生數 SELECT SC.CID,CS.CNAME,COUNT(SC.SID) FROM SC,COURSE CS WHERE SC.CID = CS.CID GROUP BY SC.CID,CS.CNAME; --查詢出只選修兩門課程的學生學號和姓名 SELECT * FROM ( SELECT SC.SID,ST.SNAME,COUNT(SC.SID) NUMS FROM SC,STUDENT ST WHERE ST.SID = SC.SID GROUP BY SC.SID,ST.SNAME) B WHERE B.NUMS=2; --查詢男生、女生人數 SELECT SSEX,SUM(SID) FROM STUDENT ST GROUP BY SSEX; --查詢名字中含有「風」字的學生信息 SELECT * FROM STUDENT WHERE SNAME LIKE '%風%'; --查詢同名同性學生名單,並統計同名人數 SELECT T1.SSEX,T1.SNAME,COUNT(T1.SID) FROM STUDENT T1,STUDENT T2 WHERE T1.SNAME = T2.SNAME AND T1.SSEX = T2.SSEX AND T1.SID != T2.SID GROUP BY T1.SSEX,T1.SNAME; --查詢 1990 年出生的學生名單 SELECT * FROM STUDENT WHERE TO_CHAR(SAGE,'YYYY/MM/DD') LIKE '1990%'; --查詢每門課程的平均成績,結果按平均成績降序排列,平均成績相同時,按課程編號升序排列 SELECT SID,AVG(SCORE) AVERAGE FROM SC GROUP BY SID ORDER BY AVERAGE DESC,SID; --查詢平均成績大於等於 85 的所有學生的學號、姓名和平均成績 SELECT ST.SID,ST.SNAME,T.AVERAGE FROM STUDENT ST ,( SELECT SID,AVG(SCORE) AVERAGE FROM SC GROUP BY SID) T WHERE T.AVERAGE >=85 AND T.SID = ST.SID; --查詢課程名稱為「數學」,且分數低於 60 的學生姓名和分數 SELECT ST.SID,ST.SNAME,SC.CID,SC.SCORE FROM COURSE CS,STUDENT ST,SC WHERE CS.CNAME = '數學' AND ST.SID = SC.SID AND SC.CID = CS.CID AND SC.SCORE < 60; --查詢所有學生的課程及分數情況(存在學生沒成績,沒選課的情況) SELECT ST.SID,SC.CID,SC.SCORE FROM SC RIGHT JOIN STUDENT ST ON ST.SID = SC.SID; --查詢任何一門課程成績在 70 分以上的姓名、課程名稱和分數 SELECT SC.SID,CS.CNAME,SC.SCORE FROM SC,COURSE CS,(SELECT SID,MIN(SCORE) MIN_SCORE FROM SC GROUP BY SID) A WHERE SC.SID =A.SID AND SC.CID = CS.CID AND A.MIN_SCORE >=70 ORDER BY SC.SID; --查詢不及格的課程 SELECT SC.SID,SC.CID,CS.CNAME,SC.SCORE FROM COURSE CS , SC WHERE SC.CID = CS.CID AND SC.SCORE < 60; --查詢課程編號為 01 且課程成績在 80 分以上的學生的學號和姓名 SELECT ST.SID,ST.SNAME,SC.CID,SC.SCORE FROM STUDENT ST,SC WHERE SC.CID = '01' AND ST.SID = SC.SID AND SC.SCORE >= 80; --求每門課程的學生人數 SELECT SC.CID,COUNT(SC.CID) FROM COURSE CS LEFT JOIN SC ON CS.CID = SC.CID GROUP BY SC.CID; --成績不重復,查詢選修「張三」老師所授課程的學生中,成績最高的學生信息及其成績 SELECT ST.*,SC.SCORE FROM TEACHER TR,STUDENT ST,COURSE CS,SC WHERE SC.CID=CS.CID AND TR.TID = CS.TID AND ST.SID = SC.SID AND TR.TNAME = '張三' AND ROWNUM = 1 ORDER BY SC.SCORE DESC; --成績有重復的情況下,查詢選修「張三」老師所授課程的學生中,成績最高的學生信息及其成績 SELECT * FROM (SELECT T.SSID,T.NAME,T.SR, RANK() OVER(ORDER BY T.SR DESC) RANK FROM (SELECT ST.SID SSID,ST.SNAME NAME,SC.SCORE SR FROM TEACHER TR,STUDENT ST,COURSE CS,SC WHERE SC.CID=CS.CID AND TR.TID = CS.TID AND ST.SID = SC.SID AND TR.TNAME = '張三') T) WHERE RANK = 1; --查詢不同課程成績相同的學生的學生編號、課程編號、學生成績 SELECT SC1.SID,SC1.CID,SC1.SCORE FROM SC SC1 , SC SC2 WHERE SC1.SCORE = SC2.SCORE AND SC1.SID = SC2.SID AND SC1.CID != SC2.CID; --查詢每門功成績最好的前兩名 SELECT * FROM(SELECT SC.CID,SC.SID,SC.SCORE,RANK() OVER(PARTITION BY SC.CID ORDER BY SC.SCORE DESC) RANK FROM SC ) T WHERE T.RANK <=2; --統計每門課程的學生選修人數(超過 5 人的課程才統計)。 SELECT * FROM (SELECT SC.CID,COUNT(SC.SID) NUMS FROM SC GROUP BY SC.CID) T WHERE T.NUMS>=5; --檢索至少選修兩門課程的學生學號 SELECT * FROM (SELECT SC.SID,COUNT(SC.CID) NUMS FROM SC GROUP BY SC.SID) T WHERE T.NUMS >=2; --查詢選修了全部課程的學生信息 SELECT ST.* FROM (SELECT SC.SID SSID,COUNT(SC.CID) NUMS FROM SC GROUP BY SC.SID) T, STUDENT ST WHERE T.NUMS = (SELECT COUNT(CID) FROM COURSE) AND ST.SID = T.SSID; --查詢各學生的年齡,只按年份來算 SELECT ST.*,(SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL)-SUBSTR(TO_CHAR(ST.SAGE,'YYYY/MM/DD'),0,4) AGE FROM STUDENT ST; --按照出生日期來算,當前月日 < 出生年月的月日則,年齡減一 SELECT ST.*, (SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL)-SUBSTR(TO_CHAR(ST.SAGE,'YYYY/MM/DD'),0,4) -(CASE WHEN TO_CHAR(SYSDATE,'MMDD') > TO_CHAR(ST.SAGE,'MMDD') THEN 1 ELSE 0 END ) AGE FROM STUDENT ST; --查詢本周過生日的學生 WITH T AS (SELECT TO_CHAR(TRUNC(NEXT_DAY(SYSDATE-8,1)+1)+ROWNUM-1,'YYYYMMDD') DAYS FROM DUAL CONNECT BY ROWNUM<=TRUNC(TRUNC(NEXT_DAY(SYSDATE-8,1)+7)+1-TRUNC(NEXT_DAY(SYSDATE-8,1)+1))) SELECT ST.* FROM STUDENT ST WHERE TO_CHAR(ST.SAGE,'MMDD') IN (SELECT SUBSTR(T.DAYS,5,4) FROM T); --查詢下周過生日的學生 WITH T AS (SELECT TO_CHAR(TRUNC(NEXT_DAY(SYSDATE-8,1)+8)+ROWNUM-1,'YYYYMMDD') DAYS FROM DUAL CONNECT BY ROWNUM<=TRUNC(TRUNC(NEXT_DAY(SYSDATE-8,1)+14)+1-TRUNC(NEXT_DAY(SYSDATE-8,1)+8))) SELECT ST.* FROM STUDENT ST WHERE TO_CHAR(ST.SAGE,'MMDD') IN (SELECT SUBSTR(T.DAYS,5,4) FROM T); --查詢本月過生日的學生 SELECT ST.* FROM STUDENT ST WHERE SUBSTR(TO_CHAR(ST.SAGE,'YYYYMMDD'),5,2) = SUBSTR(TO_CHAR(SYSDATE,'YYYYMMDD'),5,2); --查詢下月過生日的學生 SELECT ST.* FROM STUDENT ST WHERE SUBSTR(TO_CHAR(ST.SAGE,'YYYYMMDD'),5,2) = SUBSTR(TO_CHAR(ADD_MONTHS(SYSDATE,1),'YYYYMMDD'),5,2);