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

简介: 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;
相关文章
|
SQL 关系型数据库 MySQL
菜鸟之路Day30一一MySQL之DML&DQL
本文介绍了MySQL中DML(数据操作语言)和DQL(数据查询语言)的核心用法。DML主要包括插入(insert)、更新(update)和删除(delete)语句,通过具体示例演示了如何对表数据进行增删改操作。DQL则聚焦于数据查询,涵盖基本查询、条件查询、聚合函数、分组查询、排序查询和分页查询等内容。文章通过丰富的SQL语句实例,帮助读者掌握如何高效查询和操作数据库中的数据,适合初学者学习和实践。
682 12
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
2670 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
329 1
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
596 4
|
关系型数据库 MySQL 数据库连接
go语言中打开数据库连接
【11月更文挑战第1天】
240 2
|
SQL 关系型数据库 MySQL
go语言中安装数据库驱动
【11月更文挑战第1天】
395 5
|
SQL 关系型数据库 MySQL
go语言中数据库操作
【10月更文挑战第22天】
375 4
|
11月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
11月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
11月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1666 152

推荐镜像

更多