mysql练手
1、根据图创建下列表格

没有外键的表先创建,创建顺序为teacher,class,course,student
CREATE TABLE class (
cid INT NOT NULL auto_increment PRIMARY KEY,
caption CHAR (32) NOT NULL
) ENGINE = INNODB DEFAULT charset = utf8; INSERT INTO score (caption)
VALUES
('三年二班'),
('一年三班'),
('三年一班') ;
2、查询“生物”课程比“物理”课程成绩高的所有学生的学号
CREATE VIEW vw1 AS SELECT
score.student_id AS "学号",
student.sname AS "姓名",
course.cname AS "科目",
number AS "生物分数"
FROM
score
LEFT JOIN course ON course.cid = score.course_id
LEFT JOIN student ON score.student_id = student.sid
WHERE
course.cname = '生物'; CREATE VIEW vw2 AS SELECT
score.student_id AS "学号",
student.sname AS "姓名",
course.cname AS "科目",
number AS "物理分数"
FROM
score
LEFT JOIN course ON course.cid = score.course_id
LEFT JOIN student ON score.student_id = student.sid
WHERE
course.cname = '物理'; SELECT
*
FROM
vw1
INNER JOIN vw2 ON vw1.学号 = vw2.学号
WHERE
vw1.生物分数 > vw2.物理分数;
3、查询平均成绩大于60分的同学的学号和平均成绩
SELECT
score.student_id AS "学号",
student.sname AS "姓名",
sum(score.number) AS "总分数",
avg(score.number) AS gva
FROM
score
LEFT JOIN course ON course.cid = score.course_id
LEFT JOIN student ON score.student_id = student.sid
GROUP BY
student_id
HAVING
gva > 60;
4、查询所有同学的学号、姓名、选课数、总成绩
SELECT
score.student_id AS "学号",
student.sname AS "姓名",
sum(score.number) AS "总成绩",
count(score.course_id) AS '课程数'
FROM
score
LEFT JOIN course ON course.cid = score.course_id
LEFT JOIN student ON score.student_id = student.sid
GROUP BY
student_id
5、查询姓“李”的老师的个数
SELECT
count(tname) AS "个数"
FROM
teacher
WHERE
tname LIKE "波%" ;
6、查询没学过“叶平”老师课的同学的学号、姓名
思路:没学过某个老师,我可以找到学过这个老师的学生,并在学生表判断,排除这些学过的就是没学过了
(学生学的课程id in (先找叶平老师教的课程id))
最后只要排除 not in这群学生就可了
SELECT
*
FROM
student
WHERE
sid NOT IN (
SELECT DISTINCT
student_id
FROM
score
WHERE
course_id IN (
SELECT
cid
FROM
course
LEFT JOIN teacher ON teacher_id = tid
WHERE
tname = "波多"
)
)
7、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名
思路:先查出所有学了 001 或 002 的学生 course_id in (001,002)
然后group by 学生id,having进行科目数统计,等于2的就是符合条件的
SELECT
student_id,
sname
FROM
student
LEFT JOIN score ON student_id = student.sid
WHERE
course_id IN (1, 2)
GROUP BY
student_id
HAVING
count(student_id) = 2;
8、查询学过“叶平”老师所教的所有课的同学的学号、姓名
SELECT
*
FROM
student
WHERE
student.sid IN (
SELECT DISTINCT
student_id
FROM
score
WHERE
course_id IN (
SELECT
cid
FROM
course
LEFT JOIN teacher ON teacher.tid = course.teacher_id
WHERE
teacher.tname = '饭岛'
)
);
9、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名
SELECT
id1,
NAME
FROM
(
SELECT
student_id AS id1,
number AS number1,
student.sname AS NAME
FROM
score
LEFT JOIN student ON student.sid = score.student_id
WHERE
score.course_id = 1
) AS A
LEFT JOIN (
SELECT
student_id AS id2,
number AS number2
FROM
score
LEFT JOIN student ON student.sid = score.student_id
WHERE
score.course_id = 2
) AS B ON A.id1 = B.id2
WHERE
number1 > number2;
10、查询有课程成绩小于60分的同学的学号、姓名
SELECT DISTINCT
student.sid,
sname
FROM
student
LEFT JOIN score ON student.sid = score.student_id
WHERE
student.sid IN (
SELECT
student_id
FROM
score
WHERE
number < 60
);
11、查询没有学全所有课的同学的学号、姓名
SELECT
sid,
sname
FROM
student
WHERE
sid IN (
SELECT
student_id
FROM
score
GROUP BY
student_id
HAVING
count(student_id) = 3
);
12、查询至少有一门课与学号为“001”的同学所学相同的同学的学号和姓名
思路:先找到001同学的course---一个元组
course_id in 元组 ---student id元组
sid in student id元组
SELECT DISTINCT
sid,
sname
FROM
student
WHERE
sid IN (
SELECT
student_id
FROM
score
WHERE
course_id IN (
SELECT
course_id
FROM
score
WHERE
student_id = 1
)
)
AND sid != 1;
13、查询至少学过学号为“001”同学所有课的其他同学学号和姓名
先找到和001的学过的所有人
然后个数 = 001所有学科 ==》 其他人可能选择的更多SELECT
student.sid,
sname,
count(course_id)
FROM
score
LEFT JOIN student ON student.sid = score.student_id
WHERE
course_id IN (
SELECT
course_id
FROM
score
WHERE
student_id = 1
)
AND student_id != 1
GROUP BY
student_id
HAVING
count(student_id) = (
SELECT
count(course_id)
FROM
score
WHERE
student_id = 1
);
14、查询和“002”号的同学学习的课程完全相同的其他同学学号和姓名
思路:总课程数=002课程总数 --》student_id集
每位同学符合002同学学过课程的数目=002课程总数 》》student_id
去两 --》交集
SELECT
student.sid,
sname,
count(course_id)
FROM
score
LEFT JOIN student ON student.sid = score.student_id
WHERE
student.sid IN (
SELECT
student_id
FROM
score
GROUP BY
student_id
HAVING
count(course_id) = (
SELECT
count(course_id)
FROM
score
WHERE
student_id = 2
)
)
AND course_id IN (
SELECT
course_id
FROM
score
WHERE
student_id = 2
)
AND student_id != 2
GROUP BY
student_id
HAVING
count(student_id) = (
SELECT
count(course_id)
FROM
score
WHERE
student_id = 2
);
15、删除学习“叶平”老师课的SC表记录
思路:delete from where 条件
条件:老师--》》课程id_list-->>course_id in id_list
DELETE
FROM
score
WHERE
course_id in (
SELECT
cid
FROM
course
LEFT JOIN teacher ON teacher.tid = course.teacher_id
WHERE
tname = "苍空"
)
mysql练手的更多相关文章
- MySQL练手小试题
创建表和数据 创建class表 create table class ( cid int(11) primary key auto_increment, caption varchar(32) not ...
- Python之路【第二十四篇】:Python学习路径及练手项目合集
Python学习路径及练手项目合集 Wayne Shi· 2 个月前 参照:https://zhuanlan.zhihu.com/p/23561159 更多文章欢迎关注专栏:学习编程. 本系列Py ...
- Python入门、练手、视频资源汇总,拿走别客气!
摘要:为方便朋友,重新整理汇总,内容包括长期必备.入门教程.练手项目.学习视频. 一.长期必备. 1. StackOverflow,是疑难解答.bug排除必备网站,任何编程问题请第一时间到此网站查找. ...
- 微信小程序初体验,入门练手项目--通讯录,后台是阿里云服务器(一)
内容: 一.前言 二.相关概念 三.开始工作 四.启动项目起来 五.项目结构 六.设计理念 七.路由 八.部署线上后端服务 同步交流学习社区: https://www.mwcxs.top/page/4 ...
- 70个Python练手项目列表(都有完整教程)
前言: 不管学习那门语言都希望能做出实际的东西来,这个实际的东西当然就是项目啦,不用多说大家都知道学编程语言一定要做项目才行. 这里整理了70个Python实战项目列表,都有完整且详细的教程,你可以从 ...
- 20个Java练手项目,献给嗜学如狂的人
给大家推荐一条由浅入深的JAVA学习路径,首先完成 Java基础.JDK.JDBC.正则表达式等基础实验,然后进阶到 J2SE 和 SSH 框架学习.最后再通过有趣的练手项目进行巩固. JAVA基础 ...
- Java学习路径及练手项目合集
Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 实验楼上的[Java 学习路径]中将首先完成 Java基础.JDK.JDBC.正则表达式等基础实验,然后进阶到 J2SE ...
- 练手mysqlbinlog日志恢复数据(centos6.5 64,mysql5.1)
练手mysql bin log日志相关 系统是centos 6.5 64 阿里云的服务器 mysql版本5.1 1 如何开启bin-log日志? vi /etc/my.cnf [mysqld] log ...
- 10个相见恨晚的 Java 在线练手项目
10个有意思的Java练手项目: 1.Java 开发简单的计算器 难度为一般,适合具有 Java 基础和 Swing 组件编程知识的用户学习 2.制作一个自己的 Java 编辑器 难度中等,适合 Ja ...
随机推荐
- 【Nginx】核心模块ngx_events_module
核心模块ngx_events_module是一个专门用于管理事件模块的模块. 它的实现非常easy.以下是该模块的定义: ngx_module_t ngx_events_module = { NGX_ ...
- 牛散NO.2:MACD西施说风情,柳下惠高位勿迷情
创业板日线“高位夺命勾魂枪” 话说在创业板的波段调整中,MACD的勾魂枪同样让多头“魂断蓝桥”.圈内图形又好比西施姑娘回眸一笑,吴王夫差便注定命赴黄泉了.范蠡的精心设计让西施 布了一个风情万种的局,被 ...
- docker下部署spring boot
第 5 章 Docker + Spring Boot: 快速搭建和部署Java Web应用 0.你需要: JDK 1.8 : java -version Maven 3.0+ : mvn -v Git ...
- Xcode7中你一定要知道的炸裂调试神技【转载】
Xcode7中苹果为我们增加了两个重要的debug相关功能.了解之后觉得非常实用,介绍给大家. 1.Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS EXC_BAD ...
- 常用校验算法CRC、MD5、SHA_转
1.算法概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(H ...
- socket心跳检测
一.什么是心跳检测 判断对方(设备,进程或其它网元)是否正常动行,一般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉.用于检测TCP的异常断开. 基本原因是服务器端不能 ...
- Problem H. The Fence 通过取余判重,求得某个区间的某些个数为某个数的倍数。
/** 题目:Problem H. The Fence 链接:https://vjudge.net/problem/Gym-101090H 题意:给定一个字符串,只有0或者1: 问:假如两个不同的1之 ...
- 自定义View -- 柱状图 我也来自定义个柱状图来玩玩
遇到要用到图的时候总是再找第三方开源,但有时这个图非常简单,用第三方开源来用的话有点得不偿失,所以我就自己撸了个柱状图出来 当然你如果觉得需求很复杂,那么你可以去使用这些开源 MPAndroidCha ...
- Python运行机制(转)
From:https://blog.csdn.net/jeff_liu_sky_/article/details/52097060 https://stackoverflow.com/question ...
- HDU 3080 The plan of city rebuild(除点最小生成树)
题意 一个城市原来有l个村庄 e1条道路 又添加了n个村庄 e2条道路 后来后销毁了m个村庄 与m相连的道路也销毁了 求使全部未销毁村庄相互连通最小花费 不能连通输出what a pity ...