题目

练习数据
数据表

  1. 学生表 Student(SId,Sname,Sage,Ssex)
    SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别

  2. 课程表 Course(CId,Cname,TId)
    CId 课程编号,Cname 课程名称,TId 教师编号

  3. 教师表 Teacher(TId,Tname)
    TId 教师编号,Tname 教师姓名

  4. 成绩表 SC(SId,CId,score)
    SId 学生编号,CId 课程编号,score 分数

创建测试数据

学生表 Student
create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10));

insert into Student values(‘01’ , ‘赵雷’ , ‘1990-01-01’ , ‘男’);
insert into Student values(‘02’ , ‘钱电’ , ‘1990-12-21’ , ‘男’);
insert into Student values(‘03’ , ‘孙风’ , ‘1990-05-20’ , ‘男’);
insert into Student values(‘04’ , ‘李云’ , ‘1990-08-06’ , ‘男’);
insert into Student values(‘05’ , ‘周梅’ , ‘1991-12-01’ , ‘女’);
insert into Student values(‘06’ , ‘吴兰’ , ‘1992-03-01’ , ‘女’);
insert into Student values(‘07’ , ‘郑竹’ , ‘1989-07-01’ , ‘女’);
insert into Student values(‘09’ , ‘张三’ , ‘2017-12-20’ , ‘女’);
insert into Student values(‘10’ , ‘李四’ , ‘2017-12-25’ , ‘女’);
insert into Student values(‘11’ , ‘李四’ , ‘2017-12-30’ , ‘女’);
insert into Student values(‘12’ , ‘赵六’ , ‘2017-01-01’ , ‘女’);
insert into Student values(‘13’ , ‘孙七’ , ‘2018-01-01’ , ‘女’);

科目表 Course
create table Course(CId varchar(10),Cname nvarchar(10),TId varchar(10))

insert into Course values(‘01’ , ‘语文’ , ‘02’);
insert into Course values(‘02’ , ‘数学’ , ‘01’);
insert into Course values(‘03’ , ‘英语’ , ‘03’);

教师表 Teacher
create table Teacher(TId varchar(10),Tname varchar(10))

insert into Teacher values(‘01’ , ‘张三’);
insert into Teacher values(‘02’ , ‘李四’);
insert into Teacher values(‘03’ , ‘王五’);

成绩表 SC
create table SC(SId varchar(10),CId varchar(10),score decimal(18,1))

insert into SC values(‘01’ , ‘01’ , 80);
insert into SC values(‘01’ , ‘02’ , 90);
insert into SC values(‘01’ , ‘03’ , 99);
insert into SC values(‘02’ , ‘01’ , 70);
insert into SC values(‘02’ , ‘02’ , 60);
insert into SC values(‘02’ , ‘03’ , 80);
insert into SC values(‘03’ , ‘01’ , 80);
insert into SC values(‘03’ , ‘02’ , 80);
insert into SC values(‘03’ , ‘03’ , 80);
insert into SC values(‘04’ , ‘01’ , 50);
insert into SC values(‘04’ , ‘02’ , 30);
insert into SC values(‘04’ , ‘03’ , 20);
insert into SC values(‘05’ , ‘01’ , 76);
insert into SC values(‘05’ , ‘02’ , 87);
insert into SC values(‘06’ , ‘01’ , 31);
insert into SC values(‘06’ , ‘03’ , 34);
insert into SC values(‘07’ , ‘02’ , 89);
insert into SC values(‘07’ , ‘03’ , 98);

练习题目

  1. 查询"01"课程比"02"课程成绩高的学生的信息及课程分数

  2. 查询同时存在"01"课程和"02"课程的情况和不存在"01"课程但存在"02"课程的情况

  3. 查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩

  4. 查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩

  5. 查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩

  6. 查询"李"姓老师的数量

  7. 查询学过"张三"老师授课的同学的信息

  8. 查询没学过"张三"老师授课的同学的信息

  9. 查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息

  10. 查询没学过"张三"老师讲授的任一门课程的学生姓名

  11. 查询和"01"号的同学学习的课程完全相同的其他同学的信息

答案

