MySQL基础之Select基本查询

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

一、基本的select语句

1.查询常量

在这里插入图片描述

2.从表中查数据

SELECT 标识选择哪些列
FROM 标识从哪个表中选择
很明显,它的意思就是说,我们要从哪一张表中查询数据
比如说,我们要从员工表emp中查询所有数据,

在这里插入图片描述
当然了,如果我们只是想要查询部分数据,我们完全可以指定要查询的字段名字
在这里插入图片描述
MySQL中的SQL语句是不区分大小写的,因此SELECT和select的作用是相同的,但是,许多开发人员习惯将关键字大写、数据列和表名小写,读者也应该养成一个良好的编程习惯,这样写出来的代码更容易阅读和维护。

注意:一般情况下,除非需要使用表中所有的字段数据,最好不要使用通配符‘*’。使用通配符虽然可以节省输入查询语句的时间,但是获取不需要的列数据通常会降低查询和所使用的应用程序的效率。通配符的优势是,当不知道所需要的列的名称时,可以通过它获取它们。
在开发的时候,我们最好不要使用*来进行查询,你想想看,开发过程中,数据库中的数据是不是有很多,然后如果使用通配符一下子把所有记录查询出来,电脑可能就直接死机了。

3.使用列的别名查询

我们发现在进行数据查询的时候,有的时候字段名很长,我们写起来也不是很方便,我们就考虑能不能通过别名来查数据呢
方式一:列名和别名之间加上as关键字
在这里插入图片描述
方式二:列名和别名之间用空格隔开
在这里插入图片描述
注意:我们需要保证表中的字段、表名等没有和保留字、数据库系统或常用方法冲突。如果真的相同,请在SQL语句中使用一对``(着重号)引起来
在这里插入图片描述

我们使用select语句来进行查询,那么查询的结果会影响到数据库中表的记录吗?
接下来我们来看一下
在这里插入图片描述
我们刚刚不是用来别名了吗,为什么表中没有改变呢,大家可能会有这样的疑惑,事实上,使用select语句查询出来的是一个临时的表
你看看,我们用select查询出来的结果,是不是和表长得很像,上面是第一行都是字段,然后下面都是数据。就相当于是客户端新建了一张临时的表用来存放我们刚刚用select查询出来的数据,当它把查询结果显示出来给我们看以后,内存就释放了,当然不会影响硬盘中的数据,。

4.去重

使用关键字distinct
我们先来看看distinct用在单给字段上面的情况在这里插入图片描述
接下来我们来看看对多个字段进行去重的情况
在这里插入图片描述

5.空值NULL参与运算

所有运算符或列值遇到null值,运算的结果都为null
先回顾一下表中数据 在这里插入图片描述
发现和null运算结果为null 在这里插入图片描述

6.过滤数据

使用where可以过滤数据,筛选出我们想要选的数据
SELECT 字段1,字段2
FROM 表名
WHERE 过滤条件
在这里插入图片描述
补充一下:desc可以显示表的结构
在这里插入图片描述
Field:表示字段名称。
Type:表示字段类型,这里 barcode、goodsname 是文本型的,price 是整数类型的。
Null:表示该列是否可以存储NULL值。
Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示在列中某个给定值允许出现多次。
Default:表示该列是否有默认值,如果有,那么值是多少。
Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等。

二、 运算符

1.算术运算符

在这里插入图片描述

这里是引用
在这里插入图片描述
在这里插入图片描述

2.比较运算符

比较运算符用来对表达式左边的操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回NULL。

比较运算符经常被用来作为SELECT查询语句的条件来使用,返回符合条件的结果记录。
在这里插入图片描述
1.等号运算符
在这里插入图片描述
2.安全等于运算符
在这里插入图片描述
3.不等于运算符
在这里插入图片描述
在这里插入图片描述
空运算符(IS NULL或者ISNULL)判断一个值是否为NULL,如果为NULL则返回1,否则返回0。

mysql> SELECT NULL IS NULL, ISNULL(NULL), ISNULL('a'), 1 IS NULL;
+--------------+--------------+-------------+-----------+
| NULL IS NULL | ISNULL(NULL) | ISNULL('a') | 1 IS NULL |
+--------------+--------------+-------------+-----------+
|            1 |            1 |           0 |         0 |
+--------------+--------------+-------------+-----------+

BETWEEN运算符使用的格式通常为SELECT D FROM TABLE WHERE C BETWEEN A AND B,此时,当C大于或等于A,并且C小于或等于B时,结果为1,否则结果为0。
在这里插入图片描述
IN运算符
IN运算符用于判断给定的值是否是IN列表中的一个值,如果是则返回1,否则返回0。如果给定的值为NULL,或者IN列表中存在NULL,则结果为NULL。
在这里插入图片描述

