mysql统计查询和索引练习
课程数据表course
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
`cno` varchar(5) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`cname` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`cperiod` int NULL DEFAULT NULL,
`credit` float NULL DEFAULT NULL,
`ctno` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
PRIMARY KEY (`cno`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES ('c001', '文学欣赏', 40, 1.5, 't001');
INSERT INTO `course` VALUES ('c002', '中国历史文化', 60, 2, 't003');
INSERT INTO `course` VALUES ('c003', '视频编辑', 70, 2.5, 't002');
INSERT INTO `course` VALUES ('c004', '音乐欣赏', 40, 1.5, 't004'); SET FOREIGN_KEY_CHECKS = 1;
学生选课成绩表elective
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------
-- Table structure for elective
-- ----------------------------
DROP TABLE IF EXISTS `elective`;
CREATE TABLE `elective` (
`sno` int NULL DEFAULT NULL,
`cno` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`score` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ----------------------------
-- Records of elective
-- ----------------------------
INSERT INTO `elective` VALUES (4, 'c004', '80');
INSERT INTO `elective` VALUES (5, 'c002', '60');
INSERT INTO `elective` VALUES (6, 'c004', '99');
INSERT INTO `elective` VALUES (7, 'c004', '89');
INSERT INTO `elective` VALUES (8, 'c002', '59');
INSERT INTO `elective` VALUES (9, 'c002', '40');
INSERT INTO `elective` VALUES (4, 'c001', '88');
INSERT INTO `elective` VALUES (5, 'c001', '78');
INSERT INTO `elective` VALUES (1, 'c002', '88');
INSERT INTO `elective` VALUES (1, 'c003', '79');
INSERT INTO `elective` VALUES (1, 'c004', '80');
INSERT INTO `elective` VALUES (2, 'c001', '99');
INSERT INTO `elective` VALUES (2, 'c002', '97');
INSERT INTO `elective` VALUES (2, 'c003', '98');
INSERT INTO `elective` VALUES (2, 'c004', '95');
INSERT INTO `elective` VALUES (3, 'c001', '82');
INSERT INTO `elective` VALUES (3, 'c002', '87');
INSERT INTO `elective` VALUES (3, 'c003', '96');
INSERT INTO `elective` VALUES (3, 'c004', '78');
INSERT INTO `elective` VALUES (4, 'c003', '89');
INSERT INTO `elective` VALUES (4, 'c002', '67'); SET FOREIGN_KEY_CHECKS = 1;
学生表studentinfo
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------
-- Table structure for studentinfo
-- ----------------------------
DROP TABLE IF EXISTS `studentinfo`;
CREATE TABLE `studentinfo` (
`sno` int NOT NULL,
`sname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`sgender` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`sbirth` date NULL DEFAULT NULL,
`sclass` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
PRIMARY KEY (`sno`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ----------------------------
-- Records of studentinfo
-- ----------------------------
INSERT INTO `studentinfo` VALUES (1, '李丹', '女', '1998-07-10', '网络技术2');
INSERT INTO `studentinfo` VALUES (2, '赵蛋', '男', '1990-12-26', '电子商务2');
INSERT INTO `studentinfo` VALUES (3, '薛兆丰', '男', '1999-07-16', '软件开发1');
INSERT INTO `studentinfo` VALUES (4, '李大嘴', '男', '1995-04-08', '电子商务2');
INSERT INTO `studentinfo` VALUES (5, '李样', '女', '1998-02-04', '网络技术1');
INSERT INTO `studentinfo` VALUES (6, '王撕葱', '男', '1991-01-04', '电子商务2');
INSERT INTO `studentinfo` VALUES (7, '郑板桥', '女', '1991-08-08', '软件开发3');
INSERT INTO `studentinfo` VALUES (8, '马东', '男', '1991-08-09', '软件开发3');
INSERT INTO `studentinfo` VALUES (9, '马晓东', '男', '1991-03-04', '软件开发2'); SET FOREIGN_KEY_CHECKS = 1;
教师表teacher
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
`tno` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`tname` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`tgender` varchar(2) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`tedu` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
PRIMARY KEY (`tno`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES ('t001', '吴亚飞', '男', '本科');
INSERT INTO `teacher` VALUES ('t002', '李琦', '男', '硕士');
INSERT INTO `teacher` VALUES ('t003', '王艳红', '女', '硕士');
INSERT INTO `teacher` VALUES ('t004', '马志超', '男', '博士');
INSERT INTO `teacher` VALUES ('t005', '万丽', '女', '硕士'); SET FOREIGN_KEY_CHECKS = 1;
-- -------------------统计查询------------------------------------------- -- 统计男生 和女生人数
SELECT sgender,COUNT(*) AS 人数
FROM studentinfo
GROUP BY sgender
-- 查询elective表,统计并输出每个学生所选课程数目及平均分。
SELECT sno,COUNT(cno) AS 选修课程数目, AVG(score) AS 平均分 FROM elective
GROUP BY sno -- 查询elective表,统计并输出每门课程所选学生人数及最高分。
SELECT cno , COUNT(sno), MAX(score) FROM elective
GROUP BY cno -- 查询elective表中每门课成绩都在70~90分的学生的学号。
SELECT sno FROM elective GROUP BY sno HAVING MIN(score)>=70 AND MAX(score)<=90 -- 查询至少选修了三门课程的学生的学号。
SELECT sno,COUNT(*) AS 选修课程大于等于三 FROM elective GROUP BY sno HAVING COUNT(*)>=3 -- --------------多表查询---------------------------------------------
-- 交叉连接 CROSS JOIN
SELECT * FROM course CROSS JOIN teacher --
SELECT * FROM course LEFT JOIN teacher ON course.ctno = teacher.tno
-- 查询“学生选课”数据库,输出考试成绩不及格学生的学号、姓名、课程号、成绩。
SELECT st.sno,st.sname,el.cno,el.score FROM studentinfo st JOIN elective el ON st.sno = el.sno WHERE el.score < 60 ; -- 查询“学生选课”数据库,输出考试成绩不及格学生的学号、姓名、课程名、成绩。
SELECT
st.sno,
st.sname,
co.cname,
el.score
FROM
studentinfo AS st
JOIN elective AS el ON st.sno = el.sno
JOIN course AS co ON el.cno = co.cno
WHERE el.score<60 ;
-- 或者如下
SELECT
st.sno,
st.sname,
co.cname,
el.score
FROM
studentinfo AS st , elective AS el , course AS co WHERE st.sno = el.sno AND el.cno = co.cno
AND el.score<60 -- 查询“学生选课”数据库,输出所有教师教授的课程信息,没有教授课程的教师也要列出。
SELECT * FROM teacher AS t LEFT JOIN course AS c ON t.tno = c.ctno -- 查询和学号为*****的学生在同一个班级的学生的学号和姓名 SELECT s2.sno , s2.sname FROM studentinfo AS s JOIN studentinfo AS s2 ON s.sclass = s2.sclass WHERE s.sno = 8 AND
s2.sno != 8 -----------------子查询-------------------------------------------
-- 查询“学生选课”数据库,输出选修了“音乐欣赏”这门课的所有学生的学号和成绩。
SELECT e.sno,e.score FROM elective AS e WHERE e.cno = (SELECT cno FROM course WHERE cname = '音乐欣赏')
-- 查询“学生选课”数据库,输出选修了“音乐欣赏”这门课的所有学生的姓名,学号和成绩。
SELECT s.sname,e.sno,e.score FROM elective AS e
LEFT JOIN studentinfo AS s ON e.sno = s.sno
WHERE e.cno = (SELECT cno FROM course WHERE cname = '音乐欣赏') -- 查询“学生选课”数据库,输出年龄最大的学生的姓名。
SELECT MIN(sbirth) FROM studentinfo SELECT sname FROM studentinfo WHERE sbirth = ( SELECT MIN(sbirth) FROM studentinfo )
-- 查询“学生选课”数据库,输出“中国历史文化”这门课不及格的学生的姓名。
SELECT cno FROM course WHERE cname = '中国历史文化' SELECT s.sname AS 中国历史文化成绩不及格名单 FROM elective AS e
LEFT JOIN studentinfo s ON s.sno = e.sno
WHERE e.score < 60 AND e.cno = (SELECT cno FROM course WHERE cname = '中国历史文化'); -- 查询“学生选课”数据库,输出考试不及格的学生的姓名。 SELECT sname AS 考试成绩不合格 FROM studentinfo WHERE sno IN (SELECT sno FROM elective WHERE score < 60);
-- 查看“学生选课”数据库的teacher表,若不存在具有教授职称的教师,则显示所有教师的姓名和职称。
SELECT * FROM teacher WHERE NOT EXISTS(SELECT * FROM teacher WHERE tedu = '教授'); -- 查询“学生选课”数据库的elective表,如果有需要补考的,就显示所有学生的成绩信息。如果没有需要补考的,就不输出任何信息。 SELECT * FROM elective WHERE EXISTS(SELECT * FROM elective WHERE score < 60); -- ------------------------------------索引-------------------------------
-- 1.创建表的时候创建索引
-- 2.在已经存在的表上使用CREATE INDEX语句创建索引
-- CREATE [UNIQUE] [FULLTEXT] [SPATIAL] INDEX索引名 ON 表名(字段名[(长度)] [ASC | DESC]) -- 3.在已经存在的表上使用ALTER TABLE语句创建索引
-- ALTER TABLE 表名 ADD [UNIQUE] [FULLTEXT] [SPATIAL] INDEX索引名(字段名[(长度)] [ASC | DESC])
-- 给学生表 的学生姓名添加普通索引 CREATE INDEX stu_name ON studentinfo(sname); EXPLAIN SELECT sname FROM studentinfo SHOW CREATE TABLE studentinfo -- (1)使用DROP INDEX删除索引
DROP INDEX 索引名字 ON 表名 DROP INDEX stu_name ON studentinfo -- (2)使用ALETR TABLE删除索引
ALETR TABLE 表名 DROP INDEX 索引名字 ALETR TABLE studentinfo DROP INDEX stu_name; --------------------视图-------------------------------------------------------
mysql统计查询和索引练习的更多相关文章
- 【mysql】mysql统计查询count的效率优化问题
mysql统计查询count的效率优化问题 涉及到一个问题 就是 mysql的二级索引的问题,聚簇索引和非聚簇索引 引申地址:https://www.cnblogs.com/sxdcgaq8080/p ...
- 关于阿里云Mysql分页查询不走索引的问题
需要修改阿里云中的MYSQL 配置参数 : eq_range_index_dive_limit 阿里云上默认是 10 , 这个参数 表示 in 查询 条件超过 10 个 就不走索引,走全表扫描.如果我 ...
- MySQL高级查询之索引创建、删除、增加、修改、慢sql、explain解释sql
day04数据库 昨日知识点回顾 1.单表操作 1.单表的操作 条件查询的优先级别: where > group by >having > order by > limit; ...
- mysql延迟查询, 覆盖索引使用例子
引用自 'mysql高性能' 5.3.6章节 不能使用覆盖索引的情况 : 解决办法 :
- MySQL like查询使用索引
在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时候,查询的效率就很容易显现出来.这个时候查询的效率就 ...
- Mysql 统计查询
SELECT ub.telphone, SUM(IF(b.type = 1 AND b.level = 1, 1, 0)) AS type11, SUM(IF(b.type = 1 AND b.lev ...
- mysql 统计查询出来的数目
select count(*) as dd from users;
- Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题
Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...
- MySQL多表查询之外键、表连接、子查询、索引
MySQL多表查询之外键.表连接.子查询.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为 ...
- mysql统计类似SQL语句查询次数
mysql统计类似SQL语句查询次数 vc-mysql-sniffer 工具抓取的sql分析. 1.先用shell脚本把所有enter符号替换为null,再根据语句前后的字符分隔语句 grep -Ev ...
随机推荐
- 【Azure K8S | AKS】在中国区AKS上遇见ImagePullBackOff时的替代方案
问题描述 在AKS集群中部署calico时候,遇见 ImagePullBackOff 问题. 在创建POD calico-typha-horizontal-autoscale 时候遇见拉取镜像失败问题 ...
- 代码随想录算法训练营第十三天| 239. 滑动窗口最大值 347.前 K 个高频元素 总结
239. 滑动窗口最大值 (一刷至少需要理解思路) 卡哥建议:之前讲的都是栈的应用,这次该是队列的应用了.本题算比较有难度的,需要自己去构造单调队列,建议先看视频来理解. 题目链接/文章讲解/视频讲解 ...
- 机器学习策略篇:详解训练/开发/测试集划分(Train/dev/test distributions)
训练/开发/测试集划分 设立训练集,开发集和测试集的方式大大影响了或者团队在建立机器学习应用方面取得进展的速度.同样的团队,即使是大公司里的团队,在设立这些数据集的方式,真的会让团队的进展变慢而不是加 ...
- Java 练习题(类+调用方法)
1 /* 2 * 3 * 定义一个 PassObject,在类中定义一个方法printAress(),该方法的定义如下: 4 * public void printAreas(Circle c,int ...
- 2、mysql存储引擎
存储引擎 1 存储引擎概述 和大多数的数据库不同, MySQL中有一个存储引擎的概念, 针对不同的存储需求可以选择最优的存储引擎. 存储引擎就是存储数据,建立索引,更新查询数据等等技术的实现方式 .存 ...
- APISIX的安装和简单使用
APISIX 是一个云原生.高性能.可扩展的微服务 API 网关. 它是基于 Nginx 和 etcd 来实现,和传统 API 网关相比,APISIX 具备动态路由和插件热加载,特别适合微服务体系下的 ...
- left jon连接查询踩坑记
项目开发中经常会使用到多张表进行关联查询,比如left join关联查询. 如果有一张表A和一张表B,查询语句 SELECT a.*,b.name from A a left join B b On ...
- k8s中port-forward 、service的nodeport与ingress区别
在Kubernetes中,port-forward.Service的NodePort和Ingress都是用于将外部流量引入集群内部的方法,但它们在使用场景.实现方式和功能上有所不同. port-for ...
- 在Blazor中使用Chart.js快速创建图表
前言 BlazorChartjs是一个在Blazor中使用Chart.js的库(支持Blazor WebAssembly和Blazor Server两种模式),它提供了简单易用的组件来帮助开发者快速集 ...
- 你是怎么处理vue项目中的错误的?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.错误类型 任何一个框架,对于错误的处理都是一种必备的能力 在Vue 中,则是定义了一套对应的错误处理规则给到使用者,且在源代码级别,对 ...