-- 创建库
CREATE DATABASE school;
-- 创建学生表
CREATE TABLE Student(
Sid VARCHAR(10) PRIMARY KEY, -- 学生编号
Sname VARCHAR(10),-- 学生姓名
Sage  DATETIME,-- 学生出生年月
Ssex  VARCHAR(10)-- 学生性别
)DEFAULT CHARSET = utf8;
INSERT INTO Student VALUES('01' , '赵雷' , '1990-01-01' , '男');
INSERT INTO Student VALUES('02' , '钱电' , '1990-12-21' , '男');
INSERT INTO Student VALUES('03' , '孙风' , '1990-05-20' , '男');
INSERT INTO Student VALUES('04' , '李云' , '1990-08-06' , '男');
INSERT INTO Student VALUES('05' , '周梅' , '1991-12-01' , '女');
INSERT INTO Student VALUES('06' , '吴兰' , '1992-03-01' , '女');
INSERT INTO Student VALUES('07' , '郑竹' , '1989-07-01' , '女');
INSERT INTO Student VALUES('09' , '张三' , '2017-12-20' , '女');
INSERT INTO Student VALUES('10' , '李四' , '2017-12-25' , '女');
INSERT INTO Student VALUES('11' , '李四' , '2017-12-30' , '女');
INSERT INTO Student VALUES('12' , '赵六' , '2017-01-01' , '女');
INSERT INTO Student VALUES('13' , '孙七' , '2018-01-01' , '女');SELECT * FROM Student;-- 创建教师表
CREATE TABLE Teacher(
Tid VARCHAR(10) PRIMARY KEY,-- 教师编号
Tname VARCHAR(10) -- 教师姓名
)DEFAULT CHARSET = utf8;
INSERT INTO Teacher VALUES('01' , '张三');
INSERT INTO Teacher VALUES('02' , '李四');
INSERT INTO Teacher VALUES('03' , '王五');SELECT * FROM Teacher;-- 创建课程表
CREATE TABLE Course(
Cid VARCHAR(10) PRIMARY KEY,-- 课程编号
Cname NVARCHAR(10),-- 课程名称
Tid  VARCHAR(10), -- 教师编号
FOREIGN KEY (Tid) REFERENCES Teacher(Tid)-- 外键约束
)DEFAULT CHARSET = utf8;
INSERT INTO Course VALUES('01' , '语文' , '02');
INSERT INTO Course VALUES('02' , '数学' , '01');
INSERT INTO Course VALUES('03' , '英语' , '03');SELECT * FROM Course;-- 创建成绩表
CREATE TABLE SC(
Sid VARCHAR(10), -- 学生编号
Cid VARCHAR(10),-- 课程编号
score DECIMAL(18,1),-- 学生成绩
FOREIGN KEY (Sid) REFERENCES Student(Sid),-- 外键约束
FOREIGN KEY (Cid) REFERENCES Course(Cid)
)DEFAULT CHARSET = utf8;
INSERT INTO SC VALUES('01' , '01' , 80);
INSERT INTO SC VALUES('01' , '02' , 90);
INSERT INTO SC VALUES('01' , '03' , 99);
INSERT INTO SC VALUES('02' , '01' , 70);
INSERT INTO SC VALUES('02' , '02' , 60);
INSERT INTO SC VALUES('02' , '03' , 80);
INSERT INTO SC VALUES('03' , '01' , 80);
INSERT INTO SC VALUES('03' , '02' , 80);
INSERT INTO SC VALUES('03' , '03' , 80);
INSERT INTO SC VALUES('04' , '01' , 50);
INSERT INTO SC VALUES('04' , '02' , 30);
INSERT INTO SC VALUES('04' , '03' , 20);
INSERT INTO SC VALUES('05' , '01' , 76);
INSERT INTO SC VALUES('05' , '02' , 87);
INSERT INTO SC VALUES('06' , '01' , 31);
INSERT INTO SC VALUES('06' , '03' , 34);
INSERT INTO SC VALUES('07' , '02' , 89);
INSERT INTO SC VALUES('07' , '03' , 98);SELECT * FROM SC;-- 1.查询"01"课程比"02"课程成绩高的学生的信息及课程分数
-- 首先是使用inner join查出所有有01课程的学生信息以及成绩信息
-- 以上查出来的就是一个虚拟表 ,已经是全部的01课程的学生的成绩信息和个人信息了。
-- 再以这个虚拟表联合成绩表,查出其中有02课程的学生的成绩信息
-- 再进行比较
SELECT  S.*,b.score AS 01score,c.score AS 02score FROM Student S
INNER JOIN SC b ON S.Sid=b.Sid  AND b.Cid='01'
LEFT JOIN SC c ON s.sid = c.Sid AND c.Cid='02'
WHERE b.score > c.score;-- 2.查询同时存在"01"课程和"02"课程的情况和不存在"01"课程但存在"02"课程的情况
-- 第一题
-- 第一种方法
SELECT S.* FROM SC b
INNER JOIN Student S ON S.Sid=b.Sid
WHERE b.Cid='01' AND b.Sid IN(SELECT a.Sid FROM SC a WHERE a.Cid='02');
-- 第二种方法
SELECT S.*
FROM Student S,SC a,SC b
WHERE S.Sid=a.Sid AND S.Sid=b.SidAND a.Cid='01'AND b.Cid='02';
-- 第二题
-- 第一种方法
SELECT S.* FROM SC a INNER JOIN Student S ON S.Sid = a.Sid
WHERE a.Cid = '02'
AND a.Sid NOT IN(SELECT b.Sid FROM SC b WHERE b.Cid = '01');
-- 第二种方法
SELECT S.* FROM Student S
WHERE S.Sid IN (SELECT Sid FROM SC WHERE Cid='02')
AND S.Sid NOT IN (SELECT Sid FROM SC WHERE Cid='01');-- 3.查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
SELECT S.Sid,S.Sname,AVG(a.score) AS average
FROM SC a,Student S
WHERE a.Sid=S.sid
GROUP BY a.Sid
HAVING average>=60;-- 4.查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩
SELECT S.Sid,S.Sname,AVG(a.score) AS average
FROM SC a,Student S
WHERE a.Sid = S.Sid
GROUP BY a.Sid
HAVING average<60;-- 5.查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
SELECT S.Sid,S.Sname,COUNT(a.Cid) AS 选课总数,SUM(a.score) AS 总成绩
FROM Student S LEFT JOIN SC a ON S.Sid = a.Sid GROUP BY S.Sid;-- 6.查询"李"姓老师的数量
SELECT COUNT(Tname) FROM Teacher WHERE Tname LIKE '李%';-- 7.查询学过"张三"老师授课的同学的信息
SELECT S.* FROM Student S
WHERE S.Sid IN(SELECT a.Sid FROM SC a WHERE a.Cid IN(SELECT c.Cid FROM course c WHERE C.Tid=(SELECT t.Tid FROM Teacher t WHERE t.Tname='张三'))
GROUP BY a.Sid);-- 8.查询没学过"张三"老师授课的同学的信息
SELECT S.* FROM Student S
WHERE S.Sid NOT IN(SELECT a.Sid FROM SC a WHERE a.Cid IN(SELECT c.Cid FROM course c WHERE C.Tid=(SELECT t.Tid FROM Teacher t WHERE t.Tname='张三'))
GROUP BY a.Sid);-- 9.查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息
SELECT S.* FROM SC a
INNER JOIN Student S ON S.Sid=a.Sid
WHERE a.Cid='01' AND a.Sid IN(SELECT b.Sid FROM SC b WHERE b.Cid='02');-- 10.查询没学过"张三"老师讲授的任一门课程的学生姓名
SELECT S.* FROM Student S
WHERE S.Sid NOT IN(SELECT a.Sid FROM SC a WHERE a.Cid IN(SELECT c.Cid FROM course c WHERE C.Tid=(SELECT t.Tid FROM Teacher t WHERE t.Tname='张三'))
GROUP BY a.Sid);-- 11.查询和"01"号的同学学习的课程完全相同的其他同学的信息
SELECT S.* FROM SC a
INNER JOIN Student S ON S.Sid = a.Sid
WHERE a.Sid  IN (SELECT Sid FROM SC WHERE Cid IN(SELECT Cid FROM SC WHERE Sid='01'))
GROUP BY a.Sid
HAVING a.Sid != '01' AND COUNT(*)=(SELECT COUNT(*) FROM SC WHERE Sid = '01');