LIKE运算符主要用来匹配字符串,通常用于模糊匹配,如果满足条件则返回1,否则返回0。如果给定的值或者匹配条件为NULL,则返回结果为NULL。

LIKE运算符通常使用如下通配符: “%”:匹配0个或多个字符。 “_”:只能匹配一个字符。
在这里插入图片描述

3.逻辑运算符

这里是引用
逻辑非在这里插入图片描述
逻辑与
在这里插入图片描述
逻辑或
在这里插入图片描述
OR可以和AND一起使用,但是在使用时要注意两者的优先级,由于AND的优先级高于OR,因此先对AND两边的操作数进行操作,再与OR中的操作数结合。
逻辑异或运算符
在这里插入图片描述
在这里插入图片描述

4.位运算符

位运算符是在二进制数上进行计算的运算符。位运算符会先将操作数变成二进制数,然后进行位运算,最后将计算结果从二进制变回十进制数。

MySQL支持的位运算符如下:

在这里插入图片描述
1.按位与运算符
按位与(&)运算符将给定值对应的二进制数逐位进行逻辑与运算。当给定值对应的二进制位的数值都为1时,则该位返回1,否则返回0。

mysql> SELECT 1 & 10, 20 & 30;
+--------+---------+
| 1 & 10 | 20 & 30 |
+--------+---------+
|      0 |      20 |
+--------+---------+
1 row in set (0.00 sec)

1的二进制数为0001,10的二进制数为1010,所以1 & 10的结果为0000,对应的十进制数为0。20的二进制数为10100,30的二进制数为11110,所以20 & 30的结果为10100,对应的十进制数为20。
2. 按位或运算符
按位或(|)运算符将给定的值对应的二进制数逐位进行逻辑或运算。当给定值对应的二进制位的数值有一个或两个为1时,则该位返回1,否则返回0。

mysql> SELECT 1 | 10, 20 | 30; 
+--------+---------+
| 1 | 10 | 20 | 30 |
+--------+---------+
|     11 |      30 |
+--------+---------+
1 row in set (0.00 sec)

1的二进制数为0001,10的二进制数为1010,所以1 | 10的结果为1011,对应的十进制数为11。20的二进制数为10100,30的二进制数为11110,所以20 | 30的结果为11110,对应的十进制数为30。

3. 按位异或运算符
按位异或(^)运算符将给定的值对应的二进制数逐位进行逻辑异或运算。当给定值对应的二进制位的数值不同时,则该位返回1,否则返回0。

mysql> SELECT 1 ^ 10, 20 ^ 30; 
+--------+---------+
| 1 ^ 10 | 20 ^ 30 |
+--------+---------+
|     11 |      10 |
+--------+---------+
1 row in set (0.00 sec)

1的二进制数为0001,10的二进制数为1010,所以1 ^ 10的结果为1011,对应的十进制数为11。20的二进制数为10100,30的二进制数为11110,所以20 ^ 30的结果为01010,对应的十进制数为10。
再举例:

mysql> SELECT 12 & 5, 12 | 5,12 ^ 5 FROM DUAL;
+--------+--------+--------+
| 12 & 5 | 12 | 5 | 12 ^ 5 |
+--------+--------+--------+
|      4 |     13 |      9 |
+--------+--------+--------+
1 row in set (0.00 sec)

可能这样还是很懵,可以看看这张图理解一下,位运算会先把数字转换成二进制,然后逐位进行运算
在这里插入图片描述

4. 按位取反运算符
按位取反(~)运算符将给定的值的二进制数逐位进行取反操作,即将1变为0,将0变为1。

mysql> SELECT 10 & ~1;
+---------+
| 10 & ~1 |
+---------+
|      10 |
+---------+
1 row in set (0.00 sec)

由于按位取反(~)运算符的优先级高于按位与(&)运算符的优先级,所以10 & ~1,首先,对数字1进行按位取反操作,结果除了最低位为0,其他位都为1,然后与10进行按位与操作,结果为10。
在这里插入图片描述

5. 按位右移运算符
按位右移(>>)运算符将给定的值的二进制数的所有位右移指定的位数。右移指定的位数后,右边低位的数值被移出并丢弃,左边高位空出的位置用0补齐。
在这里插入图片描述

mysql> SELECT 1 >> 2, 4 >> 2;
+--------+--------+
| 1 >> 2 | 4 >> 2 |
+--------+--------+
|      0 |      1 |
+--------+--------+
1 row in set (0.00 sec)

