MySQL基础之Select基本查询

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

一、基本的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
相关文章
|
16天前
|
关系型数据库 MySQL 索引
MySQL的全文索引查询方法
【8月更文挑战第26天】MySQL的全文索引查询方法
35 0
|
22天前
|
SQL 关系型数据库 MySQL
在MySQL中,什么是结构化查询语言 (SQL)
【8月更文挑战第20天】在MySQL中,什么是结构化查询语言 (SQL)
30 1
|
14天前
|
自然语言处理 关系型数据库 MySQL
MySQL MATCH 匹配中文 无法查询的问题如何处理?
【8月更文挑战第27天】MySQL MATCH 匹配中文 无法查询的问题如何处理?
134 62
|
12天前
|
自然语言处理 关系型数据库 MySQL
MySQL MATCH 匹配中文 无法查询的问题如何处理?
【8月更文挑战第29天】MySQL MATCH 匹配中文 无法查询的问题如何处理?
40 6
|
12天前
|
SQL 存储 关系型数据库
mysql查询怎么用
mysql查询怎么用【8月更文挑战第31天】
17 4
|
22天前
|
缓存 关系型数据库 MySQL
在Linux中,如何优化MySQL性能,包括索引优化和查询分析?
在Linux中,如何优化MySQL性能,包括索引优化和查询分析?
|
24天前
|
存储 关系型数据库 MySQL
MySQL bit类型增加索引后查询结果不正确案例浅析
【8月更文挑战第17天】在MySQL中,`BIT`类型字段在添加索引后可能出现查询结果异常。表现为查询结果与预期不符,如返回错误记录或遗漏部分数据。原因包括索引使用不当、数据存储及比较问题,以及索引创建时未充分考虑`BIT`特性。解决方法涉及正确运用索引、理解`BIT`的存储和比较机制,以及合理创建索引以覆盖各种查询条件。通过`EXPLAIN`分析执行计划可帮助诊断和优化查询。
|
11天前
|
SQL 关系型数据库 MySQL
|
18天前
|
缓存 关系型数据库 MySQL
【缓存大对决】Memcached VS MySQL查询缓存,谁才是真正的性能之王?
【8月更文挑战第24天】在现代Web应用中,缓存技术对于提升性能与响应速度至关重要。本文对比分析了Memcached与MySQL查询缓存这两种常用方案。Memcached是一款高性能分布式内存对象缓存系统,支持跨服务器共享缓存,具备灵活性与容错性,但受限于内存大小且不支持数据持久化。MySQL查询缓存内置在MySQL服务器中,简化了缓存管理,特别适用于重复查询,但功能较为单一且扩展性有限。两者各有所长,实际应用中可根据需求单独或结合使用,实现最佳性能优化。
39 0
|
22天前
|
关系型数据库 MySQL 数据库
如何利用MySQL建立覆盖原表的索引优化查询性能
通过合理使用覆盖索引,可以显著提高MySQL数据库的查询性能。然而,创建索引时需要仔细分析查询需求,合理设计索引结构,以确保索引能够发挥最大的效益。
26 0

热门文章

最新文章