比较复杂的数据库查询案例,建表语句和测试数据[通俗易懂]

比较复杂的数据库查询案例,建表语句和测试数据[通俗易懂]比较复杂的数据库查询案例,建表语句和测试数据

大家好,又见面了,我是你们的朋友全栈君。

create DATABASE test
CREATE TABLE Student ( S VARCHAR(64), Sname VARCHAR(64) ,Sage INT, Ssex VARCHAR(2), PRIMARY KEY (S) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE Course ( C VARCHAR(64),Cname VARCHAR(64), T VARCHAR(64) ) engine=InnoDb DEFAULT charset=utf8;
CREATE TABLE SC ( S VARCHAR(64), C VARCHAR(64), score INT) engine=InnoDB DEFAULT CHARSET=UTF8;
CREATE TABLE Teacher ( T VARCHAR(64), Tname VARCHAR(64) ) engine=Innodb DEFAULT charset=utf8;

insert into test.course (C,Cname,T) VALUES('001','数学','001');
insert into test.course (C,course.Cname,course.T) values('002','语文','002'),('003','英语','003');

insert into test.sc (sc.C,sc.score,sc.S) values('001',50,'001'),('001',90,'002'),
                                        ('002',77,'001'),('002',99,'002'),
                                        ('003',100,'001'),('003',33,'002');
insert INTO test.teacher (T,Tname) VALUES('001','刘老师'),('002','王老师'),('003','丧老师');
insert INTO test.teacher (T,Tname) VALUES('004','刘老师')
insert into test.student (student.S,student.Sage,student.Sname,student.Ssex) values('01',12,'小明','男'),('02',12,'小红','女');
insert into test.student (student.S,student.Sage,student.Sname,student.Ssex) values('03',13,'小花','女');
insert into test.student (student.S,student.Sage,student.Sname,student.Ssex) values('04',13,'小绿','女');

查询条件:

//15、删除学习“丧老师”老师课的SC表记录:
delete from test.sc where c=
(select c from test.teacher,test.course where teacher.T=course.T and teacher.Tname='丧老师')
        
//14、查询和“02”号的同学学习的课程完全相同的其他同学学号和姓名:
select s,student.Sname from test.student
        where student.s  in (select s from test.sc where c in (select c from sc where s='02')
        group by s having count(*) =(select count(*) from sc where s='02')) and s !='02'
//13、把“SC”表中“刘老师”老师教的课的成绩都更改为此课程的平均成绩:
update Sc set  score =(
        select a.aa from (
                select avg(sc2.score) aa from sc sc2 ,course where sc2.c=course.c
                       ) a)
        where c in 
                (select c from test.course cs inner join test.teacher th on cs.T=th.T and th.Tname='刘老师')
//12、查询至少学过学号为“01”同学所有一门课的其他同学学号和姓名;
select DISTINCT student.S,student.Sname from test.student,test.sc
        where student.s=sc.S
                and sc.c in(select c from test.course where sc.S='01')
//11、查询至少有一门课与学号为“01”同学所学相同的同学的学号和姓名:
SELECT DISTINCT(student.s),student.Sname from test.student,test.sc,test.course
        where student.s = sc.s
                and sc.C in (select c from sc where sc.s='01')
//10、查询没有学全所有课的同学的学号、姓名:
select student.s,student.Sname from test.student,test.sc
        where sc.s=student.s 
                group by student.s,student.Sname
                        having count(sc.c)<(select count(*) from test.course)
//9、查询所有课程成绩小于60的同学的学号、姓名:
select student.s,student.Sname from test.student
        where student.S not in (select student.s from test.student ,sc where student.s=sc.S and sc.score >60);
//8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名:

//7、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名:
select student.s,student.Sname from test.student,test.sc where student.s=sc.s and sc.c='001'and
        EXISTS (select * from sc as sc_2 where sc_2.S=sc.S and sc_2.c='002')
//6、查询学过“刘老师”老师所教的所有课的同学的学号、姓名:
select student.s,student.Sname from test.student 
        where s  in 
                (select sc.s from sc,test.course,test.teacher where sc.c=course.c and teacher.t=course.t and teacher.Tname='刘老师')
//5、查询没有学过“刘老师”老师可的同学的学号、姓名:
select student.s,student.Sname from test.student 
        where s not in 
                (select sc.s from sc,test.course,test.teacher where sc.c=course.c and teacher.t=course.t and teacher.Tname='刘老师')
//4查询姓‘刘’的老师的个数:
select count(distinct(teacher.Tname)) num from test.teacher where teacher.Tname like '刘%'
//1查询“001”课程比“002”课程成绩高的所有学生的学号
select a.s from 
        (SELECT S,score FROM test.sc WHERE sc.C='001') a ,(select S,sc.score from test.sc where sc.C='002')b 
                where a.score>b.score and a.S=b.S
//1.2查询“001”课程比“002”课程成绩高的所有学生的姓名                        
select * from test.student where student.S=
       ( select a.s from 
                (SELECT S,score FROM test.sc WHERE sc.C='001') a ,(select S,sc.score from test.sc where sc.C='002')b 
                        where a.score>b.score and a.S=b.S)
 //2查询平均成绩大于60分的同学的学号和平均成绩
select sc.s, avg(score) from test.sc group by sc.S having avg(Score)>60 
//3、查询所有同学的学号、姓名、选课数、总成绩    
select student.S,student.Sname,count(sc.C),sum(sc.score)from test.student  
        left outer JOIN test.sc on student.S= sc.S   
                GROUP BY student.S,student.Sname                

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106210.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 目前计算机常用的CPU型号,价格差异太大了!教你选择CPU型号及常见CPU后缀字母详解…[通俗易懂]

    目前计算机常用的CPU型号,价格差异太大了!教你选择CPU型号及常见CPU后缀字母详解…[通俗易懂]价格差异太大了!教你选择CPU型号及常见CPU后缀字母详解2020-05-2610:30:4012点赞20收藏1评论很多想要买电脑或笔记本的朋友,经常会看到配置介绍信息中,CPU处理器经常都有U、K、H等等之类的后缀字母,很多不太熟悉硬件的朋友可能就比较困惑,这些字母到底代表着什么意思,为什么仅仅只是后缀字母的不同,然后价格就相差几百上千呢?今天就详细为大家介绍常见CPU后缀字母所代表的的含义,…

    2022年5月29日
    47
  • SpringBoot基础之MockMvc单元测试

    SpringBoot基础之MockMvc单元测试SpringBoot创建的Maven项目中,会默认添加spring-boot-starter-test依赖。在《5分钟快速上手SpringBoot》中编写的单元测试使用了MockMvc。本篇文章就围绕MockMvc在SpringBoot中的使用进行讲解。什么是Mock在面向对象的程序设计中,模拟对象(英语:mockobject)是以可控的方式模拟真实对象行为的假对象。在编程过程中,通常通过模…

    2025年8月18日
    2
  • Cisco AAA 认证 总结「建议收藏」

    Cisco AAA 认证 总结「建议收藏」Authentication认证一:使用本地数据库R1>enR1(config)#aaanew-model(打开aaa认证)R1(config)#aaaauthenticationlogindefaultlocal配置任何登入采用Local本地用户数据库R1(config)#usernamebd…

    2022年6月1日
    37
  • java saxreader 字符串_Java SAXReader.read方法代碼示例

    java saxreader 字符串_Java SAXReader.read方法代碼示例本文整理匯總了Java中org.dom4j.io.SAXReader.read方法的典型用法代碼示例。如果您正苦於以下問題:JavaSAXReader.read方法的具體用法?JavaSAXReader.read怎麽用?JavaSAXReader.read使用的例子?那麽恭喜您,這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類org.dom4j.io.SAXRea…

    2022年6月22日
    45
  • MacBook Pro最全快捷键指南——高效型选手必备

    MacBook Pro最全快捷键指南——高效型选手必备剪切、拷贝、粘贴和其他常用快捷键Command-X:剪切所选项并拷贝到剪贴板。Command-C:将所选项拷贝到剪贴板。Command-V:将剪贴板的内容粘贴到当前文稿或应用中。Command-Z:撤销前一个命令。随后您可以按Command-Shift-Z来重做,从而反向执行撤销命令。Command-A:全选各项。Command-F:查找文稿中的项目或打开“查找”窗…

    2022年5月25日
    48
  • python3两数相加

    python3两数相加

    2021年4月18日
    138

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号