6. 按位左移运算符
按位左移(<<)运算符将给定的值的二进制数的所有位左移指定的位数。左移指定的位数后,左边高位的数值被移出并丢弃,右边低位空出的位置用0补齐。
按位左移和上面的右移是一样道理,这里就不说了。

mysql> SELECT 1 << 2, 4 << 2;  
+--------+--------+
| 1 << 2 | 4 << 2 |
+--------+--------+
|      4 |     16 |
+--------+--------+
1 row in set (0.00 sec) 

三、 排序和分页

1.排序

使用order by进行排序
ASC(ascend): 升序
**DESC(descend):降序**
 
  • 如果没有使用排序操作,默认情况下查询返回的数据是按照我们添加的顺序显示。
  • 如果在ORDER BY后没有显示的指明排序顺序,则默认为升序排列。
  • 在这里插入图片描述
  • 可以使用列的别名进行排序。
  • 在这里插入图片描述
  • 列的别名只能ORDER BY中使用,不能在WHERE 当中使用来进行筛选。
  • ORDER BY的字段不一定是要查询的字段。
  • 强调格式:WHERE 需要声明在FROM后,ORDER BY之前。

可以使用不在SELECT列表中的列排序。 在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。如果第一列数据中所有值都是唯一的,将不再对第二列进行排序。
在这里插入图片描述

2.分页

使用LIMIT进行分页

什么是分页呢,我们来看一下下面的图片,其实分页很常见的
我们在浏览器输入要查找的数据,浏览器就会返回一些数据给我们,当我们点击下一页,或者是指定也是页数的时候,它就会跳转到相应页面。在这里插入图片描述
那么我们为什么要进行分页呢,理由其实很简单
假如现在,我们想要查找一些信息,然后浏览器把所有的信息都返回给我们,那这样的话,服务器的压力就会很大,因为数据很庞大,而且对于用户来说,我们可能在前面几条信息就已经得到了我们想要的答案,那我们就不会浪费时间继续往下看。那么后面的那些数据是不是就浪费掉了呢?而且这样也很影响效率,速度很慢,而且你想想把所有数据返回,网站相应速度就会很慢的,用户等了好久也等不到网站的响应,那用户可能就等不下去了,这样长久以往,这个网站就会失去很多的用户。
再来举个例子:以我们在淘宝买东西为例,我们想买东西,我们点击下一页,才返回一些物品信息给我们,我们如果没有点击下一页,就没有必要返回物品信息给我们了。

格式:LIMIT [位置偏移量,] 行数
第一个“位置偏移量”参数指示MySQL从哪一行开始显示,是一个可选参数,如果不指定“位置偏移量”,将会从表中的第一条记录开始(第一条记录的位置偏移量是0,第二条记录的位置偏移量是1,以此类推);第二个参数“行数”指示返回的记录条数。
--前10条记录:
SELECT * FROM 表名 LIMIT 0,10;
或者
SELECT * FROM 表名 LIMIT 10;

--第11至20条记录:
SELECT * FROM 表名 LIMIT 10,10;

--第21至30条记录: 
SELECT * FROM 表名 LIMIT 20,10;

在这里插入图片描述

MySQL 8.0中可以使用“LIMIT 3 OFFSET 4”,意思是获取从第5条记录开始后面的3条记录,和“LIMIT 4,3;”返回的结果相同。

  • 分页显式公式 :(当前页数-1)*每页条数,每页条数
  • `SELECT * FROM table

LIMIT(PageNo - 1)*PageSize,PageSize;`

  • 注意:LIMIT 子句必须放在整个SELECT语句的最后!
使用 LIMIT 的好处

约束返回结果的数量可以减少数据表的网络传输量,也可以提升查询效率。如果我们知道返回结果只有 1 条,就可以使用`LIMIT
1`,告诉 SELECT 语句只需要返回一条记录即可。这样的好处就是 SELECT不需要扫描完整的表,只需要检索到一条符合条件的记录即可返回。

下一篇我会更新数据库的高级查询,比如多表查询,子查询等,数据库的CRUD语句中,最重要的就是select语句了,希望对大家有帮助

下一篇MySQL查询进阶

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
13天前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
45 9
|
15天前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
43 3
|
20天前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法
|
19天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
89 1
|
25天前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
21天前
|
SQL 关系型数据库 MySQL
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
40 1
|
20天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
47 0
|
1月前
|
存储 SQL 关系型数据库
MySQL 给查询结果增列并自定义列数据
MySQL 给查询结果增列并自定义列数据
455 2
|
21天前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
31 0
|
10天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
25 1