MySQL数据查询select语句灵活使用详解

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL数据查询select语句灵活使用详解

数据库中对数据进行查询必须使用Select关键词。本期教程跟老刘一起对数据库查询的几种情况进行学习。

第一种:单表查询

语法结构: select 字段名称 from 表名称

或者如果我们要查询表的所以字段,就直接使用select * from 表名  这个语法即可,这里的星号*表示所有字段名称。

案例:查询用户表user的所有信息

Select * from user

第二种:带有条件筛选的单表查询 where

这个语法只是在select查询语句的最好加上一条where语句进行数据的进一步过滤。

语法结构:where 字段1 表达式符号 相应条件值

举例:查询姓名为刘金玉的用户信息

Select * from user where trueName='刘金玉'

这里要注意的是“刘金玉”为一个字符串,因此要加上单引号,在数据库查询语句中,我们之前强调过,如果字段类型为字符串类型(例如char、varchar、nchar、nvarchar、text等)就要在查询和录入的时候加上相应的单引号‘’

第三种:多表查询 join

我们很多时候往往要多个表的数据举行查询,因为根据关系型数据库设计的特点,我们需要的各个字段的数据往往分布于各个不同的数据表内。虽然在数据库中我们也可以采用where语句进行关键表的字段,但是这样做有很多弊端:一是条件语句不清晰,二是查询效率降低。因此,我们引出了join这个关键词。

Join有三种类型:

left join 左连接 (默认的join就是left join)

right join 右连接

inner join 内连接

语法结构:

Select * from 表1 left/right/inner join 表2 on 表1.字段=表2.字段

举例:关联用户表和新闻表,关联字段为userid

Select * from user left join news on user.userid= news. userid

根据这样说表关联,就可以显示文章的作者信息啦!当然,我们也可以采用给表取别名的方式关联。

Select * from user a left join news b on a.userid= b. userid

在使用join关键词进行关联的时候,一定要注意的是主表是哪个,这个跟现实结果记录数有关系。最好结合老刘的《零基础数据库教程》视频学习,注意观察一下不同的使用,得到的不同表关联结果。以下简单说明一下:

A left join B  就是A为主表

A right join B 就是B为主表

A inner join B 就是取两张表的公共部分

副表在这里只是根据关键词对主表进行匹配,可能会被多次匹配,这要看数据表设计时候的表关系。

第四种:过滤相同列数据 distinct

如果我们得到的查询结果中有相同的数据行,我们可以通过distinct关键词进行过滤。

语法结构:select distinct 字段 from 表

没错,只需要在查询select关键词后加上distinct关键词即可。

举例:查询用户表一共有哪些用户昵称。

Select distinct nickname from user

第五种:数据排序order by

我们很多时候都是要将查询后的数据进行排序的,按照我们查询的指定字段为主关键词和次要关键词进行排序,这个时候,我们需要使用order by这个重要关键词。这个关键词往往用在查询语句的最后。

Order by 往往结合asc和desc这两个关键词,其中asc表示升序,desc表示降序。

语法结构:

Select 字段 from 表 『where语句』 order by 字段1 asc/desc, 字段2 asc/desc...

使用案例:查询用户表所有信息,并按照用户编号进行升序排序。

Select * from user  order by userid asc

其实在这个语句中,我们也可以省略asc关键词,因为order by 默认是以升序作为排序规则的。所以这个语句,我们也可以写成:

Select * from user  order by userid

第六种:数据记录显示limit

我们很多使用数据库的人员中,很多人都是做软件来发的,因此limit这个关键词就非常实用了,因为我们可以结合这个关键词,为我们的软件查询出来的数据记录结果做一个分页功能。limit这个关键词往往用在查询语句的最后。

语法结构:

Select 字段 from 表 [where语句] [order by语句] [limit语句]

举例:获取用户表的前十条记录

Select * from user limit 10

获取用户表的第11~20条记录

Select * from user limit 10,20

第七种:聚合函数 sum  count等

sum函数用来求和、count函数用来统计数据记录数。但要注意,聚合函数会自动忽略类型值为null的记录。

