zoukankan      html  css  js  c++  java
  • oracle 增删改查

    -- 将'扳手'和'钳子'的商品名称分别改为'16号扳手'和'小号钳子', 并将这两个商品的管理人员都改为'赵六'
    UPDATE product p SET p.pname='16号扳手' , p.toma='赵六' WHERE p.pname='扳手';
    UPDATE product p SET p.pname='小号钳子' , p.toma='赵六' WHERE p.pname='钳子';
    COMMIT;
    -- 查询商品类型为'a'的所有商品, 并按照售价由大到小排序
    SELECT p.*, nvl(p.outprice, 0) price
    FROM product p WHERE p.ptype='a' ORDER BY price DESC
    -- 查询王五负责的c类商品
    SELECT * FROM product p WHERE p.ptype='c' AND p.toma='王五'
    -- 查询剩余数量小于50的所有商品
    SELECT * FROM product p WHERE p.lastcou < 50
    -- 查询剩余数量在60-80之间的所有商品
    SELECT * FROM product p WHERE p.lastcou > 60 AND p.lastcou<80
    SELECT * FROM product p WHERE p.lastcou BETWEEN 60 AND 80
    -- 查询商品名称带'笔'的和带'鱼'的记录
    SELECT * FROM product p WHERE p.pname LIKE '%笔%' OR p.pname LIKE '%鱼%'
    -- 查询商品编号中带'tt'的记录
    SELECT * FROM product p WHERE p.pcode LIKE '%tt%'
    -- 查询商品类型为a, d, c的所有商品
    SELECT * FROM PRODUCT P WHERE P.PTYPE = 'a' OR P.PTYPE = 'b' OR P.PTYPE = 'c'
    SELECT * FROM product p WHERE p.ptype IN ('a','b','c')
    -- 查询商品编号重复的记录, 并将他们删除
    DELETE product p3 WHERE p3.id IN(SELECT p1.id FROM product p1, product p2
    WHERE p1.id!=p2.id AND p1.pcode=p2.pcode)
    DELETE .... SELECT p.pcode, COUNT(*) FROM product p GROUP BY p.pcode HAVING COUNT(*) > 1
    -- 查询整个表中每一类商品的剩余数量, 并按照剩余数由大到小排序
    SELECT p.ptype, SUM(p.lastcou) FROM product p GROUP BY p.ptype
    -- 查询所有'e'类型商品, 并按照剩余库存数量排序
    SELECT * FROM product p WHERE p.ptype='e' ORDER BY p.lastcou
    -- 查询管理商品数少于4的管理员名称和管理的商品数量
    SELECT p.toma, COUNT(p.pname) FROM product p GROUP BY p.toma HAVING COUNT(p.pname) < 4
    -- 查询所有的管理员名称和其手上所管理的所有商品数量
    SELECT p.toma, SUM(p.lastcou) FROM product p GROUP BY p.toma
    -- 查询所有的管理员名称和其手上所管理的所有'a'类商品名称的数量
    SELECT p.toma, SUM(p.lastcou) FROM product p WHERE p.ptype='a' GROUP BY p.toma
    -- 查询管理商品编号为"f-qq46"和"f-2164"的管理员所管理的所有商品信息
    SELECT * FROM product p2 WHERE p2.toma IN
    (SELECT p.toma FROM product p WHERE p.pcode IN ('f-qq46','f-2164'))
    -- 查询所有商品中剩余数量最少的一个
    SELECT * FROM product p WHERE p.lastcou <= ALL(SELECT lastcou FROM product)
    SELECT * FROM product p WHERE p.lastcou=(SELECT MIN(lastcou) FROM product)
    -- 查询生产日期在2015/5/31之前的数据
    SELECT * FROM product p WHERE p.createtime < to_date('2015/5/31','yyyy/mm/dd')
    -- 假设所有商品的有效期是一年(按365天), 以当前是2017-06-01为标准, 查询所有商品的信息并且加一列标注是否过期
    SELECT p.*, CASE WHEN to_date('2017-06-01','yyyy-mm-dd') - p.createtime > 365 THEN '过期' ELSE '未过期' END FROM product p
    -- 将所有过期的商品的有效标志改为0
    UPDATE product p SET p.mark=0 WHERE to_date('2017-06-01','yyyy-mm-dd') - p.createtime > 365

    -- 查询所有商品中还有一个月就过期的商品(一个月按照30天计算)
    SELECT * FROM product p WHERE p.createtime+30 >to_date('2017-06-01','yyyy-mm-dd')
    -- 查询每个管理员所管理的商品的平均进价价格和售价价格
    SELECT p.toma, AVG(nvl(p.inprice,0)), AVG(nvl(p.outprice,0)) FROM product p GROUP BY p.toma
    -- 查询每个管理员手上的商品的利润的平均值
    SELECT p.toma, AVG(nvl(p.outprice,0)-nvl(p.inprice,0)) FROM product p GROUP BY p.toma
    -- 查询假设每个管理员把所有商品售完后各自的利润总和
    SELECT P.TOMA, SUM(P.LASTCOU * (P.OUTPRICE - P.INPRICE))
    FROM (SELECT *
    FROM PRODUCT R
    WHERE R.INPRICE IS NOT NULL
    AND R.OUTPRICE IS NOT NULL) P
    GROUP BY P.TOMA
    -- 查询出利润总和最高的管理员的名称, 以及利润
    WITH rr AS
    (SELECT P.TOMA, SUM(P.LASTCOU * (P.OUTPRICE - P.INPRICE)) lirun
    FROM (SELECT *
    FROM PRODUCT R
    WHERE R.INPRICE IS NOT NULL
    AND R.OUTPRICE IS NOT NULL) P
    GROUP BY P.TOMA)
    SELECT * FROM rr WHERE rr.lirun=(SELECT MAX(rr.lirun) FROM rr)

    select t.*, t.rowid from STUDENT t
    --1、 查询Student表中的所有记录的Sname、Ssex和Class列。
    SELECT s.sname,s.ssex,s.class FROM student s;
    --2、 查询教师所有的单位即不重复的Depart列。
    SELECT * FROM teacher
    SELECT distinct(t.depart) FROM teacher t
    --3、 查询Student表的所有记录。
    SELECT * FROM student;
    --4、 查询Score表中成绩在60到80之间的所有记录。
    SELECT * FROM student s ,score sc WHERE s.sno=sc.sno AND sc.degree BETWEEN 60 AND 80
    --5、 查询Score表中成绩为85,86或88的记录。
    SELECT * FROM score sc WHERE sc.degree IN(85,86,88)
    --6、 查询Student表中“95031”班或性别为“女”的同学记录。
    SELECT * FROM student s WHERE s.class='95031' OR s.ssex='女'
    --7、 以Class降序查询Student表的所有记录。
    SELECT * FROM student ORDER BY CLASS DESC
    --8、 以Cno升序、Degree降序查询Score表的所有记录。
    SELECT * FROM score s ORDER BY s.cno ASC ,s.degree DESC
    --9、 查询“95031”班的学生人数。
    --SELECT FROM student s WHERE s.class='95031'
    SELECT COUNT(*) FROM student s WHERE s.class='95031' GROUP BY s.class
    --10、查询Score表中的最高分的学生学号和课程号。
    WITH aa AS(
    SELECT sd.sno,sd.sname,s.degree FROM score s JOIN student sd ON s.sno=sd.sno)
    SELECT aa.* FROM aa WHERE aa.degree>=ALL(SELECT aa.degree FROM aa)
    --11、查询‘3-105’号课程的平均分。
    SELECT avg(s.degree) FROM score s WHERE s.cno='3-105' GROUP BY s.cno
    --12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
    SELECT AVG(s.sno) FROM score s WHERE s.cno LIKE'3%' GROUP BY s.cno HAVING COUNT(*)>=5
    --13、查询最低分大于70,最高分小于90的Sno列。
    SELECT s.sno FROM score s WHERE s.degree BETWEEN 70 AND 90 GROUP BY s.sno
    --14、查询所有学生的Sname、Cno和Degree列。
    SELECT s.sname,sc.cno,sc.DEGREE FROM student s JOIN score sc ON s.sno=sc.sno
    --15、查询所有学生的Sno、Cname和Degree列。
    SELECT s.sno,j.cname,sc.DEGREE FROM student s , score sc , course j WHERE s.sno=sc.sno AND sc.cno=j.cno--join on 怎么用
    --16、查询所有学生的Sname、Cname和Degree列。
    SELECT sname, cname , DEGREE FROM student s JOIN score sc ON s.sno=sc.sno JOIN course j ON sc.cno=j.cno
    --17、查询“95033”班所选课程的平均分。
    SELECT * FROM score
    SELECT AVG(sc.degree) FROM student st JOIN score sc ON st.sno=sc.sno WHERE CLASS='95033' ORDER BY st.class
    --18、假设使用如下命令建立了一个grade表:
    create table grade
    (low number,
    upp number,
    rank char(1));
    insert into grade values(90,100,'A');
    insert into grade values(80,89,'B');
    insert into grade values(70,79,'C');
    insert into grade values(60,69,'D');
    insert into grade values(0,59,'E');
    commit;
    --现查询所有同学的Sno、Cno和rank列。
    SELECT * FROM grade
    SELECT st.sno,sc.cno,CASE WHEN sc.degree BETWEEN 90 AND 100 THEN 'a'
    WHEN sc.degree BETWEEN 80 AND 89 THEN 'b'
    WHEN sc.degree BETWEEN 70 AND 79 THEN 'c'
    WHEN sc.degree BETWEEN 60 AND 69 THEN 'd'
    WHEN sc.degree BETWEEN 0 AND 59 THEN 'd'
    END RANK
    FROM student st JOIN score sc ON st.sno=sc.sno
    --SELECT CASE WHEN sc.degree BETWEEN 90 AND 100 THEN 'a' END FROM score sc
    --19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
    SELECT *
    FROM STUDENT ST
    JOIN SCORE SC
    ON ST.SNO = SC.SNO
    WHERE SC.DEGREE > (SELECT SCO.DEGREE
    FROM SCORE SCO
    WHERE SCO.SNO = '109'
    AND SCO.CNO = '3-105')
    AND SC.CNO = '3-105'


    /*SELECT *
    FROM STUDENT ST
    JOIN SCORE SC
    ON ST.SNO = SC.SNO
    WHERE SC.DEGREE > (SELECT SCO.DEGREE FROM SCORE SCO WHERE SCO.SNO = '109')
    AND SC.CNO = '3-105' GROUP BY sc.cno*/


    --20、查询score中选学一门以上课程的同学中分数为非最高分成绩的记录。
    SELECT sc.sno ,COUNT(sc.cno) FROM score sc WHERE sc.degree>=ANY(sc.degree) GROUP BY sc.sno HAVING COUNT(sc.cno)>1 --有问题
    --21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
    SELECT *
    FROM STUDENT ST
    JOIN SCORE SC
    ON ST.SNO = SC.SNO
    WHERE SC.DEGREE > (SELECT sco.degree
    FROM SCORE SCo
    WHERE SCo.SNO = '109'
    AND SCo.CNO = '3-105')
    AND sc.cno='3-105'
    --22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
    SELECT STr.SNO, STr.SNAME, STr.SBIRTHDAY
    FROM STUDENT str
    WHERE STr.SBIRTHDAY >
    (SELECT ST.SBIRTHDAY FROM STUDENT ST WHERE ST.SNO = '108')
    --23、查询“张旭“教师任课的学生成绩。
    SELECT *
    FROM STUDENT STU
    JOIN SCORE SC
    ON STU.SNO = SC.SNO
    WHERE SC.CNO = (SELECT CO.CNO
    FROM COURSE CO
    JOIN TEACHER T
    ON CO.TNO = T.TNO
    WHERE T.TNAME = '张旭')
    --24、查询选修某课程的同学人数多于5人的教师姓名。
    --SELECT * FROM course
    SELECT *
    FROM TEACHER TE
    JOIN COURSE CO
    ON TE.TNO = CO.TNO
    WHERE CO.CNO =
    (SELECT SC.CNO FROM SCORE SC GROUP BY SC.CNO HAVING COUNT(SC.SNO) > 5)
    --25、查询95033班和95031班全体学生的记录。
    SELECT * FROM student stu JOIN score sco ON stu.sno=sco.sno WHERE stu.class IN('95033','95031')--不明确
    --26、查询存在有85分以上成绩的课程Cno.
    SELECT * FROM score sco WHERE sco.degree>85
    --27、查询出“计算机系“教师所教课程的成绩表。
    SELECT * FROM course WHERE sc.
    (SELECT te.tno FROM teacher te WHERE te.depart='计算机系')
    --28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。
    --29、查询选修编号为“3-105“且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
    SELECT * FROM score sco WHERE sco.degree>
    (sELECT MIN(sc.degree) FROM score sc WHERE sc.cno='3-105' GROUP BY sc.cno ) AND sco.cno='3-105' ORDER by sco.degree DESC
    --30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”的同学的Cno、Sno和Degree.
    SELECT * FROM score sco WHERE sco.degree>
    (SELECT MAX(sc.degree) FROM score sc WHERE sc.cno='3-245') AND sco.cno='3-105'
    --31、查询所有教师和同学的name、sex和birthday.
    SELECT ST.SNAME, ST.SSEX,st.sbirthday, T.TNAME, T.TSEX, T.TBIRTHDAY
    FROM STUDENT ST
    JOIN SCORE SCO
    ON ST.SNO = SCO.SNO
    JOIN COURSE COU
    ON SCO.CNO = COU.CNO
    JOIN TEACHER T
    ON COU.TNO = T.TNO

    --32、查询所有“女”教师和“女”同学的name、sex和birthday.
    SELECT * FROM score sco WHERE sco.degree>
    (SELECT MAX(sc.degree) FROM score sc WHERE sc.cno='3-245') AND sco.cno='3-105'
    --31、查询所有教师和同学的name、sex和birthday.
    SELECT ST.SNAME, ST.SSEX,st.sbirthday, T.TNAME, T.TSEX, T.TBIRTHDAY
    FROM STUDENT ST left
    JOIN SCORE SCO
    ON ST.SNO = SCO.SNO
    JOIN COURSE COU
    ON SCO.CNO = COU.CNO
    JOIN TEACHER T
    ON COU.TNO = T.TNO
    WHERE st.ssex='女' AND t.tsex='女'

    --33、查询成绩比该课程平均成绩低的同学的成绩表。
    WITH rr AS
    (SELECT sco.cno,AVG(sco.degree) dd FROM score sco GROUP BY sco.cno)
    SELECT * FROM score sc JOIN rr r ON sc.cno=r.cno WHERE sc.degree<r.dd
    --34、查询所有任课教师的Tname和Depart.
    SELECT t.tname,
    FROM TEACHER T
    JOIN COURSE COU
    ON t.tno=cou.tno
    JOIN SCORE SO
    ON COU.CNO = SO.SNO


    --34、查询所有任课教师的Tname和Depart.
    SELECT * FROM teacher t WHERE t.tno IN(
    SELECT distinct(t.tno) FROM score sc JOIN course cou ON sc.cno=cou.cno JOIN teacher t ON cou.tno=t.tno )
    --35、查询所有未讲课的教师的Tname和Depart.
    SELECT * FROM teacher t WHERE t.tno NOT IN(
    SELECT distinct(t.tno) FROM score sc JOIN course cou ON sc.cno=cou.cno JOIN teacher t ON cou.tno=t.tno )
    --36、查询至少有2名男生的班号。
    SELECT stu.class FROM student stu WHERE stu.ssex='男' GROUP BY stu.class HAVING COUNT(stu.ssex)>=2
    --37、查询Student表中不姓“王”的同学记录。
    SELECT * FROM student stu WHERE stu.sname NOT LIKE '王%'
    --38、查询Student表中每个学生的姓名和年龄。
    SELECT stu.sname,(to_char(SYSDATE,'yyyy')-to_char(stu.sbirthday,'yyyy'))年龄 FROM student stu
    --SELECT to_char(stu.sbirthday,'yyyy-mm-dd') FROM student stu
    --39、查询Student表中最大和最小的Sbirthday日期值。
    SELECT MAX(stu.sbirthday),MIN(stu.sbirthday)FROM student stu
    --40、以班号和年龄从大到小的顺序查询Student表中的全部记录。

    SELECT stu.*,(to_char(SYSDATE,'yyyy')-to_char(stu.sbirthday,'yyyy')) FROM student stu ORDER BY (to_char(SYSDATE,'yyyy')-to_char(stu.sbirthday,'yyyy')) DESC,stu.CLASS DESC

    --41、查询“男”教师及其所上的课程。
    SELECT * FROM teacher t JOIN course cou ON t.tno=cou.tno AND t.tsex='男'
    --42、查询最高分同学的Sno、Cno和Degree列。
    SELECT * FROM student stu JOIN score sco ON stu.sno=sco.sno WHERE sco.degree=(
    SELECT MAX(sc.degree) FROM score sc)
    --43、查询和“李军”同性别的所有同学的Sname.
    SELECT * FROM student st WHERE st.ssex=(
    SELECT stu.ssex FROM student stu WHERE stu.sname='李军')
    --44、查询和“李军”同性别并同班的同学Sname.
    SELECT *
    FROM STUDENT ST
    WHERE ST.SSEX = (SELECT STU.SSEX FROM STUDENT STU WHERE STU.SNAME = '李军')
    AND ST.CLASS =
    (SELECT STU.CLASS FROM STUDENT STU WHERE STU.SNAME = '李军')
    --45、查询所有选修“计算机导论”课程的“男”同学的成绩表
    SELECT *
    FROM SCORE SC
    JOIN COURSE COU
    ON SC.CNO = COU.CNO
    JOIN STUDENT ST
    ON ST.SNO = SC.SNO
    WHERE COU.CNAME = '计算机导论'
    AND ST.SSEX = '男'

    --题目
    --练习开始(共35道题):
    --(一)简单查询
    --查询学生表中的所有内容
    SELECT * FROM z_student
    --查询学生表中的姓名,专业
    SELECT stu.name,stu.major FROM z_student stu
    --查询学生表中各种专业
    SELECT distinct(stu.major) FROM z_student stu
    --查询表中前五个同学的姓名,专业
    SELECT stu.*,ROWNUM FROM z_student stu WHERE ROWNUM<6
    --查询各学生的学号和姓名以及截止到现在各学生的年龄
    SELECT stu.code,stu.name ,(to_char(SYSDATE,'yyyy')-to_char(stu.birthday,'yyyy'))年龄 FROM z_student stu
    --查询专业为国际新闻的学生的所有信息
    SELECT * FROM z_student stu ,z_course cou WHERE stu.major=cou.cour_code AND cou.cour_name LIKE '%国际新闻%'
    --查询1991年出生的学生姓名和专业
    SELECT stu.name,cou.cour_name FROM z_student stu,z_course cou WHERE stu.major=cou.cour_code AND stu.birthday LIKE '%91%'
    --查询历史, 广告, 国际新闻专业的所有学生信息
    SELECT STU.NAME, COU.COUR_NAME
    FROM Z_STUDENT STU, Z_COURSE COU
    WHERE STU.MAJOR = COU.COUR_CODE
    AND COU.COUR_NAME LIKE '%广告%'
    OR COU.COUR_NAME LIKE '%国际新闻专业%'
    OR COU.COUR_NAME LIKE '%历史%'
    --查询姓名是两个字的姓王, 姓陈, 姓李的所有学生信息
    SELECT * FROM z_student stu WHERE stu.name LIKE '王_' OR stu.name LIKE '陈_' OR stu.name LIKE '李_'
    --查询没有学分的学生信息
    SELECT * FROM z_student
    exists(select ... where ..=.. )
    --查询计算机专业的没有记录生日的学生信息
    SELECT * FROM z_student stu WHERE stu.birthday IS NULL AND
    --查询按照专业降序,学号升序排列所有学生信息
    SELECT * FROM z_student stu ORDER BY stu.major ASC ,stu.code DESC
    --查询表中前三个的学生的姓名,专业,到现在的年龄并按照年龄降序排列
    SELECT STU.*,
    ROWNUM,
    (TO_CHAR(SYSDATE, 'yyyy') - TO_CHAR(STU.BIRTHDAY, 'yyyy')) 年龄
    FROM Z_STUDENT STU
    WHERE ROWNUM < 4
    ORDER BY (TO_CHAR(SYSDATE, 'yyyy') - TO_CHAR(STU.BIRTHDAY, 'yyyy'))
    --(二)数据汇总
    --查询所有的课程代码和每个课程的平均成绩并按照课程号排序,再剔除课程代码不是C-ADV-240的课程
    SELECT *
    FROM Z_STUDENT STU
    JOIN Z_STU_COUR ZSC
    ON STU.CODE = ZSC.STU_CODE
    WHERE ZSC.COUR_CODE != 'C-ADV-240'

    --查询出每个课程代码的最高分和最低分

    SELECT zsc.cour_code 课程,MAX(zsc.agree)最高分,MIN(zsc.agree)最低分 FROM z_stu_cour zSC GROUP BY zsc.cour_code

    --查询学号为stu-1023的学生的各课成绩

    SELECT * FROM z_student stu JOIN z_stu_cour zsc ON stu.code=zsc.stu_code WHERE stu.code='stu-1023'

    --查询出历史学专业有多少人
    SELECT * FROM z_course

    SELECT *
    FROM Z_STU_COUR ZSC
    JOIN Z_COURSE COU
    ON ZSC.COUR_CODE = COU.COUR_CODE
    WHERE COU.COUR_NAME = '历史学专业'
    GROUP BY COU.COUR_NAME
    --查询各专业各有多少人
    SELECT COU.COUR_NAME, COUNT(ZSC.STU_CODE)
    FROM Z_STU_COUR ZSC
    JOIN Z_COURSE COU
    ON ZSC.COUR_CODE = COU.COUR_CODE
    GROUP BY COU.COUR_NAME
    --查询出各专业里男女生各有多少人
    SELECT zc.cour_name,decode(zst.sex,1,'男',2,'女'),COUNT(zst.name)
    FROM Z_STU_COUR ZSC
    JOIN Z_COURSE ZC
    ON ZSC.COUR_CODE = ZC.COUR_CODE
    JOIN Z_STUDENT ZST
    ON ZSC.STU_CODE = ZST.CODE
    GROUP BY zc.cour_name,zst.sex

    SELECT * FROM z_stu_cour stc WHERE stc.cour_code='C-LAU-104'
    --查询出学生所有课程的平均分在50分以上的学生学号
    SELECT ZSC.STU_CODE
    FROM Z_STU_COUR ZSC
    GROUP BY ZSC.STU_CODE
    HAVING AVG(ZSC.AGREE) > 50
    --查询每个学生有几门课成绩高于80分
    SELECT ZSC.STU_CODE, COUNT(ZSC.COUR_CODE)
    FROM Z_STU_COUR ZSC
    WHERE ZSC.AGREE > 80
    GROUP BY ZSC.STU_CODE
    --(三)连接查询
    --查询所有学生的学号,姓名,专业课程号,成绩
    SELECT STU.CODE, STU.NAME, ZC.COUR_CODE, ZSC.AGREE
    FROM Z_STU_COUR ZSC
    JOIN Z_COURSE ZC
    ON ZC.COUR_CODE = ZSC.COUR_CODE
    JOIN Z_STUDENT STU
    ON STU.CODE = ZSC.STU_CODE
    --查询课程号为C-HIS-336的学生的姓名和成绩
    SELECT *
    FROM Z_STUDENT ZST
    JOIN Z_STU_COUR ZSC
    ON ZST.CODE = ZSC.STU_CODE
    WHERE ZSC.COUR_CODE = 'C-HIS-336'
    --查询选修广告学专业的基础美术这门课程的学生学号,姓名,成绩
    SELECT *
    FROM Z_STU_COUR ZSC
    JOIN Z_COURSE ZC
    ON ZSC.COUR_CODE = ZC.COUR_CODE
    JOIN Z_STUDENT ZST
    ON ZSC.STU_CODE = ZST.CODE
    WHERE ZC.COUR_NAME = '基础美术'
    --查询选修课程号为C-NEWS-101这门课的所有学生信息和成绩
    SELECT *
    FROM Z_STU_COUR ZSC
    JOIN Z_COURSE ZC
    ON ZSC.COUR_CODE = ZC.COUR_CODE
    JOIN Z_STUDENT ZST
    ON ZSC.STU_CODE = ZST.CODE
    WHERE ZC.COUR_CODE = 'C-NEWS-101'
    --查询生日是同一天的学生信息
    --SELECT * FROM z_student zst WHERE zst.birthday=ANY(SELECT zs.birthday FROM z_student zs)
    SELECT * FROM z_student zstud WHERE zstud.name IN(
    SELECT ZST.NAME
    FROM Z_STUDENT ZST, Z_STUDENT ZSTU
    WHERE ZST.BIRTHDAY = ZSTU.BIRTHDAY
    GROUP BY ZST.NAME
    HAVING COUNT(ZST.BIRTHDAY) > 1)
    --查询各课的课程名,课程号,每门课所有学生的平均成绩
    SELECT ZC.COUR_NAME, ZC.COUR_CODE,AVG(ZSC.AGREE)
    FROM Z_STU_COUR ZSC
    JOIN Z_COURSE ZC
    ON ZSC.COUR_CODE = ZC.COUR_CODE
    GROUP BY ZC.COUR_NAME, ZC.COUR_CODE
    --查询所有学生的平均成绩

    WITH rr AS
    (SELECT zsc.stu_code,AVG(zsc.agree) FROM z_stu_cour zsc GROUP BY zsc.stu_code)
    SELECT * FROM rr r JOIN z_student zs ON r.stu_code=zs.code
    --查询每个专业的每个课程的平均分是多少
    /*SELECT *
    FROM Z_COURSE ZC
    LEFT JOIN Z_COURSE ZCU
    ON ZC.COUR_CODE = ZCU.P_COUR_CODE
    CONNECT BY PRIOR ZC.COUR_CODE = ZCU.P_COUR_CODE
    START WITH 'NEWS-100'*/

    SELECT ZC.COUR_NAME, AVG(ZST.AGREE)
    FROM Z_STU_COUR ZST
    JOIN Z_COURSE ZC
    ON ZST.COUR_CODE = ZC.COUR_CODE
    GROUP BY ZC.COUR_NAME
    --查询平均分大于40分的国际新闻专业的每个学生姓名,学号和各课的平均分
    SELECT * FROM z_student zst JOIN z_stu_cour zsc ON zst.code=zsc.stu_code WHERE zsc.agree>40 and
    --(四)子查询的使用
    --查询平均分大于等于课程号为C-ADV-239的课程号和平均分
    SELECT ZSCO.COUR_CODE, AVG(ZSCO.AGREE)
    FROM Z_STU_COUR ZSCO
    GROUP BY ZSCO.COUR_CODE
    HAVING AVG(ZSCO.AGREE) > (SELECT AVG(ZSC.AGREE)
    FROM Z_STU_COUR ZSC
    WHERE ZSC.COUR_CODE = 'C-ADV-239')
    --查询历史学专业下的课程的及格率(课程得分在50以上的人数除以总人数)
    SELECT * FROM z_course zc
    WITH aa AS(
    SELECT zc.cour_name,COUNT(ztc.agree)hja
    FROM Z_STU_COUR ZTC
    JOIN Z_COURSE ZC
    ON ZTC.COUR_CODE = ZC.COUR_CODE
    WHERE zc.p_cour_code =(SELECT ACOUR.COUR_CODE
    FROM Z_COURSE ACOUR
    WHERE ACOUR.COUR_NAME = '历史学专业')AND ztc.agree>50 GROUP BY zc.cour_name)
    SELECT aa.cour_name,aa.hja/bb.hj FROM (
    SELECT zc.cour_name,COUNT(ztc.agree) hj
    FROM Z_STU_COUR ZTC
    JOIN Z_COURSE ZC
    ON ZTC.COUR_CODE = ZC.COUR_CODE
    WHERE zc.p_cour_code =(SELECT ACOUR.COUR_CODE
    FROM Z_COURSE ACOUR
    WHERE ACOUR.COUR_NAME = '历史学专业') GROUP BY zc.cour_name)bb JOIN aa ON bb.cour_name=aa.cour_name

    --查询没有选修C-NEWS-101这门课程的学生信息和课程信息
    SELECT * FROM z_student zstu JOIN z_stu_cour zsco ON zstu.code=zsco.stu_code WHERE zsco.cour_code !='C-NEWS-101'
    --查询没有课程成绩的学生信息
    select * from z_student zst exists(select * from z_stu_cour zstc where zst. )

  • 相关阅读:
    Practice II 字符串
    Euleriar Path 入门
    2-SAT 入门
    Practice I 图论
    游戏中寻找学习JAVA的乐趣之坦克大战系列5-坦克的动态参数
    JQuery教程:实现轮播图效果
    HTML表格应用
    菜鸟Vue学习笔记(三)
    Java成神路上之设计模式系列教程之一
    JVM垃圾回收机制之对象回收算法
  • 原文地址:https://www.cnblogs.com/gaofangquan/p/7357423.html
Copyright © 2011-2022 走看看