MySQL 数据查询小练习
作业
# 创建班级表
create table class (
cls_id int auto_increment primary key,
cls_name varchar(10) not null default ''
);
insert into class (cls_name) values ('三年二班'), ('一年三班'), ('二年一班');
# 创建老师表
create table teacher (
t_id int auto_increment primary key,
t_name varchar(10) not null default ''
);
insert into teacher (t_name) values ('罗老师'), ('厨子'), ('乔帮主');
#创建学生表
create table student (
s_id int auto_increment primary key,
s_name varchar(10) not null default '',
gender enum('男', '女') not null default '男',
class_id int not null default 1,
constraint fk_std_cls foreign key (class_id) references class(cls_id)
);
insert into student (s_name, gender, class_id ) values ('雷军', '男', 1), ('余大嘴', '男', 2), ('黄章', '女', 3);
# 创建课程表
create table course (
c_id int auto_increment primary key,
c_name varchar(10) not null default '',
teacher_id int not null default 1,
constraint fk_course_teacher foreign key (teacher_id ) references teacher(t_id)
);
insert into course (c_name, teacher_id ) values ('Python', 3), ('C', 1), ('Go',2);
# 创建成绩表
create table score (
scr_id int auto_increment primary key,
student_id int not null default 1,
course_id int not null default 1,
scr_num int not null default 0,
constraint fk_scr_std foreign key (student_id ) references student(s_id),
constraint fk_scr_crs foreign key (course_id ) references course(c_id)
);
insert into score (student_id, course_id, scr_num) values (1, 3, 80), (2, 1, 70), (1, 2, 60);
# 班级
+--------+----------+
| cls_id | cls_name |
+--------+----------+
| 1 | 三年二班 |
| 2 | 一年三班 |
| 3 | 二年一班 |
+--------+----------+
# 老师
+------+--------+
| t_id | t_name |
+------+--------+
| 1 | 罗老师 |
| 2 | 厨子 |
| 3 | 乔帮主 |
+------+--------+
# 学生
+------+--------+--------+----------+
| s_id | s_name | gender | class_id |
+------+--------+--------+----------+
| 1 | 雷军 | 男 | 1 |
| 2 | 余大嘴 | 男 | 2 |
| 3 | 黄章 | 女 | 3 |
+------+--------+--------+----------+
# 课程
+------+--------+------------+
| c_id | c_name | teacher_id |
+------+--------+------------+
| 1 | Python | 3 |
| 2 | C | 1 |
| 3 | Go | 2 |
+------+--------+------------+
# 分数
+--------+------------+-----------+---------+
| scr_id | student_id | course_id | scr_num |
+--------+------------+-----------+---------+
| 1 | 1 | 3 | 80 |
| 2 | 2 | 1 | 70 |
| 3 | 1 | 2 | 60 |
+--------+------------+-----------+---------+
- 查询所有大于60分的学生的姓名和学号 (DISTINCT: 去重)
mysql> select distinct s_name, student_id from score left join student on student_id=student.s_id where scr_num > 60;
+--------+------------+
| s_name | student_id |
+--------+------------+
| 雷军 | 1 |
| 余大嘴 | 2 |
+--------+------------+
2 rows in set (0.00 sec)
- 查询每个老师教授的课程数量和老师信息
mysql> select t_name, count(t_name) as crs_count from course left join teacher on teacher_id=teacher.t_id group by t_name;
+--------+-----------+
| t_name | crs_count |
+--------+-----------+
| 乔帮主 | 1 |
| 厨子 | 1 |
| 罗老师 | 1 |
+--------+-----------+
3 rows in set (0.00 sec)
- 查询学生的信息以及学生所在的班级信息
mysql> select * from student left join class on class_id=class.cls_id;
+------+--------+--------+----------+--------+----------+
| s_id | s_name | gender | class_id | cls_id | cls_name |
+------+--------+--------+----------+--------+----------+
| 1 | 雷军 | 男 | 1 | 1 | 三年二班 |
| 2 | 余大嘴 | 男 | 2 | 2 | 一年三班 |
| 3 | 黄章 | 女 | 3 | 3 | 二年一班 |
+------+--------+--------+----------+--------+----------+
3 rows in set (0.00 sec)
- 学生中男生的个数和女生的个数
mysql> select gender, count(gender) from student group by gender;
+--------+---------------+
| gender | count(gender) |
+--------+---------------+
| 男 | 2 |
| 女 | 1 |
+--------+---------------+
2 rows in set (0.00 sec)
- 获取所有学习 "Python" 的学生的学号, 成绩和姓名
mysql> select c_name, s_id, s_name, scr_num from score left join student on student_id=student.s_id left join course on course_id=course.c_id where c_name='Python';
+--------+------+--------+---------+
| c_name | s_id | s_name | scr_num |
+--------+------+--------+---------+
| Python | 2 | 余大嘴 | 70 |
+--------+------+--------+---------+
1 row in set (0.00 sec)
- 查询平均成绩大于60分的同学的信息和平均成绩
mysql> select s_id, s_name, avg(scr_num) from score left join student on student_id=student.s_id group by s_name having avg(scr_num) > 60;
+------+--------+--------------+
| s_id | s_name | avg(scr_num) |
+------+--------+--------------+
| 2 | 余大嘴 | 70.0000 |
| 1 | 雷军 | 70.0000 |
+------+--------+--------------+
2 rows in set (0.00 sec)
- 查询姓“罗”的老师的个数;
mysql> select t_name, count(t_name) from teacher group by t_name having t_name like '罗%';
+--------+---------------+
| t_name | count(t_name) |
+--------+---------------+
| 罗老师 | 1 |
+--------+---------------+
- 查询课程成绩小于70分的同学的学号, 姓名
mysql> select s_id, s_name, scr_num from score left join student on student_id=student.s_id where scr_num < 70;
+------+--------+---------+
| s_id | s_name | scr_num |
+------+--------+---------+
| 1 | 雷军 | 60 |
+------+--------+---------+
1 row in set (0.00 sec)
- 查询各科成绩最高和最低的分:以如下形式显示:课程名,最高分,最低分;
mysql> select c_name, max(scr_num), min(scr_num) from score left join course on course_id=course.c_id group by c_name;
+--------+--------------+--------------+
| c_name | max(scr_num) | min(scr_num) |
+--------+--------------+--------------+
| C | 60 | 60 |
| Go | 80 | 80 |
| Python | 70 | 70 |
+--------+--------------+--------------+
3 rows in set (0.00 sec)
- 查询姓“雷”的学生名单
mysql> select * from student where s_name like '雷%';
+------+--------+--------+----------+
| s_id | s_name | gender | class_id |
+------+--------+--------+----------+
| 1 | 雷军 | 男 | 1 |
+------+--------+--------+----------+
1 row in set (0.00 sec)
- 查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列
mysql> select c_name, avg(scr_num) from score left join course on course_id=course.c_id group by c_name order by avg(scr_num) asc, c_id desc;
+--------+--------------+
| c_name | avg(scr_num) |
+--------+--------------+
| C | 60.0000 |
| Python | 70.0000 |
| Go | 80.0000 |
+--------+--------------+
3 rows in set (0.00 sec)
- 查询课程编号为3且课程成绩在70分以上的学生的学号和姓名
mysql> select s_id, s_name from score left join student on student_id=student.s_id left join course on course_id=course.c_id where c_id=3 and scr_num > 70;
+------+--------+
| s_id | s_name |
+------+--------+
| 1 | 雷军 |
+------+--------+
1 row in set (0.00 sec)
- 查询“2”课程分数小于70,按分数降序排列的同学学号
mysql> select s_id from score left join student on student_id=student.s_id left join course on course_id=course.c_id where c_id=2 and scr_num < 70 order by scr_num desc;
+------+
| s_id |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
- 删除学号为“2”的同学的“1”课程的成绩
mysql> delete from score where student_id=2 and course_id=1;
Query OK, 1 row affected (0.00 sec)
mysql> select * from score;
+--------+------------+-----------+---------+
| scr_id | student_id | course_id | scr_num |
+--------+------------+-----------+---------+
| 1 | 1 | 3 | 80 |
| 3 | 1 | 2 | 60 |
+--------+------------+-----------+---------+
2 rows in set (0.00 sec)
- 删除学习“乔帮主”课的SC表记录
MySQL 数据查询小练习的更多相关文章
- MySQL数据归档小工具推荐--mysql_archiver
一.主要概述 MySQL数据库归档历史数据主要可以分为三种方式:一.创建编写SP.设置Event:二.通过dump导入导出:三.通过pt-archiver工具进行归档.第一种方式往往受限于同实例要求, ...
- nodejs mysql 数据查询例子
1.安装nodejs 2.安装mysql npm包 地址:https://github.com/felixge/node-mysql npm install mysql 3.相应API查看及调用: ...
- MySQL数据查询之单表查询
单表查询 简单查询 - 创建表 DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` ) NOT NULL AUTO_INCREMEN ...
- mysql 数据查询全讲
数据查询 涉及到DQL(Data Query Language)是sql语句的一类 本文全面介绍了mysql下 select 语句的各种查询方式:普通查询,模糊查询,查询排序,分页查询,聚合函数查询 ...
- MySQL - 数据查询 - 简单查询
1. 简述 查询数据是指从数据库中获取所需要的数据.如Jack 要达到验证用户名和密码的目的,就需要从数据库已保存的用户表中读取当前用户的密码进行验证,以验明正身!保存查询数据是数据库操作中常用且重要 ...
- Packets larger than max_allowed_packet are not allowed(mysql数据查询提示:不允许超过允许的最大数据包)解决方案
问题背景: 首先我的项目运用的时Mysql,在做一个数据更新操作的时候,提示异常:System.Exception:“ExecuteNonQuery:Packets larger than max_a ...
- MySQL数据查询之多表查询
多表查询 多表联合查询 #创建部门 CREATE TABLE IF NOT EXISTS dept ( did int not null auto_increment PRIMARY KEY, dna ...
- 【初学python】使用python连接mysql数据查询结果并显示
因为测试工作经常需要与后台数据库进行数据比较和统计,所以采用python编写连接数据库脚本方便测试,提高工作效率,脚本如下(python连接mysql需要引入第三方库MySQLdb,百度下载安装) # ...
- SQLALlchemy数据查询小集合
SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作.将对象转换成SQL,然后使用数据API执行SQL并获取执行结果.在写项目的过 ...
随机推荐
- [Xilinx笔记] 《FPGA伴你玩转USB3.0与LVDS》 读书笔记
2019年10月15日09:31:10 第一部分·哪些要看(优先级由高到低) 0.8.1 LVDS数据收发实例 8.2 带CRC校验的LVDS数据收发实例 1.3.6 USB3.0 控制器 ...
- Zabbix-(四)邮件、钉钉告警通知
Zabbix-(四)邮件.钉钉告警通知 一.前言 在之前的文章里,通过Zabbix对主机的磁盘.CPU以及内存进行了监控,并在首页Dashboard里创建了监控图形,但是只有当我们登录到Zabbix后 ...
- 前端与算法 leetcode 7. 整数反转
目录 # 前端与算法 leetcode 7. 整数反转 题目描述 概要 提示 解析 解法 算法 传入测试用例的运行结果 执行结果 GitHub仓库 # 前端与算法 leetcode 7. 整数反转 题 ...
- javascript jquery 修改指定标签中的内容
javascript jquery 修改指定标签中的内容 $("#test1").text("Hello world!"); document.getEleme ...
- nyoj 244-16进制的简单运算 (scanf("%x%c%x", &a, &b, &c); printf("%o", a ± b))
244-16进制的简单运算 内存限制:64MB 时间限制:1000ms 特判: No 通过数:12 提交数:13 难度:1 题目描述: 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结 ...
- 力扣(LeetCode)三个数的最大乘积 个人题解
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积. 示例 1: 输入: [1,2,3] 输出: 6 示例 2: 输入: [1,2,3,4] 输出: 24 注意: 给定的整型数组长度 ...
- python:正则0
Python3 正则表达式特殊符号及用法(详细列表) 正则表达式的强大之处在于特殊符号的应用,特殊符号定义了字符集合.子组匹配.模式重复次数.正是这些特殊符号使得一个正则表达式可以匹配字符串集合而不只 ...
- 【dp】 AreYouBusy
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意: 多组背包, 0类型为为至少去1样, 1为至多取1样, 2 为随意. 如果将2类型 再添加 ...
- Handler+Looper+MessageQueue深入详解
概述:Android中的异步处理机制由四部分组成:Handler+Looper+MessageQueue+message,用于实现线程间的通信. 用到的概念: Handler: 主要作用是发送消息和处 ...
- 2019-10-28:渗透测试学习,sqlmap的使用,笔记
sqlmap工具的使用sql注入工具,明小子,啊D,萝卜头,穿山甲,sqlmap等开源自动化注入利用工具,支持的数据库有12种,在/plugins中可以看到支持的数据库种类,在所有注入利用工具中是最好 ...