zoukankan      html  css  js  c++  java
  • 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;
    
    --------------------视图-------------------------------------------------------
    

      

    个人网址 http://threenut.cn/
  • 相关阅读:
    elk+redis
    elk7.4+filebeat收集日志
    k8s-高可用集群实现(keepalived+haproxy)
    k8s-高可用集群实现(keepalived)
    keepalived(双主模式)+haproxy+mysql_slave
    haproxy-实现mysql多slave读负载均衡
    MySQL数据库的配置
    前端模块化(AMD和CMD、CommonJs)
    一分钟配置jdk
    MySQL基础语法
  • 原文地址:https://www.cnblogs.com/july7/p/14550988.html
Copyright © 2011-2022 走看看