下面分别对两个函数进行讲解:

1.求和函数sum。使用注意,该函数用于统计数值类字段。使用时配合select语句。函数参数传入字段名,格式sum(字段名称)。

举例:统计某学生各科总成绩。

select stuname,sum(score) from student_score

这里的stuname是学生姓名,score是指各科目对应的成绩字段,student_score是学生各科成绩表

第八种:数据分组group by

group by的意思就是根据哪些字段进行分组,这里注意,后面接的第一个字段是主要关键词,其它的依次都是次要关键词。

分组的数据一般都是where语句筛选后的最终数据,再进行依次筛选,这样的好处是可以减少分组的数据,以进一步提高数据库性能。

语法结构:

group by 字段1,字段2,字段3

语句所在sql中的位置:

select 字段 from 表 [where语句] [group by语句]

一般来说,group by后面接几个字段,在select中就会列出几个字段。分组最终的目的是为了统计数据,比如对每一个学生的各科成绩求和。

案例:统计每个城市有多少人,我们可以从人口信息表中查询出要统计的数据结果。

select city,count(*) from persons group by city

这里的persons是人口信息表,city是城市名称,count(*)表示统计记录数

第九种:分组后筛选数据 having

我们有时候常常还会将分组后的数据进行进一步过滤,那么,此时就要使用到having了。

语句所在sql中的位置:

select 字段 from 表 [where语句] [group by语句][having语句]

至于having之后的字段表达式的用法类似于where语句,唯一不同的就是having之后的筛选条件的字段是group by之后的字段。

案例:筛选出总成绩大于300分的学生

思路:先用group by分组求出每个学生的总成绩,然后将分组后的总成绩中筛选出成绩大于300的结果记录。

select stuname,sum(score) from student_score group by stuname having sum(score)>300

因为,这里筛选的是总成绩这个字段,而这个字段的名称就是sum(score),因此在having中使用sum(score)作为字段名称。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法
|
2月前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
81 5
|
2月前
|
关系型数据库 MySQL 数据库
MySQL的语法涵盖了数据定义、数据操作、数据查询和数据控制等多个方面
MySQL的语法涵盖了数据定义、数据操作、数据查询和数据控制等多个方面
67 5
|
4月前
|
SQL 关系型数据库 MySQL
SQL语句编写的练习(MySQL)
这篇文章提供了MySQL数据库中关于学生表、课程表、成绩表和教师表的建表语句、数据插入示例以及一系列SQL查询练习,包括查询、排序、聚合和连接查询等操作。
|
4月前
|
存储 关系型数据库 MySQL
在 MySQL 中使用 Insert Into Select
【8月更文挑战第11天】
670 0
在 MySQL 中使用 Insert Into Select
|
5月前
|
存储 关系型数据库 文件存储
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
52 2
|
5月前
|
SQL 关系型数据库 MySQL
MySQL DQL(数据查询语言)深度解析与实践
MySQL DQL(数据查询语言)深度解析与实践
|
5月前
|
关系型数据库 MySQL API
MySQL上亿数据查询优化:实践与技巧
MySQL亿级数据查询优化涉及索引设计、分区表、查询语句优化和数据库架构调整。例如,通过为常用查询列创建索引、使用EXPLAIN分析查询计划、避免全表扫描和SELECT *,以及采用垂直拆分、水平拆分和读写分离来提升性能。分区表能减少查询数据量,API接口测试可验证优化效果。
357 0
|
5月前
|
SQL Oracle 关系型数据库
MySQL单表千万级数据查询优化大家怎么说(评论有亮点)
单表千万级数据是MySQL查询的一个坎,可能还不是天花板。“一个人走的慢,一群人走的快”,通过讨论可以发现MySQL千万数据的全貌大概是怎样的。
220 0
|
5月前
|
关系型数据库 MySQL 索引
MySQL之优化SELECT语句
以上只是一些基本的优化策略,具体的优化方案还需要根据实际的业务需求和数据情况来定制。
54 0