MySQL基础练习题(含详细答案)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL基础练习题(含详细答案)

思路:

1、根据提问或者需求分析想要的结果是什么

Select XXXXX

2、确定想要得到XXXXX的话需要涉及到哪些表

Select XXX from YYYY

3、分析是否需要条件 where > ,< ,= ,<> , >=, <=,in,between,and,or

Select XXX from YYY where ZZZZ

4、是否需要函数

时间函数,数学函数

5、分组

看到(“每个??”)一般情况下都需要group by.

6、如果想要的结果不能一步到位

需要多个步骤的,那么此时我们使用的就是子查询,子查询我们可以按照单个步骤进行查询,然后把多个步骤组装起来

7、表连接,关联查询,联合查询。

明显特征:结果集中的列涉及到多张表。表连接去除笛卡尔积中的错误数据

1.需求2.表格3.条件4.函数5.分组6.步骤7.关联

问题:

1.创建student和score表

2.为student表和score表增加记录

3.查询student表的所有记录

4.查询student表的第2条到4条记录

5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息

6.从student表中查询计算机系和英语系的学生的信息

7.从student表中查询年龄18~35岁的学生信息

8.查询每个院系有多少人

9.查询每个科目的最高分

10.查询李四的考试科目(c_name)和考试成绩(grade)

11.所有学生的信息和考试信息

12.计算每个学生的总成绩

13.计算每个考试科目的平均成绩

14.查询计算机成绩低于95的学生信息

15.查询同时参加计算机和英语考试的学生的信息

16.将计算机考试成绩按从高到低进行排序

17.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩

18.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩

Mysql练习 (select)

------学生资料与成绩查询

1.创建student和score表

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` char(20) NOT NULL,
  `sex` char(20) DEFAULT NULL,
  `birth` year(4) DEFAULT NULL,
  `department` char(10) DEFAULT NULL,
  `address` char(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

创建score表。SQL代码如下:

DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `stu_id` int(10) NOT NULL,
  `c_name` char(20) DEFAULT NULL,
  `grade` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `score_ibfk_1` (`stu_id`),
  CONSTRAINT `score_ibfk_1` FOREIGN KEY (`stu_id`) REFERENCES `student` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

2.为student表和score表增加记录

向student表插入记录的INSERT语句如下:

insert  into `student`(`id`,`name`,`sex`,`birth`,`department`,`address`) values (1,'张老大','男',1985,'计算机系','北京市海淀区');
insert  into `student`(`id`,`name`,`sex`,`birth`,`department`,`address`) values (2,'张老二','男',1986,'中文系','北京市昌平区');
insert  into `student`(`id`,`name`,`sex`,`birth`,`department`,`address`) values (3,'张三','女',1990,'中文系','湖南省永州市');
insert  into `student`(`id`,`name`,`sex`,`birth`,`department`,`address`) values (4,'李四','男',1990,'英语系','辽宁省阜新市');
insert  into `student`(`id`,`name`,`sex`,`birth`,`department`,`address`) values (5,'王五','女',1991,'英语系','福建省厦门市');
insert  into `student`(`id`,`name`,`sex`,`birth`,`department`,`address`) values (6,'王六','男',1988,'计算机系','湖南省衡阳市');

向score表插入记录的INSERT语句如下:

insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (1,1,'计算机',98);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (2,1,'英语',80);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (3,2,'计算机',65);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (4,2,'中文',88);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (5,3,'中文',95);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (6,3,'计算机',70);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (7,4,'计算机',70);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (8,4,'英语',92);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (9,5,'英语',94);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (10,5,'计算机',90);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (11,6,'计算机',90);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (12,6,'英语',85);

3.查询student表的所有记录

SELECT * FROM student;

4.查询student表的第2条到4条记录

SELECT * FROM student LIMIT 1,3;

5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息

SELECT id,NAME,department FROM student;

6.从student表中查询计算机系和英语系的学生的信息

SELECT * FROM student WHERE department IN('计算机系','英语系');

7.从student表中查询年龄在18~35岁的学生信息

SELECT * FROM student WHERE YEAR(NOW())-birth BETWEEN 18 AND 35;

8.查询每个院系有多少人

SELECT department,COUNT(department) counts FROM student GROUP BY department;

9.查询每个科目的最高分

SELECT c_name,MAX(grade) maxgrade FROM score GROUP BY c_name;

10.查询李四的考试科目(c_name)和考试成绩(grade)

SELECT c_name,grade FROM score WHERE stu_id =(SELECT id FROM student WHERE NAME='李四');

11.所有学生的信息和考试信息

SELECT * FROM student s,score sc WHERE s.`id`=sc.`stu_id`;
SELECT s.`id`,NAME,sex,birth,department,address,grade FROM student s,score sc WHERE s.`id`=sc.`s

12.计算每个学生的总成绩

SELECT NAME,SUM(grade) FROM student s,score sc WHERE s.`id`=sc.`stu_id` GROUP BY NAME;

13.计算每个考试科目的平均成绩

计算每个学生的平均成绩???

SELECT c_name,AVG(grade) FROM score GROUP BY c_name;

14.查询计算机成绩低于95的学生信息

