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

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 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数据查询语言,无论是单表查询,还是多表查询,都是非常重要的知识,后面也讲解了部分力扣网站上的题目,只是选择几个比较有价值的讲解了的,如果想要彻底掌握,还是要多刷题,以及多想。不要怕不会做,如有不会可以私聊博主,博主会尽快为你解答。祝各位小伙伴学有所成。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
11月前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
1609 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
11月前
|
监控 关系型数据库 MySQL
MySQL和SQLSugar百万条数据查询分页优化
在面对百万条数据的查询时,优化MySQL和SQLSugar的分页性能是非常重要的。通过合理使用索引、调整查询语句、使用缓存以及采用高效的分页策略,可以显著提高查询效率。本文介绍的技巧和方法,可以为开发人员在数据处理和查询优化中提供有效的指导,提升系统的性能和用户体验。掌握这些技巧后,您可以在处理海量数据时更加游刃有余。
994 9
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
234 1
|
SQL 关系型数据库 MySQL
go语言中安装数据库驱动
【11月更文挑战第1天】
259 5
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
436 4
|
SQL 关系型数据库 MySQL
go语言中数据库操作
【10月更文挑战第22天】
290 4
|
关系型数据库 MySQL 数据库连接
go语言中打开数据库连接
【11月更文挑战第1天】
140 2
|
SQL Oracle 关系型数据库
【MySQL】——数据查询_进阶操作(超详细)!!
聚合查询,联合查询,内外连接,子查询,合并查询爽歪歪
|
4月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
423 158
|
4月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。

推荐镜像

更多