MySQL入门篇之高级查询(1)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL入门篇之高级查询(1)

前言

好久不见,今日为大家带来mysql中的查询,
查询及其重要,敲重点了,下面进入具体教程

准备前提

新建数据表

t_student:学生表
t_teacher:教师表
score:成绩表
course:课程表
各个表之间都有关联
课程表关联教师表:c_id:课程编号 t_id:教师编号
c_name:课程名称
成绩表关联学生表与课程表:s_id:学生id,c_id:课程id
score:课程成绩
/*
SQLyog Ultimate v12.09 (64 bit)
MySQL - 5.7.24 : Database - demo
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`demo` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;

USE `demo`;

/*Table structure for table `course` */

DROP TABLE IF EXISTS `course`;

CREATE TABLE `course` (
  `c_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `c_name` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `t_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`c_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Data for the table `course` */

insert  into `course`(`c_id`,`c_name`,`t_id`) values (1,'语文',1),(2,'数学',3),(3,'英语',2);

/*Table structure for table `score` */

DROP TABLE IF EXISTS `score`;

CREATE TABLE `score` (
  `s_id` int(10) NOT NULL,
  `c_id` int(11) DEFAULT NULL,
  `score` decimal(10,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Data for the table `score` */

insert  into `score`(`s_id`,`c_id`,`score`) values (1,2,'90.00'),(1,1,'87.00'),(1,3,'68.50'),(3,1,'79.00'),(3,2,'89.00'),(3,3,'99.00'),(2,3,'86.00'),(2,1,'79.00'),(2,2,'87.00');

/*Table structure for table `t_student` */

DROP TABLE IF EXISTS `t_student`;

CREATE TABLE `t_student` (
  `s_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `s_name` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `s_birthday` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `s_sex` char(12) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`s_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Data for the table `t_student` */

insert  into `t_student`(`s_id`,`s_name`,`s_birthday`,`s_sex`) values (1,'张旺','2021-07-25 16:09:46','男'),(2,'李四','2021-07-25 16:09:42','女'),(3,'张无忌','2021-07-25 16:10:14','男');

/*Table structure for table `t_teacher` */

DROP TABLE IF EXISTS `t_teacher`;

CREATE TABLE `t_teacher` (
  `t_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `t_name` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `c_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`t_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Data for the table `t_teacher` */

insert  into `t_teacher`(`t_id`,`t_name`,`c_id`) values (1,'张三',1),(2,'李四',3),(3,'王五',2);

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

查询相关练习

-- 查询所有的学生信息
SELECT * FROM t_student;

-- 子查询: 查找 01 成绩及格的学生的 学号、姓名、生日、性别

SELECT * FROM t_student s JOIN score sc ON sc.`s_id` = s.s_id WHERE sc.`score` > 60 AND sc.`c_id` = (SELECT c_id FROM course WHERE c_name = '语文');

-- 子查询: 查看教语文的老师的 工号、姓名
SELECT * FROM t_teacher WHERE t_id = (SELECT t_id FROM course WHERE c_name = '语文');

-- 关联查询: 查找所有男生的 语文 的成绩,学号、姓名、01成绩

SELECT * FROM t_student s JOIN score sc ON sc.`s_id` = s.`s_id` JOIN course c ON c.`c_id` = sc.`c_id` HAVING s.`s_sex` = '男' AND c_name = '语文';

-- 关联查询: 查找 1990年出生的学生 数学 的成绩, 学号,姓名,生日,02成绩 

SELECT * FROM t_student s JOIN score sc ON sc.`s_id` = s.`s_id` JOIN course c ON c.`c_id` = sc.`c_id` HAVING c.`c_name` = '数学' AND s.`s_birthday` BETWEEN '1990-01-01' AND '1990-12-30';

-- 查询每个老师教授课程的列表,显示列表 老师工号、老师名称、课程编号、课程名称。 对数据表做别名,teacher 别名为t , course 别名为 c

SELECT t.`t_id`, t_name, c.`c_id`, c_name FROM t_teacher t JOIN course c ON c.`c_id` = t.`c_id`;

-- 查询每个老师教授课程,显示: 老师工号、老师名称、课程编号、课程名称 ,并以 老师工号倒序/降序(desc)排序。
SELECT t.`t_id`, t_name, c.`c_id`, c_name FROM t_teacher t JOIN course c ON c.`c_id` = t.`t_id` ORDER BY t.`t_id` DESC;

-- 查询张三教授的课程 ,显示: 老师工号、姓名、课程编号、课程名称。 这需要使用 where 条件
SELECT * FROM t_teacher t JOIN course c ON c.`c_id` = t.`c_id` WHERE t_name = '张三';

-- 查询每个学生、每一课的成绩,显示列表  学生学号、学生姓名、生日、性别、课程名称、课程成绩。 
SELECT s.`s_id`, s_name, s_birthday, s_sex, c.`c_name`, score FROM t_student s JOIN score sc ON s.`s_id` = sc.`s_id` JOIN course c ON c.`c_id` = sc.`c_id`;

-- 查询每个学生、每科的成绩,显示列表  学生学号、学生姓名、生日、性别、课程名称、课程成绩。  先以课程id正序(asc),再以课程成绩倒序(desc)。

SELECT s.`s_id`, s_name, s_birthday, s_sex, c_name, score FROM t_student s JOIN score sc ON sc.`s_id` = s.`s_id` JOIN course c ON c.`c_id` = sc.`c_id` ORDER BY c.`c_id`, score DESC;

-- 查询所有分数 80-90  的学生,成绩, 并以学生成绩倒序排序, 显示列表: 学生学号、学生姓名、生日、性别、课程名称、课程成绩
SELECT s.`s_id`, s_name, s_birthday, s_sex, c_name, score FROM t_student s JOIN score sc ON sc.`s_id` = s.`s_id` JOIN course c ON c.`c_id` = sc.`c_id` WHERE score BETWEEN 80 AND 90;

-- 查询有不及格成绩的学生的 学号、姓名、生日、性别 
SELECT * FROM t_student s JOIN score sc ON sc.`s_id` = s.`s_id` WHERE score < 60;

-- 查询学习过张三老师教过的课程的学生的 学号、姓名、生日、性别 
SELECT * FROM t_student s JOIN course c ON c.`t_id` = (SELECT t_id FROM t_teacher WHERE t_name = '张三');

-- 查询数学老师的信息,显示 老师工号、老师姓名、课程编号、课程名称,
SELECT t.`t_id`, t.`t_name`, c.`c_id`, c.`c_name` FROM t_teacher t JOIN course c ON c.`t_id` = t.`t_id` WHERE c.`c_name` = '数学';

本文就到此结束了, 通过大量的sql查询练习,一定会提升自己的能力,所以说,坚持下去,认真的做下去,未来你会感谢你现在的自己,加油,我们下篇见~

看到这的小伙伴赏给博主个赞吧,卑微博主在线求赞~😙

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL 关系型数据库 MySQL
网安入门之MySQL后端基础
《网安入门之MySQL后端基础》简介: 本文介绍了数据库及MySQL的基础知识,涵盖数据库的概念、结构与操作。数据库是组织化存储数据的集合,通过表、列、行等结构实现高效管理。MySQL作为开源的关系型数据库管理系统,广泛应用于Web开发。文中详细讲解了MySQL的基本操作,如增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT)等语句的使用方法,并介绍了数据库事务的ACID特性。此外,还探讨了SQL注入攻击的风险及防范措施,强调了预处理语句的重要性。最后,简述了PHP中mysqli扩展的使用方法,包括连接数据库、执行查询和关闭连接等步骤。
|
3月前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
314 66
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL基础篇】多表查询(隐式/显式内连接、左/右外连接、自连接查询、联合查询、标量/列/行/表子查询)
本文详细介绍了MySQL中的多表查询,包括多表关系、隐式/显式内连接、左/右外连接、自连接查询、联合查询、标量/列/行/表子查询及其实现方式,一文全面读懂多表联查!
【MySQL基础篇】多表查询(隐式/显式内连接、左/右外连接、自连接查询、联合查询、标量/列/行/表子查询)
|
28天前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
224 0
|
2月前
|
存储 Oracle 关系型数据库
索引在手,查询无忧:MySQL索引简介
MySQL 是一款广泛使用的关系型数据库管理系统,在2024年5月的DB-Engines排名中得分1084,仅次于Oracle。本文介绍MySQL索引的工作原理和类型,包括B+Tree、Hash、Full-text索引,以及主键、唯一、普通索引等,帮助开发者优化查询性能。索引类似于图书馆的分类系统,能快速定位数据行,极大提高检索效率。
77 8
|
2月前
|
SQL 关系型数据库 MySQL
MySQL 窗口函数详解:分析性查询的强大工具
MySQL 窗口函数从 8.0 版本开始支持,提供了一种灵活的方式处理 SQL 查询中的数据。无需分组即可对行集进行分析,常用于计算排名、累计和、移动平均值等。基本语法包括 `function_name([arguments]) OVER ([PARTITION BY columns] [ORDER BY columns] [frame_clause])`,常见函数有 `ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`, `SUM()`, `AVG()` 等。窗口框架定义了计算聚合值时应包含的行。适用于复杂数据操作和分析报告。
122 11
|
2月前
|
存储 关系型数据库 MySQL
mysql怎么查询longblob类型数据的大小
通过本文的介绍,希望您能深入理解如何查询MySQL中 `LONG BLOB`类型数据的大小,并结合优化技术提升查询性能,以满足实际业务需求。
175 6
|
3月前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
99 9
|
3月前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
224 3
|
3月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
585 1