SQL练习题

使用的是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

查询结果如下


解析


猜你喜欢

转载自blog.csdn.net/qq_25858235/article/details/80212067