MySQL必会50题(1)


一、新建数据库以及导入建表sql语句

1. 新建数据库属性如下:

在这里插入图片描述

2. 建表语句:


CREATE TABLE `Student`(
`s_id` VARCHAR(20),
`s_name` VARCHAR(20) NOT NULL DEFAULT '',
`s_birth` VARCHAR(20) NOT NULL DEFAULT '',
`s_sex` VARCHAR(10) NOT NULL DEFAULT '',
PRIMARY KEY(`s_id`)
);

CREATE TABLE `Course`(
`c_id` VARCHAR(20),
`c_name` VARCHAR(20) NOT NULL DEFAULT '',
`t_id` VARCHAR(20) NOT NULL,
PRIMARY KEY(`c_id`)
);

CREATE TABLE `Teacher`(
`t_id` VARCHAR(20),
`t_name` VARCHAR(20) NOT NULL DEFAULT '',
PRIMARY KEY(`t_id`)
);

CREATE TABLE `Score`(
`s_id` VARCHAR(20),
`c_id` VARCHAR(20),
`s_score` INT(3),
PRIMARY KEY(`s_id`,`c_id`)
);

3. 插入数据:

insert into Student values('01' , '赵雷' , '1990-01-01' , '男');
insert into Student values('02' , '钱电' , '1990-12-21' , '男');
insert into Student values('03' , '孙风' , '1990-05-20' , '男');
insert into Student values('04' , '李云' , '1990-08-06' , '男');
insert into Student values('05' , '周梅' , '1991-12-01' , '女');
insert into Student values('06' , '吴兰' , '1992-03-01' , '女');
insert into Student values('07' , '郑竹' , '1989-07-01' , '女');
insert into Student values('08' , '王菊' , '1990-01-20' , '女');


insert into Course values('01' , '语文' , '02');
insert into Course values('02' , '数学' , '01');
insert into Course values('03' , '英语' , '03');

insert into Teacher values('01' , '张三');
insert into Teacher values('02' , '李四');
insert into Teacher values('03' , '王五');

insert into Score values('01' , '01' , 80);
insert into Score values('01' , '02' , 90);
insert into Score values('01' , '03' , 99);
insert into Score values('02' , '01' , 70);
insert into Score values('02' , '02' , 60);
insert into Score values('02' , '03' , 80);
insert into Score values('03' , '01' , 80);
insert into Score values('03' , '02' , 80);
insert into Score values('03' , '03' , 80);
insert into Score values('04' , '01' , 50);
insert into Score values('04' , '02' , 30);
insert into Score values('04' , '03' , 20);
insert into Score values('05' , '01' , 76);
insert into Score values('05' , '02' , 87);
insert into Score values('06' , '01' , 31);
insert into Score values('06' , '03' , 34);
insert into Score values('07' , '02' , 89);
insert into Score values('07' , '03' , 98);

二、表结构

course表:

在这里插入图片描述

score表:

在这里插入图片描述

student表:

在这里插入图片描述

teacher表:

在这里插入图片描述

三、相关题目

1.查询课程编号为“01”的课程比“02”的课程成绩高的所有学生的学号

思路:先分别查询课程编号为01和课程编号为02的信息,将这两张表做内连接,得到了一张由s_id、01课程的成绩、02课程的成绩组合而成的一张表,然后再从这张表中查询到01的课程成绩比02高的学号

SELECT a.s_id from
(
SELECT s_id,c_id,s_score from score where c_id='01'
) as a
INNER JOIN
(
SELECT s_id,c_id,s_score from score where c_id='02'
)as b ON a.s_id=b.s_id
WHERE a.s_score>b.s_score

执行结果:
在这里插入图片描述

如果要查询更加详细的数据,比如说要得到学生的姓名、每门课的分数,可以再内连接student表,在student表中得到学生的姓名信息

SELECT a.s_id "s_no",c.s_name,a.s_score "01",b.s_score "02" from
(
SELECT s_id,c_id,s_score from score where c_id='01'
) as a
INNER JOIN
(
SELECT s_id,c_id,s_score from score where c_id='02'
)as b ON a.s_id=b.s_id
INNER JOIN student as c on a.s_id=c.s_id
WHERE a.s_score>b.s_score

执行结果:
在这里插入图片描述

2.查询平均成绩大于60分的学生的学号和平均成绩

思路:考察group by的使用以及查询条件要用having

SELECT s_id,avg(s_score) 
	FROM score
GROUP BY s_id HAVING avg(s_score) > 60

执行结果:
在这里插入图片描述

3.查询所有学生的学号、姓名、选课数、总成绩

思路:首先我们查询这些字段需要用到两个表,分别是student表和score表,这两个表要做外连接查询,将student表作为左表,score作为右表,通过s_id将两张表进行连接,为什么不用内连接?因为内连接求的是交集,分数表中缺少8号学生的成绩,但是student表中存在这个人,所以要求的是并集。接下来要做分组操作,根据s_id和s_name分组,为啥不就根据s_id来分组?因为如果使用了group by,那么查询条件中的字段必须在group by中出现,这样比较严谨。接着再用count和sum函数求出选课数和总成绩。为了显得比较专业,因为学号为8的同学没有成绩,所以可以使用case判断当这个字段为null时设置为0,else还是原来的值。

sql语句:

SELECT a.s_id,a.s_name,COUNT(c_id),
SUM(CASE WHEN b.s_score IS NULL THEN 0 ELSE b.s_score END)
from student as a
LEFT JOIN score as b on a.s_id=b.s_id
GROUP BY s_id,s_name