SELECT * FROM student WHERE id IN(SELECT stu_id FROM score WHERE c_name='计算机' AND grade<

15.查询每个学科的平均成绩

SELECT c_name,AVG(grade) FROM score GROUP BY c_name;

16.将计算机考试成绩降序排列

SELECT c_name,grade FROM score WHERE c_name='计算机' ORDER BY grade DESC;

17.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩

SELECT NAME,department,c_name,grade FROM student s,score sc WHERE s.`id`=sc.stu_id AND N

18.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩

SELECT NAME,address,YEAR(NOW())-birth,department,c_name,grade FROM student INNER JOIN sc

19.查询出每门课程都大于80分的学生姓名

类似于这个题目:查询所有成绩都及格的学生

SELECT st.`name`,MIN(s.grade) mi FROM student st
LEFT JOIN score s
ON s.`stu_id`=st.`id`
GROUP BY st.`name` HAVING mi>80;

20.查询平均分最高的科目名字

SELECT c_name,MAX(avgs.av) FROM
(SELECT  AVG(grade) AS av,c_name FROM score GROUP BY c_name)
AS avgs

21.查询语文成绩比张三高的学生的信息

提示:

先查询张三的语文成绩;

再查询语文成绩成绩大于a的学生信息;

SELECT * FROM student st
LEFT JOIN score s
ON s.`stu_id`=st.`id`
WHERE s.c_name="中文" AND s.grade >
(SELECT s.grade FROM student st
LEFT JOIN score s
ON s.`stu_id`=st.`id`
WHERE s.c_name="中文" AND st.name="张三")

22.查询同时参加计算机和英语考试的学生的信息

SELECT * FROM student WHERE id IN (
SELECT stu_id FROM score WHERE c_name='计算机' AND stu_id IN (
SELECT stu_id FROM score WHERE c_name ='英语' ))

23.有如下三个表:

DROP TABLE IF EXISTS `project`;
CREATE TABLE `project` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `contract`;
CREATE TABLE `contract` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `project_id` int(5) DEFAULT NULL,
  `money` int(5) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `pay`;
CREATE TABLE `pay` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `contract_id` int(5) DEFAULT NULL,
  `money` int(5) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

插入数据:

insert  into `project`(`id`,`name`) values (1,'Java'),(2,'C语言');
insert  into `contract`(`id`,`project_id`,`money`) values (1,1,10),(2,1,10),(3,2,10),(4,2,10);
insert  into `pay`(`id`,`contract_id`,`money`) values (1,1,10),(2,1,10),(3,2,10),(4,2,10),(5,3,10),(6,3,10),(7,4,10),(8,4,10);

一个项目有多个合同,每个合同会分几次付款;

1.查询各个项目的合同总金额

SELECT p.name,SUM(c.money) FROM project p
LEFT JOIN contract c
ON p.id =c.project_id
GROUP BY p.name

2.查询id为1的项目所有已经付款的记录

SELECT c.id contract_id,p.id pay_id,p.money FROM contract c, pay p WHERE c.id = p.contract_id AND  
c.project_id =1

或者:

SELECT p.id project_id,c.id contract_id,py.id pay_id,py.money FROM project p
LEFT JOIN contract c
LEFT JOIN pay py
ON c.id=py.contract_id
ON p.id =c.project_id
WHERE p.id=1

3.查询所有已经有付款记录的合同及对应的项目

SELECT * FROM project p, contract c WHERE c.project_id = p.id
AND c.id IN (SELECT contract_id FROM  pay)
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
SQL 关系型数据库 MySQL
MySQL子查询篇(精选20道子查询练习题)-2
MySQL子查询篇(精选20道子查询练习题)
64 0
|
6月前
|
SQL 关系型数据库 MySQL
MySQL子查询篇(精选20道子查询练习题)-1
MySQL子查询篇(精选20道子查询练习题)
78 0
|
SQL 关系型数据库 MySQL
MySQL数据库练习题(单表查询,多表关联查询)(一)
MySQL数据库练习题(单表查询,多表关联查询)
506 0
|
关系型数据库 MySQL
MySQL经典练习题+解题思路(一)
本文总结了在学习完MySQL之后 个人练习相关练习题的解题思路和答案
810 0
MySQL经典练习题+解题思路(一)
|
关系型数据库 MySQL 数据库
MySQL数据库练习题(单表查询,多表关联查询)(二)
MySQL数据库练习题(单表查询,多表关联查询)(二)
201 0
|
5月前
|
关系型数据库 MySQL 数据库
MySQL SELECT查询实战:练习题精选,提升你的数据库查询技能
MySQL SELECT查询实战:练习题精选,提升你的数据库查询技能
|
5月前
|
存储 关系型数据库 MySQL
mysql数据库练习题(涵盖几乎所有知识点)
mysql数据库练习题(涵盖几乎所有知识点)
|
关系型数据库 MySQL
【MySQL】经典练习题(部门表、员工表、工资表)
【MySQL】经典练习题(部门表、员工表、工资表)
431 0
|
12月前
|
SQL 关系型数据库 MySQL
MySQL子查询篇(精选20道子查询练习题)-2
MySQL子查询篇(精选20道子查询练习题)
94 0
|
12月前
|
SQL 关系型数据库 MySQL
MySQL子查询篇(精选20道子查询练习题)-1
MySQL子查询篇(精选20道子查询练习题)
238 0