SELECT检索数据

本文详细介绍了如何使用SELECT语句在MySQL中检索数据,包括单列、多列、全列检索,以及DISTINCT、LIMIT、排序和完全限定表名等高级技巧。此外,还涵盖了如何处理重复值、排序规则和数据库表名限定。
摘要由CSDN通过智能技术生成

通过SELECT语句可以根据数据表中的一个或多个列组合检索数据。

检索一列

SELECT 列名 FROM 表名;

例如根据host列检索sys数据库中的host_summary数据表的数据,输出结果:

mysql> SELECT host FROM host_summary;
+-----------+
| host      |
+-----------+
| localhost |
+-----------+
1 row in set (0.01 sec)

检索多列

SELECT 列名1,列名2,列名3 FROM 表名;

例如根据列hoststatementsfile_ios检索sys数据库中的host_summary数据表的数据,输出结果:

mysql> SELECT host,statements,file_ios FROM host_summary;
+-----------+------------+----------+
| host      | statements | file_ios |
+-----------+------------+----------+
| localhost |        440 |      144 |
+-----------+------------+----------+
1 row in set (0.01 sec)

检索所有列

SELECT * FROM 表名;

例如检索sys数据库中的host_summary数据表的所有数据,输出结果:

mysql> SELECT * FROM host_summary;
+-----------+------------+-------------------+-----------------------+-------------+----------+-----------------+---------------------+-------------------+--------------+----------------+------------------------+
| host      | statements | statement_latency | statement_avg_latency | table_scans | file_ios | file_io_latency | current_connections | total_connections | unique_users | current_memory | total_memory_allocated |
+-----------+------------+-------------------+-----------------------+-------------+----------+-----------------+---------------------+-------------------+--------------+----------------+------------------------+
| localhost |        442 | 625.42 ms         | 1.41 ms               |          14 |      144 | 45.74 ms        |                   2 |                14 |            2 | 1.31 MiB       | 80.84 MiB              |
+-----------+------------+-------------------+-----------------------+-------------+----------+-----------------+---------------------+-------------------+--------------+----------------+------------------------+
1 row in set (0.01 sec)

检索唯一值

检索的列中数据存在重复值时,只需要获取唯一值,可以使用如下命令:

SELECT DISTINCT 列名 FROM 表名;

例如通过SELECT set_time FROM sys_config命令检索sys数据库中的sys_config表数据时,结果如下:

mysql> SELECT set_time FROM sys_config;
+---------------------+
| set_time            |
+---------------------+
| 2021-04-23 23:56:03 |
| 2021-04-23 23:56:03 |
| 2021-04-23 23:56:03 |
| 2021-04-23 23:56:03 |
| 2021-04-23 23:56:03 |
| 2021-04-23 23:56:03 |
+---------------------+
6 rows in set (0.00 sec)

使用SELECT DISTINCT set_time FROM sys_config命令检索sys数据库中的sys_config表数据时,结果如下:

mysql> SELECT DISTINCT set_time FROM sys_config;
+---------------------+
| set_time            |
+---------------------+
| 2021-04-23 23:56:03 |
+---------------------+
1 row in set (0.00 sec)

当按多列检索数据时,DISTINCT会对所有列生效,不支持只对单一列输出唯一值。

限制输出结果

使用SELECT语句的执行结果会返回所有结果,当只需要前几项结果时,可以使用如下命令:

SELECT 列名 FROM 表名 LIMIT 整数;

例如检索sys数据库中的sys_config表的variable列的前三条数据,结果如下:

mysql> SELECT variable FROM sys_config LIMIT 3;
+-------------------------------+
| variable                      |
+-------------------------------+
| diagnostics.allow_i_s_tables  |
| diagnostics.include_raw       |
| ps_thread_trx_info.max_length |
+-------------------------------+
3 rows in set (0.00 sec)

也可以在LIMIT后输入两个整数,用逗号分割,表示从某一行开始,向后检索几行。

SELECT 列名 FROM 表名 LIMIT 整数1,整数2;

