MySQl数据库————DQL数据查询语言(二)

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

三.DQL多表查询


我们在查询表格的过程中,往往需要将 多个表组合使用,并且要实现多个表之间的数据查询,例如:查询学生成绩,需要将学生表和成绩表连接起来,查询满足的条件的数据,这个时候就需要用到多表查询;


1.测试数据表的创建

创建学生,班级,教师的关系表:


use db_2;
-- 教师表;
create table teacher(
t_id int primary key auto_increment,
t_name varchar(20) not null,
t_sex varchar(4),
t_age int
);
-- 班级表;
create table class(
c_id int primary key auto_increment,
c_name varchar(20) not null,
c_tid int,
c_stunum int default 0,
constraint for_CT foreign key(c_tid) references teacher (t_id)
);
-- 学生表
create table student(
s_id int primary key auto_increment,
s_name varchar(20) not null,
s_cid int,
s_sex varchar(4),
s_age int,
constraint for_SC foreign key (s_cid) references class(c_id)
);
后面进行数据的插入,读者根据自己的想法进行数据插入;



2.交叉连接


交叉连接是基本的多表连接查询。

不带where条件子句的交叉连接,将会产生连接表的笛卡尔积,返回结果集的行数等于参与连接的表的行数的积。

带where的条件子句的交叉连接,往往会产生两个或者多个表行数乘积的笛卡尔级数据表,然后才根据where后的条件约束挑选相匹配的数据。

交叉连接的基本格式:


select <表名1.属性名1>,<表名1.属性名2>·······from <表名2.属性名1>,<表名2.属性名2>


交叉连接会产生笛卡尔积,再进行条件筛选,效率比较慢,将连接表格的所有元组都互相匹配一次,产生一个包含所有情况的大表

;


3.内连接


交叉连接产生的笛卡尔积会进行额外的判断和比较,如果要查询较多的数据,交叉连接查询的效率相当低下,所以有了一个高效率的查询;


内连接的图示:


307f62a233ee679b4f951baad832a0f7_fe0d7afe4ab1400891199cd66ebc294f.png


内连接的关键字:inner join

基本格式:

select [表名1.属性名1,表名2.属性名2,表名n.属性名n······] from [数据库名.表名1]inner join [数据库名.表名2] on 连接条件

例如:


0457f15c48a38682a27be29c0a517542_502229a346634aa3b6cc5ae771de424b.png


内连接时先筛选满足条件的数据,然后再进行连接,避免了很多不必要的冲突,极大的增加了效率。


4.外连接


①.左外连接

左连接是以左表为基准,显示左表查询字段的所有记录,没有匹配的用null代替。

关键字:left join


378b39f45d138c64fca3fe34c9eb6af6_b6403d61cfb442078ac457f5602c447e.png


②.右外连接

右连接是以右表为基准,左表只是记录,没有匹配的用null代替。

关键字:right join


26803b536ba7ebd1464a6814981523f3_e97c68ef239944149e1f66be2d6bd2c1.png


左右连接的表是可以互换的,也就是可以相互的替换。


③.全外连接

全外连接左右表不被限制,显示全部数据,没有匹配的数据用null代替;

关键字:full join

select student.s_name,student.s_id,class.c_name from student full join class where student.s_cid=class.c_id;


5.多表连接查询


一般来说,我们在使用多表查询的时候,最好不要超过4个,如果超过4个,很有可能是数据表的设置有问题。


二.力扣题目讲解


点击此处题目直达


1.基础查询

①.查询所有列


e0b09e00801ca18eb905d0bcf3a4708b_ef2c2f1937c840129077b5208ca99a1a.png


题目解答答案:SELECT id,device_id,gender,age,university,province from user_profile;


②.查询多列


53e0a821e26f6da34d3a5a6f1ca7b962_ff3899b7231740c7ab4b298eb06c0b18.png


题目解答答案:SELECT device_id,gender,age,university from user_profile;


简单处理查询结果

①.查询结果去重


8af511f008c64a1454dc1b2eb58f9911_e77afaac30544fd78a9e61db009e20f8.png


我们在去重的时候可以用关键字 distinct,使用该关键字就可以去重,如图中的第一句。

当然也可以使用分组查询来进行去重。第二句就是使用分组查询进行的去重,两句答案都可以通过。


②.查询结果限制返回查询结果


90bd70ac02a52b7220b6f248dc02e659_d889cb1ea499480ab810d1ca2604f1fb.png


使用分页查询可以获得不同范围类的数据;

答案再现:select device_id from user_profile limit 0,2;


③.将查询后的结果重新命名


7e422b0eefc66878780c60762c57769a_2a98c9d1cbbd4932a09e3e3a20feb296.png


利用关键字as给查询的结果起一个别名;

答案再现:select device_id as user_infos_example from user_profile limit 0,2;


三.条件查询


①.查找学校是北大的学生信息


7e422b0eefc66878780c60762c57769a_2a98c9d1cbbd4932a09e3e3a20feb296.png


使用关键字where就可以进行条件查询;

答案:select device_id,university from user_profile where university="北京大学";


②.查找后排序


dac3bcb4d65409aba45fd5a5f9cb7e27_9d82069e14e741e3b790a9639334cc5e.png


使用关键字order by进行排序,如果是降序,就在后面加一个desc;


③.操作符的混合使用


9e15e519639d716b89a307f1c628793e_d1fe4ecc68114b969ff5bcfc3677170b.png


答案:select device_id,gender,age,university,gpa from user_profile where (gpa>3.5 and university="山东大学") or (gpa>3.8 and university="复旦大学");

这里的题目我选择了一部分讲解,其余的后面学到了会继续讲解,如果有不会的,可以私聊博主,我会尽快为你解答的。


总结


本节我们学习了DQL数据查询语言,无论是单表查询,还是多表查询,都是非常重要的知识,后面也讲解了部分力扣网站上的题目,只是选择几个比较有价值的讲解了的,如果想要彻底掌握,还是要多刷题,以及多想。不要怕不会做,如有不会可以私聊博主,博主会尽快为你解答。祝各位小伙伴学有所成。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
12天前
|
存储 关系型数据库 MySQL
mysql怎么查询longblob类型数据的大小
通过本文的介绍,希望您能深入理解如何查询MySQL中 `LONG BLOB`类型数据的大小,并结合优化技术提升查询性能,以满足实际业务需求。
45 6
|
1月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
149 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
24天前
|
SQL 关系型数据库 MySQL
mysql分页读取数据重复问题
在服务端开发中,与MySQL数据库进行数据交互时,常因数据量大、网络延迟等因素需分页读取数据。文章介绍了使用`limit`和`offset`参数实现分页的方法,并针对分页过程中可能出现的数据重复问题进行了详细分析,提出了利用时间戳或确保排序规则绝对性等解决方案。
|
29天前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
1月前
|
缓存 NoSQL 关系型数据库
Redis和Mysql如何保证数据⼀致?
在项目中,为了解决Redis与Mysql的数据一致性问题,我们采用了多种策略:对于低一致性要求的数据,不做特别处理;时效性数据通过设置缓存过期时间来减少不一致风险;高一致性但时效性要求不高的数据,利用MQ异步同步确保最终一致性;而对一致性和时效性都有高要求的数据,则采用分布式事务(如Seata TCC模式)来保障。
67 14
|
1月前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
65 9
|
1月前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
62 4
|
1月前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法
|
2月前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
182 6
|
1月前
|
SQL 关系型数据库 MySQL
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
52 1