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 ...
随机推荐
- Emqx高可用架构
目录 优化前架构 主要问题 haproxy问题 优化后架构 优化功能点 emq版本升级 linux系统调优 haproxy调优 测试工具 依赖安装 配置erl环境变量 安装压测软件 测试指令与结果展示 ...
- 【Azure Redis 缓存】如何使得Azure Redis可以仅从内网访问? Config 及 Timeout参数配置
问题描述 问题一:Redis服务,如何可以做到仅允许特定的子网内的服务器进行访问? 问题二:Redis服务,timeout和keepalive的设置是怎样的?是否可以配置成timeout 0? 问题三 ...
- 鸿蒙 Harmony 的跨端技术方案
这两年要说技术上最火的关键字,我想肯定离不开"鸿蒙"两个字. 不管是技术社区还是身边的开发者多多少少都在关注鸿蒙的发展趋势,特别是 HarmonyOS NEXT 版本将进入独立生态 ...
- Android---TextView基础属性 + 跑马灯的三种方式
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_wid ...
- Java 多线程------多线程的创建(2),方式一:继承于Thread类
1 package com.bytezero.threadexer; 2 3 /** 4 * 创建两个分线程,其中一个线程遍历100以内的偶数,另一个线程遍历100以内的奇数 5 * 6 * 7 * ...
- Alertmanager钉钉告警
一.部署alertmanager 1.1 创建目录 mkdir -p /deploy/app/alertmanager/config chmod -R 777 /deploy/app/alertman ...
- Codeforces Round 924 (Div. 2)B. Equalize(思维+双指针)
目录 题面 链接 题意 题解 代码 题面 链接 B. Equalize 题意 给一个数组\(a\),然后让你给这个数组加上一个排列,求出现最多的次数 题解 赛时没过不应该. 最开始很容易想到要去重,因 ...
- elementPlus配合vue-router搭建后台系统菜单模块
设置menuType来区分菜单类型 /** * @params menuType * -1 一般为首页 / -> /home 只显示第一个子项 * -2 为无子菜单的菜单项 /config -& ...
- DOSBox0.74使用Debug时p命令报错
环境 操作系统:Windows 10 DOSBox 0.74 DEBUG.EXE 从 Windows XP 或其他复制到的DOSBox下 问题 在学习到 王爽的<汇编语言>时,第 4章,第 ...
- OpenCV开发笔记(七十七):相机标定(二):通过棋盘标定计算相机内参矩阵矫正畸变摄像头图像
前言 通过相机图片可以识别出棋盘角点了,这时候我们需要通过角点去计算相机内参矩阵,通过上篇得知畸变的原理,所以我们尽可能要全方位都能获取标定图片,全方位意思是提供的多张图综合起来基本覆盖了相机所有 ...