日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sql复杂查询语句总结

發(fā)布時間:2025/6/15 编程问答 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql复杂查询语句总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本人總結(jié)了數(shù)據(jù)庫查詢中一些比較復(fù)雜的查詢,如鏈表查詢,多重子查詢,連表查詢+子查詢等,由于技術(shù)有限,并沒有太多考慮sql語句的優(yōu)化,如有不足之處,敬請諒解。

先來看看表結(jié)構(gòu):

[sql]?view plaincopyprint?
  • create?table?student(??
  • sno?varchar2(10)?primary?key,??
  • sname?varchar2(20),??
  • sage?number(2),??
  • ssex?varchar2(5)??
  • );??
  • create?table?teacher(??
  • tno?varchar2(10)?primary?key,??
  • tname?varchar2(20)??
  • );??
  • create?table?course(??
  • cno?varchar2(10),??
  • cname?varchar2(20),??
  • tno?varchar2(20),??
  • constraint?pk_course?primary?key?(cno,tno)??
  • );??
  • create?table?sc(??
  • sno?varchar2(10),??
  • cno?varchar2(10),??
  • score?number(4,2),??
  • constraint?pk_sc?primary?key?(sno,cno)??
  • );??
  • #/*******初始化學(xué)生表的數(shù)據(jù)******/??
  • insert?into?student?values?('s001','張三',23,'男');??
  • insert?into?student?values?('s002','李四',23,'男');??
  • insert?into?student?values?('s003','吳鵬',25,'男');??
  • insert?into?student?values?('s004','琴沁',20,'女');??
  • insert?into?student?values?('s005','王麗',20,'女');??
  • insert?into?student?values?('s006','李波',21,'男');??
  • insert?into?student?values?('s007','劉玉',21,'男');??
  • insert?into?student?values?('s008','蕭蓉',21,'女');??
  • insert?into?student?values?('s009','陳蕭曉',23,'女');??
  • insert?into?student?values?('s010','陳美',22,'女');??
  • commit;??
  • #/******************初始化教師表***********************/??
  • insert?into?teacher?values?('t001',?'劉陽');??
  • insert?into?teacher?values?('t002',?'諶燕');??
  • insert?into?teacher?values?('t003',?'胡明星');??
  • commit;??
  • #/***************初始化課程表****************************/??
  • insert?into?course?values?('c001','J2SE','t002');??
  • insert?into?course?values?('c002','Java?Web','t002');??
  • insert?into?course?values?('c003','SSH','t001');??
  • insert?into?course?values?('c004','Oracle','t001');??
  • insert?into?course?values?('c005','SQL?SERVER?2005','t003');??
  • insert?into?course?values?('c006','C#','t003');??
  • insert?into?course?values?('c007','JavaScript','t002');??
  • insert?into?course?values?('c008','DIV+CSS','t001');??
  • insert?into?course?values?('c009','PHP','t003');??
  • insert?into?course?values?('c010','EJB3.0','t002');??
  • commit;??
  • #/***************初始化成績表***********************/??
  • insert?into?sc?values?('s001','c001',78.9);??
  • insert?into?sc?values?('s002','c001',80.9);??
  • insert?into?sc?values?('s003','c001',81.9);??
  • insert?into?sc?values?('s004','c001',60.9);??
  • insert?into?sc?values?('s001','c002',82.9);??
  • insert?into?sc?values?('s002','c002',72.9);??
  • insert?into?sc?values?('s003','c002',81.9);??
  • insert?into?sc?values?('s001','c003',59);??
  • 下面是一些擦尋要求及解答:

    [sql]?view plaincopyprint?
  • #注意:以下練習(xí)中的數(shù)據(jù)是根據(jù)初始化到數(shù)據(jù)庫中的數(shù)據(jù)來寫的SQL?語句,請大家務(wù)必注意。??
  • #???
  • #???
  • #1、查詢“c001”課程比“c002”課程成績高的所有學(xué)生的學(xué)號;??
  • select?*??from?sc?a,?sc?b?where?a.sno=b.sno?and?a.cno='c001'?and?b.cno='c002'?and?a.score>b.score;??
  • #2、查詢平均成績大于60?分的同學(xué)的學(xué)號和平均成績;??
  • select?st.sname,ss.sco?from?student?st,(select?sno,avg(score)sco?from?sc?group?by?sno)ss?where?st.sno=ss.sno?and?sco>=60;??
  • #3、查詢所有同學(xué)的學(xué)號、姓名、選課數(shù)、總成績;??
  • select?st.sname,ss.*?from?student?st,(select?sno,count(score)sco,sum(score)?from?sc?group?by?sno)ss?where?st.sno=ss.sno;??
  • #4、查詢姓“劉”的老師的個數(shù);??
  • select?count(*)?from?teacher?where?tname?like?'%劉%';??
  • #5、查詢沒學(xué)過“諶燕”老師課的同學(xué)的學(xué)號、姓名;??
  • select?sc.sno,acno.*?from?sc?sc,(select?co.cno?from?course?co,(select?tno?from?teacher?where?tname='諶燕')tn?where?co.tno<>tn.tno)acno?where?acno.cno=sc.cno;??
  • #6、查詢學(xué)過“c001”并且也學(xué)過編號“c002”課程的同學(xué)的學(xué)號、姓名;??
  • select?sa.sname,sc.sno?from?sc?sc,(select?st.sname,s.*?from?student?st,(select?sno,cno?from?sc?where?cno?in('c001'))s?where?st.sno=s.sno)sa?where?sc.sno=sa.sno?and?sc.cno='c002';??
  • #7、查詢學(xué)過“諶燕”老師所教的所有課的同學(xué)的學(xué)號、姓名;??
  • select?distinct?st.sname?from?student?st,sc?sc?join?(select?cno?from?teacher?te?join?course?co?on(te.tno=co.tno)?where?te.tname='諶燕')aca?on(sc.cno=aca.cno)?where?st.sno=sc.sno;???
  • #9、查詢所有課程成績小于60?分的同學(xué)的學(xué)號、姓名;??
  • select?st.sname,sc.sno?from?student?st?join?sc?sc?on(st.sno=sc.sno)where?sc.score<60;??
  • #10、查詢沒有學(xué)全所有課的同學(xué)的學(xué)號、姓名;??
  • select?sname,st.sno,scn.cn?from?student?st?join?(select?distinct?sno,count(*)cn?from?sc?group?by?sc.sno)scn?on(st.sno=scn.sno)?where?scn.cn=(select?distinct?count(cno)?from?course);??
  • select?st.sname,st.sno?from?student?st?join?(select?sc.sno?sn,count(sc.cno)?cou?from?sc?group?by?sc.sno)?scs?on?st.sno=scs.sn?where?scs.cou?<(select?count(cno)?from?course);??
  • #11、查詢至少有一門課與學(xué)號為“s001”的同學(xué)所學(xué)相同的同學(xué)的學(xué)號和姓名;??
  • select?distinct?st.sno,?sname??
  • ??from?student?st??
  • ??join?sc?sc?on?(st.sno?=?sc.sno)??
  • ?where?sc.cno?in?(select?cno?from?sc?where?sno?=?'s001')?and?sc.sno<>'s001';??
  • [sql]?view plaincopyprint?
  • #13、把“SC”表中“諶燕”老師教的課的成績都更改為此課程的平均成績;??
  • #update?sc?sc?set?sc.score=update?sc?sc?set?sc.score=(select?tc.cno,round(avg(sc.score),2)av?from?(select?*?from?teacher?te?join?course?co?on(te.tno=co.tno)?where?te.tname='諶燕')tc?join?sc?sc?on(tc.cno=sc.cno)?group?by?tc.cno)cnn.score?where?sc.cno=cnn.av;??
  • select?tc.cno,round(avg(sc.score),2)?from?(select?*?from?teacher?te?join?course?co?on(te.tno=co.tno)?where?te.tname='諶燕')tc?join?sc?sc?on(tc.cno=sc.cno)?group?by?tc.cno;??
  • #14、查詢和“s001”號的同學(xué)學(xué)習(xí)的課程完全相同的其他同學(xué)學(xué)號和姓名;??
  • select?cno?from?sc?where?sno='s001';??
  • #15、刪除學(xué)習(xí)“諶燕”老師課的SC?表記錄;??
  • delete?from?sc?where?sc.cno?in(select?cno?from?teacher?te?join?course?co?on(te.tno=co.tno)?where?te.tname='諶燕')??
  • #17、查詢各科成績最高和最低的分:以如下形式顯示:課程ID,最高分,最低分??
  • select?cno,max(score),min(score)?from?sc?group?by?cno;??
  • #18、按各科?平均成績?從?低到高?和?及格率的百分?jǐn)?shù)?從高到低順序??
  • #select?count(score)?from?sc?where?score>=60?group?by?cno?;??
  • select?cno,avg(score)acs,savg.cnu,(count(score)-savg.cnu)/count(score)*100?from?sc,??
  • (select?count(score)cnu,avg(score)acs2?from?sc?where?score<60?order?by?acs2?desc)savg???
  • group?by?savg.cnu,cno?order?by?acs?desc;??
  • #21、查詢各科成績前三名的記錄:(不考慮成績并列情況)??
  • select?*?from?(select?S.*,rownum?rn?from?(select?*?from?sc?order?by?score?desc)S?where?rownum<=3)where?rn>=1;??
  • #22、查詢每門課程被選修的學(xué)生數(shù)??
  • select?cno,count(cno)?from?sc?group?by?cno;??
  • #23、查詢出只選修了一門課程的全部學(xué)生的學(xué)號和姓名??
  • select?st.sname,st.sno?from?student?st?join???
  • (select?distinct?sc.*?from?sc?sc?join?(select?sno,count(cno)cnum?from?sc?group?by?sno)ss?on(sc.sno=ss.sno)?where?ss.cnum=1)ssb???
  • on(st.sno=ssb.sno);??
  • #24、查詢男生、女生人數(shù)??
  • select?ssex,count(ssex)?from?student?st?group?by?ssex;??
  • #25、查詢姓“張”的學(xué)生名單??
  • select?sname?from?student?where?sname?like?'%張%';??
  • #26、查詢同名同性學(xué)生名單,并統(tǒng)計同名人數(shù)??
  • select?st.*?from?student?st?join?(select?sname,count(sname)cnum?from?student?group?by?sname)scomm?on(st.sname=scomm.sname)?where?scomm.cnum>1;??
  • #27、1981?年出生的學(xué)生名單(注:Student?表中Sage?列的類型是number)??
  • select?*?from?student?where?to_char(sysdate,'yyyy')-sage?='1981';??
  • #28、查詢每門課程的平均成績,結(jié)果按平均成績升序排列,平均成績相同時,按課程號降序排列??
  • select?cno,avg(score)lim?from?sc?group?by?cno?order?by?lim?asc;??
  • #29、查詢平均成績大于85?的所有學(xué)生的學(xué)號、姓名和平均成績??
  • select?st.sname,st.sno,savg.lim?from?student?st?join?(select?sno,avg(score)lim?from?sc?group?by?sno)savg?on(st.sno=savg.sno)?where?savg.lim>85;??
  • #30、查詢課程名稱為“數(shù)據(jù)庫”,且分?jǐn)?shù)低于60?的學(xué)生姓名和分?jǐn)?shù)??
  • select?distinct?st.sname,cs.score?from?student?st?join?(select?*?from?course?co?join?sc?sc?on(co.cno=sc.cno))cs?on(st.sno=cs.sno)where?cs.score<60?and?cs.cname='數(shù)據(jù)庫';??
  • #31、查詢所有學(xué)生的選課情況;??
  • select?distinct?st.sname,cs.cname?from?student?st?join?(select?*?from?course?co?join?sc?sc?on(co.cno=sc.cno))cs?on(st.sno=cs.sno);??
  • #32、查詢?nèi)魏我婚T課程成績在70?分以上的姓名、課程名稱和分?jǐn)?shù);??
  • select?distinct?st.sname,cs.score,cs.cname?from?student?st?join?(select?*?from?course?co?join?sc?sc?on(co.cno=sc.cno))cs?on(st.sno=cs.sno)where?cs.score>70;??
  • #33、查詢不及格的課程,并按課程號從大到小排列??
  • select?*?from?sc?where?score<60?order?by?sno?desc;??
  • #34、查詢課程編號為c001?且課程成績在80?分以上的學(xué)生的學(xué)號和姓名;??
  • select?st.sname,st.sno?from?student?st?join?(select?*?from?sc?where?cno='c001'?and?score>80)snum?on(st.sno=snum.sno);??
  • #35、求選了課程的學(xué)生人數(shù)??
  • select?count(ss.sno)?from?(select?distinct?sno?from?sc)ss;??
  • #36、查詢選修“諶燕”老師所授課程的學(xué)生中,成績最高的學(xué)生姓名及其成績??
  • select?st.sname,cnum.score?from?student?st?join??
  • (select?distinct?*?from?sc?sc?where?cno?in(select?distinct?cno?from?course?co?join???
  • (select?tno?from?teacher?where?tname='諶燕')ten?on(co.tno=ten.tno))?order?by?score?desc)cnum?on(st.sno=cnum.sno)?where?rownum=1;??
  • #37、查詢各個課程及相應(yīng)的選修人數(shù)??
  • #(select?cno,count(cno)?from?sc?group?by?cno);??
  • select?co.cname,cns.cnum?from?course?co?join?(select?cno,count(cno)cnum?from?sc?group?by?cno)cns?on(co.cno=cns.cno);??
  • #39、查詢每門功課成績最好的前兩名??
  • select?cno?from?sc?order?by?score?desc?group?by?cno;??
  • #40、統(tǒng)計每門課程的學(xué)生選修人數(shù)(超過10?人的課程才統(tǒng)計)。要求輸出課程號和選修人數(shù),查詢結(jié)果按人數(shù)降序排列,若人數(shù)相同,按課程號升序排列??
  • #41、檢索至少選修兩門課程的學(xué)生學(xué)號??
  • select?sno?from?(select?sno,count(cno)cnum?from?sc?group?by?sno)?where?cnum>=2;??
  • #42、查詢?nèi)繉W(xué)生都選修的課程的課程號和課程名??
  • #select?count(*)?from?(select?distinct?sno?from?sc);??
  • #select?cno,count(cno)cns?from?sc?group?by?cno;??
  • #select?cno?from?(select?count(*)num?from?(select?distinct?sno?from?sc))cs1,(select?cno,count(cno)cns?from?sc?group?by?cno)cs2?where?cs2.cns=cs1.num;??
  • select?cname,scs.cno?from?course?co?join???
  • (select?cno?from?(select?count(*)num?from?(select?distinct?sno?from?sc))cs1,??
  • (select?cno,count(cno)cns?from?sc?group?by?cno)cs2?where?cs2.cns=cs1.num)scs?on(co.cno=scs.cno);??
  • #43、查詢沒學(xué)過“諶燕”老師講授的任一門課程的學(xué)生姓名??
  • #select?co.cno?from?course?co?join?(select?tno?from?teacher?where?tname='諶燕')tn?on(co.tno=tn.tno);??
  • select?sname?from?student?where?sno?not?in??
  • (select?distinct?sno?from?sc?where?cno?in(select?co.cno?from?course?co?join???
  • (select?tno?from?teacher?where?tname='諶燕')tn?on(co.tno=tn.tno)));??
  • #44、查詢兩門以上不及格課程的同學(xué)的學(xué)號及其平均成績??
  • #select?sno,count(sno),avg(score)?from?sc?where?score?<?60?group?by?sno;??
  • select?*?from?(select?sno,count(sno)cnum,avg(score)?from?sc?where?score?<?60?group?by?sno)avs?where?avs.cnum>1;??
  • #45、檢索“c004”課程分?jǐn)?shù)小于60,按分?jǐn)?shù)降序排列的同學(xué)學(xué)號??
  • select?sno?from?sc?where?cno='c004'?and?score<60?order?by?score?desc;??
  • #46、刪除“s002”同學(xué)的“c001”課程的成績??
  • delete?from?sc?where?sno='s002'?and?cno='c001'; ?
  • 總結(jié)

    以上是生活随笔為你收集整理的sql复杂查询语句总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。