MySQL——Student、Course、Teacher、SC SQL查询练习题相关推荐

  1. mysql score表_MySQL连表查询练习题

    建库 库名:linux50 字符集:utf8 校验规则:utf8_general_ci mysql> create database if not exists linux5 charset u ...

  2. 经典51道SQL查询练习题

    数据表介绍 --1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course( ...

  3. 【mysql技术内幕1】mysql基础架构-一条SQL查询语句是如何执行的

    文章目录 1 一条SQL查询语句是如何执行的 2 mysql体系结构 3 InnoDB存储引擎 4 总结 1 一条SQL查询语句是如何执行的 ​ 通常我们使用数据库,都是将数据库看成一个整体,我们的应 ...

  4. mysql期中考试题及答案_mysql 查询 练习题及答案

    CREATE DATABASE school; USE school; /*1.创建student表格*//*id为主键 非空 唯一 */ CREATE TABLE student (id INT(1 ...

  5. MySQL索引失效原因,SQL查询语句不走索引原因

    前言 日常工作中索引失效原因很多,这个需要平时的日积月累,不断学习,才能更正确的发挥索引的作用,下面简单总结一些索引失效原因. 1. 隐式的类型转换,索引失效 select * from test w ...

  6. mysql 客房_mysql – 房间预订sql查询

    我在编写sql时遇到问题,从表中获取可用的房间.我的表格结构如下. 表:预订 booking_id | room_id | start_datetime | end_datetime | custom ...

  7. mysql 查看 历史_mysql 历史sql查询

    开启操作记录日志 首先进入mysql输入指令show variables like 'gen%'; 可以看到输出+------------------+------------------------ ...

  8. oracle sql查询练习题2带答案(10个)

    1.  行列转换 年度:2015年全年 总税额大于5千万 查询结果如下: 登记序号 总税额 税收收入 非税收入 12370098000027241560 276543059.4 150369100.5 ...

  9. mysql消重统计_mysql sql查询如何实现发私信用户和其他用户的列表?要求消重所有重复的用户结果 - 贪吃蛇学院-专业IT技术平台...

    私信表结构如下: 建表语句和数据 CREATE TABLE `message` ( `id` int(5) NOT NULL, `sender_id` int(5) DEFAULT NULL, `re ...

最新文章

  1. java编译的语句_在Java语言中,下列语句能通过编译的是()。
  2. 我看Chrome超越IE的意义
  3. asp.net webservice 添加get方法
  4. linux centos6 mvn,CentOS 6.3 安装Maven3
  5. 于无声处 启明星辰吹响工控安全号角
  6. discuz6.1.0 弹出无效的图片文件解决办法
  7. 什么是web前端开发和后端开发?
  8. 聊聊程序员的简历应该怎么写(帮修改简历)
  9. C语言库函数:memcmp/strcmp和strncmp的区别
  10. OSChina 周六乱弹 —— 你们还没下班呀?我都到家啦
  11. App和小程序开发成本对比
  12. Linux创建 Raid卷
  13. F5负载均衡器通过iRules实现http应用的灵活转发
  14. 【阅读笔记】SiamMask
  15. 10款网站后台管理系统模板_bootstrap网站后台模板_html后台模板下载(一)
  16. 新闻发布系统,SQLHelper重构
  17. 基于Spring 4.0 的 Web Socket 聊天室/游戏服务端简单架构
  18. .NET绘制旋转太极图
  19. 爱发php企业发卡网源码_PHP最新企业级自动发卡平台网站源码完整商业版
  20. html实现左列表往右列表,pyqt 实现左列表向右列表添加

热门文章

  1. 【vue】bable的介绍以及编写vue文件
  2. elementUI el-table 动态添加一行且保证每行数据相互独立,防止v-for影响每行
  3. Network网络诊断工具for windows
  4. 普通人除了打工,究竟如何才能赚到钱?
  5. Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun错误解决方案
  6. 在Vue中 用trun js + pdf-dist 实现pdf翻页效果
  7. Windows下挂载MSR分区
  8. 浅谈SMOTE之类不平衡过采样方法
  9. phpadmin删除数据库中的用户
  10. composer错误