执行结果:
在这里插入图片描述

4.查询姓“猴”的老师的个数

思路:本题主要考察like和%以及count的操作
sql语句:

SELECT count(t_id)
FROM teacher
WHERE t_name LIKE '猴%'

执行结果:
在这里插入图片描述

5.查询没学过“张三”老师课的学生

思路:先从teacher表中根据老师名字查询出张三的教师id,再根据这个教师id从课程表中查询出他教的课的id,再从分数表中根据这个课的id查询出选了这门课的学生,再从学生表中查询出学号不在选了这门课的学号中的学生。

sql语句:

SELECT s_id,s_name
FROM student
WHERE s_id NOT IN
(
SELECT s_id
from score
WHERE c_id=(select c_id from course where 
t_id=(select t_id from teacher where t_name='张三')
)
)

执行结果:
在这里插入图片描述

6. 行变成列

思路:使用SUM和IF函数,再根据s_id作为条件进行分组,注意**IF(c_id=‘01’,s_score,0)**作为条件,即对所有c_id=‘01’的记录的s_score字段进行SUM()操作,如果s_score没有值则默认为0

sql语句:

SELECT s_id,SUM(IF(`c_id`='01',s_score,0)) as '01',SUM(IF(`c_id`='02',s_score,0)) as '02',SUM(IF(`c_id`='03',s_score,0)) as '03' FROM score GROUP BY s_id;

执行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《MySQL必知必会》是一本经典的MySQL数据库入门教材,该书由Ben Forta撰写,适合初学者和有一定数据库基础的读者阅读。这本书着重介绍了MySQL数据库的基本原理、数据类型、查询语句、数据操作、事务控制以及安全性等方面的知识。 本书以简单易懂的方式讲解了MySQL数据库的基本概念和操作技巧,适合初学者进行自学。无论是想学习数据库编程的开发人员,还是想了解数据库管理的系统管理员,都可以通过阅读本书掌握必要的MySQL数据库知识。 《MySQL必知必会》的内容丰富全面,并且配有大量的示例和练习,读者可以通过实践加深对知识的理解和掌握。此外,该书还介绍了一些高级主,如存储过程、触发器和视图等,帮助读者进一步提升数据库应用能力。 总的来说,《MySQL必知必会》是一本对于学习MySQL数据库的人来说非常有价值的参考书。无论是初学者还是有一定数据库基础的人,都可以通过阅读本书快速学习和掌握MySQL数据库的相关知识。读者可以根据自己的需求和兴趣,选择适合自己的章节进行阅读和学习。 ### 回答2: MySQL必知必会是一本非常有价值的参考书籍,对于想要学习和掌握MySQL数据库的人来说非常有用。这本书详细介绍了MySQL数据库的基本概念、基础语法和高级功能,以及如何优化和管理数据库。 首先,MySQL必知必会通过简洁清晰的语言和丰富的实例,介绍了数据库的概念和原理,帮助读者建立起正确的数据库思维模式。它从关系型数据库的基本概念开始讲解,包括表、行、列、主键等,然后逐步介绍了SQL语言的基本语法和常用命令,如SELECT、INSERT、UPDATE、DELETE等。 其次,MySQL必知必会还深入讲解了MySQL数据库的高级功能,如多表查询、子查询、连接和视图等。这些功能对于处理复杂的数据查询和分析非常重要,通过学习这些知识,读者可以更加灵活地操作数据库,提高工作效率。 此外,MySQL必知必会还涵盖了数据库优化和管理的内容。它介绍了如何正确设计和规划数据库结构,以及如何使用索引和分区来提高查询效率。此外,它还讲解了如何备份和恢复数据库,以及如何监控和优化数据库性能。 总之,MySQL必知必会是一本详细介绍MySQL数据库基础知识和高级功能的优秀书籍。无论是初学者还是有一定经验的开发者,都可以从中学习到很多宝贵的知识和技巧。它不仅可以帮助读者快速入门MySQL,还可以帮助他们提高数据库操作的能力和效率。无论是学习、工作还是项目开发,都值得推荐阅读。 ### 回答3: MySQL必知必会是一本非常受欢迎的MySQL入门书籍,适合初学者和有一定基础的用户阅读。这本书的作者是Ben Forta,他详细介绍了MySQL数据库的基本概念、语法以及如何进行数据库设计和管理。 MySQL必知必会的特点之一是其简洁明了的语言和结构。它从最基本的概念开始讲解,逐步引导读者了解如何创建和管理数据库、表和索引。书中还包含大量的示例和练习,帮助读者加深理解,并提供了一些常见错误和解决方法。 此外,这本书还涵盖了MySQL数据库的高级主,如安全性、性能调优和复制。通过深入研究这些主,读者可以进一步提升他们在MySQL数据库管理方面的技能。 MySQL必知必会还强调了SQL语言的重要性,它是用于与数据库进行交互的主要语言。读者将学习如何使用SQL语句查询、插入、更新和删除数据。此外,书中还介绍了一些高级的SQL技巧,如JOIN和子查询。 总的来说,MySQL必知必会是一本非常实用的MySQL入门书籍,不仅适合初学者,也适合那些希望巩固和提升MySQL数据库管理技能的用户。无论是在学术领域还是实际工作中,掌握MySQL数据库是一个非常有用的技能,而这本书可以帮助读者快速入门和精通这一技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值