使用的是mysql数据库 本文参考:https://blog.csdn.net/flycat296/article/details/63681089
数据———————————————————————————————
1.创建数据库
CREATE DATABASE `mytest`
2.创建course表
CREATE TABLE `course` ( `Cid` varchar(10) NOT NULL DEFAULT '' COMMENT '标题', `Cname` varchar(10) NOT NULL COMMENT '内容', `Tid` varchar(10) NOT NULL DEFAULT '' COMMENT '图片' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文章';
插入如下数据
3.创建SC表
CREATE TABLE `sc` ( `Sid` varchar(10) NOT NULL DEFAULT '' COMMENT '标题', `Cid` varchar(10) NOT NULL DEFAULT '' COMMENT '内容', `score` decimal(18,1) NOT NULL COMMENT '内容' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文章';
插入如下数据
4.创建student表
CREATE TABLE `student` ( `Sid` varchar(10) NOT NULL DEFAULT '' COMMENT '标题', `Sname` varchar(10) NOT NULL COMMENT '内容', `Sage` datetime NOT NULL COMMENT '图片', `Ssex` varchar(10) NOT NULL COMMENT '图片' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文章表';
插入如下数据
5.创建teacher表
CREATE TABLE `teacher` ( `Tid` varchar(10) NOT NULL DEFAULT '' COMMENT '标题', `Tname` varchar(10) NOT NULL COMMENT '内容' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文章';
插入如下数据
题目———————————————————————————————
1. 查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数
select C.*,A.Cid,A.score,B.Cid,B.score from (select * from sc where Cid=01)A left join (select * from sc where Cid=02)B on A.Sid=B.Sid inner join student C on B.Sid=C.Sid where B.score<A.score
查询结果如下
解析:本题采用的是左连接
2. 查询同时存在" 01 "课程和" 02 "课程的情况
select A.*,B.Cid,B.score from (select * from sc where Cid=01)A left join (select *from sc where Cid=02)B on A.Sid=B.Sid where B.Sid
查询结果如下
解析:先将sc(成绩表)里Cid(课程号)=01与Cid(课程号)=02的信息分出——>
select * from sc where Cid=01
执行语句如下图所示
select * from sc where Cid=02
执行语句如下图所示
然后用左连接left join 在学号相同的情况下将这两张表连接
得到如下表
上表显示06没有02课程的信息,所以用where Sid is not null 语句进行筛选最终得到题目所要求答案
3.查询不存在" 01 "课程但存在" 02 "课程的情况
方法一:
select B.* from (select * from sc where Cid=02)B left join (select *from sc where Cid=01)A on A.Sid=B.Sid where A.Sid is null
方法二:
select B.* from (select * from sc where Cid=01)A right join (select *from sc where Cid=02)B on A.Sid=B.Sid where A.Sid is null
方法三:
select * from sc where Sid not in (select Sid from sc where Cid=01)
4.查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
select B.* ,A.dc from ( select Sid,avg(score)dc from sc group by Sid) A inner join student B on B.Sid=A.Sid where A.dc>=60
查询结果如下
解析