简介
MySQL是一种广泛使用的开源关系型数据库管理系统,它提供了许多功能强大的SQL查询语句,其中最常用且最重要的是SELECT语句。SELECT语句用于从数据库表中检索数据,并根据给定的条件返回所需的结果集。在本文中,我们将深入探讨MySQL SELECT语句的各个方面,并提供一些示例来说明其用法。
基本语法
SELECT 的语法格式如下:
代码语言:sql复制SELECT
{* | <字段列名>}
[
FROM <表 1>, <表 2>…
[WHERE <表达式>
[GROUP BY <group by definition>
[HAVING <expression> [{<operator> <expression>}…]]
[ORDER BY <order by definition>]
[LIMIT[<offset>,] <row count>]
]
各条子句的含义如下:
{*|<字段列名>}
包含星号通配符的字段列表,表示所要查询字段的名称。<表 1>,<表 2>…
,表 1 和表 2 表示查询数据的来源,可以是单个或多个。WHERE <表达式>
是可选项,如果选择该项,将限定查询数据必须满足该查询条件。GROUP BY< 字段 >
,该子句告诉 MySQL 如何显示查询出来的数据,并按照指定的字段分组。[ORDER BY< 字段 >]
,该子句告诉 MySQL 按什么样的顺序显示查询出来的数据,可以进行的排序有升序(ASC)和降序(DESC),默认情况下是升序。[LIMIT[<offset>,]<row count>]
,该子句告诉 MySQL 每次显示查询出来的数据条数。
下面先介绍一些简单的 SELECT 语句,关于 WHERE、GROUP BY、ORDER BY 和 LIMIT 等限制条件,后面我们会一一讲解。
查询表中所有字段
查询所有字段是指查询表中所有字段的数据。MySQL 提供了以下 2 种方式查询表中的所有字段。
- 使用“*”通配符查询所有字段
- 列出表的所有字段
- 使用
“*”
查询表的所有字段
SELECT 可以使用“*”查找表中所有字段的数据,语法格式如下:
代码语言:sql复制SELECT * FROM 表名;
使用“*”
查询时,只能按照数据表中字段的顺序进行排列,不能改变字段的排列顺序。
示例如下:
代码语言:sql复制mysql> use test_db;
Database changed
mysql> SELECT * FROM employees;
---- -------- --------- ------ ------ -------- ------------
| id | name | dept_id | age | sex | height | join_date |
---- -------- --------- ------ ------ -------- ------------
| 1 | Dany | 1 | 25 | F | 160 | 2015-09-10 |
| 2 | Green | 3 | 23 | F | 158 | 2016-10-22 |
| 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 |
| 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 |
| 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 |
| 6 | John | 2 | 21 | M | 172 | 2015-11-11 |
| 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 |
| 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 |
| 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 |
| 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 |
---- -------- --------- ------ ------ -------- ------------
10 rows in set (0.26 sec)
注:一般情况下,除非需要使用表中所有的字段数据,否则最好不要使用通配符“*”
。虽然使用通配符可以节省输入查询语句的时间,但是获取不需要的列数据通常会降低查询和所使用的应用程序的效率。使用“*”
的优势是,当不知道所需列的名称时,可以通过“*”
获取它们。
- 列出表的所有字段
SELECT 关键字后面的字段名为需要查找的字段,因此可以将表中所有字段的名称跟在 SELECT 关键字后面。如果忘记了字段名称,可以使用 DESC 命令查看表的结构。
有时,由于表的字段比较多,不一定能记得所有字段的名称,因此该方法很不方便,不建议使用。
查询 tb_students_info 表中的所有数据,SQL 语句还可以书写如下:
代码语言:sql复制SELECT id,name,dept_id,age,sex,height,join_date FROM employees;
虽然列出表的所有字段的方式比较灵活,但是查询所有字段时通常使用“*”
通配符。使用“*”
这种方式比较简单,尤其是表中的字段很多的时候,这种方式的优势更加明显。当然,如果需要改变字段显示的顺序,可以选择列出表的所有字段。
查询表中指定的字段
查询表中的某一个字段的语法格式为:
代码语言:sql复制SELECT < 列名 > FROM < 表名 >;
- 查询单个字段
查询 employees
表中 name
列所有员工的姓名,SQL 语句和运行结果如下所示。
mysql> SELECT name FROM employees;
--------
| name |
--------
| Dany |
| Green |
| Henry |
| Jane |
| Jim |
| John |
| Lily |
| Susan |
| Thomas |
| Tom |
--------
10 rows in set (0.00 sec)
输出结果显示了 employees
表中 name 字段下的所有数据。
- 查询多个字段内容
使用 SELECT 声明可以获取多个字段下的数据,只需要在关键字 SELECT 后面指定要查找的字段名称,不同字段名称之间用逗号“,”分隔开,最后一个字段后面不需要加逗号,语法格式如下:
代码语言:sql复制SELECT <字段名1>,<字段名2>,…,<字段名n> FROM <表名>;
示例:
从 employees
表中获取 id
、name
和 height
三列,SQL 语句和运行结果如下所示。
mysql> SELECT id,name,height
-> FROM employees;
---- -------- --------
| id | name | height |
---- -------- --------
| 1 | Dany | 160 |
| 2 | Green | 158 |
| 3 | Henry | 185 |
| 4 | Jane | 162 |
| 5 | Jim | 175 |
| 6 | John | 172 |
| 7 | Lily | 165 |
| 8 | Susan | 170 |
| 9 | Thomas | 178 |
| 10 | Tom | 165 |
---- -------- --------
10 rows in set (0.00 sec)
输出结果显示了 employees
表中 id
、name
和 height
三个字段下的所有数据。
总结
SQL是一个非常强大且灵活的查询语言,可以根据不同的需求进行多样化的数据检索和操作。在实际应用中,根据具体的业务场景和数据结构,你可以根据这些基本用法进行更复杂的查询操作。要熟练掌握SQL,需要不断练习并深入了解数据库的表设计和索引优化等知识。