例如检索sys数据库中的sys_config表的variable列的数据,从第2行数据开始,向后检索3行,结果如下:

LIMIT 1,3中的1并不是第一行数据,行从0开始计数,因此1表示第二行,3表示向后检索3行。

mysql> SELECT variable FROM sys_config LIMIT 1,3;
+--------------------------------------+
| variable                             |
+--------------------------------------+
| diagnostics.include_raw              |
| ps_thread_trx_info.max_length        |
| statement_performance_analyzer.limit |
+--------------------------------------+
3 rows in set (0.00 sec)

完全限定表名

一张表在当前数据库中的表名是唯一的,不能重复。但在不同的数据库中,可能会有同名的表,因此,可以在使用SELECT时,完全限定表所处的数据库。同理,列在一张表中唯一,但在不同表中也可能重名,也可以限定列所处的表。

SELECT 表名.列名 FROM 数据库名.表名;

例如根据host列检索sys数据库中的host_summary数据表的数据,输出结果如下,与检索一列中样例输出结果相同:

mysql> SELECT host_summary.host FROM sys.host_summary;
+-----------+
| host      |
+-----------+
| localhost |
+-----------+
1 row in set (0.01 sec)

检索结果排序

如果不指定检索结果的顺序,则输出的结果一般会以它在底层表中出现的顺序显示,但是如果数据被更新、删除等操作后,MySQL会重用回收存储空间,因此会影响默认查询结果的顺序,如果不明确规定排序顺序,则不应假定检索出的数据的顺序有意义。

SELECT 列名 FROM 表名 ORDER BY 列名;

例如检索sys数据库中的sys_config表的variable列的数据,使用variable的字母顺序排序,结果如下:

  • 默认查询结果按字母顺序排序。
  • 不一定使用检索的列来排序,也可以使用其他列作为排序的依据。
mysql> SELECT variable FROM sys_config ORDER BY variable;
+--------------------------------------+
| variable                             |
+--------------------------------------+
| diagnostics.allow_i_s_tables         |
| diagnostics.include_raw              |
| ps_thread_trx_info.max_length        |
| statement_performance_analyzer.limit |
| statement_performance_analyzer.view  |
| statement_truncate_len               |
+--------------------------------------+
6 rows in set (0.00 sec)

检索结果不仅可以按一列进行排序,还可以按多列进行排序。

SELECT 列名 FROM 表名 ORDER BY 列名1,列名2;

例如检索sys数据库中的sys_config表的variable列的数据,优先使用variable的字母顺序排序,当字母顺序相同时,使用set_time的顺序进行排序,结果如下:

mysql> SELECT variable FROM sys_config ORDER BY variable,set_time;
+--------------------------------------+
| variable                             |
+--------------------------------------+
| diagnostics.allow_i_s_tables         |
| diagnostics.include_raw              |
| ps_thread_trx_info.max_length        |
| statement_performance_analyzer.limit |
| statement_performance_analyzer.view  |
| statement_truncate_len               |
+--------------------------------------+
6 rows in set (0.00 sec)

多列名排序时,先按列名1排序,当根据列名1的排序相同时,再按列名2排序,以此类推。

检索结果不仅支持升序排序,也可以降序排序,需要在ORDER BY后使用DESC关键字。

SELECT 列名 FROM 表名 ORDER BY 列名 DESC;

例如检索sys数据库中的sys_config表的variable列的数据,使用variable的字母顺序降序排序,结果如下:

mysql> SELECT variable FROM sys_config ORDER BY variable DESC;
+--------------------------------------+
| variable                             |
+--------------------------------------+
| statement_truncate_len               |
| statement_performance_analyzer.view  |
| statement_performance_analyzer.limit |
| ps_thread_trx_info.max_length        |
| diagnostics.include_raw              |
| diagnostics.allow_i_s_tables         |
+--------------------------------------+
6 rows in set (0.00 sec)

DESC关键字只应用到直接位于其前面的列名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值