MySQL SELECT 语句示例

⚡ 智能摘要

此 MySQL SELECT 语句从一个或多个表中检索行,下面的每个示例都针对 myflix 示例数据库运行,从简单的星形查询过渡到表达式、列别名和字符串函数。

  • 🔎 核心宗旨: SELECT 语句用于从命令行或 PHP 中提取符合特定条件的存储行。 Python, 和其他语言。
  • 🧩 语法顺序: SELECT、FROM、WHERE、GROUP BY、HAVING 和 ORDER BY 必须按固定顺序出现。
  • 明星快捷方式: SELECT * FROM `members`; 返回每一列,而显式命名列可以保持结果集更小、速度更快。
  • 🔗 表达式: Concat() 连接列值,LEFT() 修剪字符,因此计算字段直接出现在结果集中。
  • 🏷️ 列别名: 可选的 AS 关键字可以重命名任何表达式,将 Concat(`title`) 等难以辨认的标题替换为清晰的标签。
  • 🖱️ 工作台对比: MySQL Workbench 可以直观地生成查询,但对于复杂、精确的检索,仍然需要手写 SELECT 语句。

什么是 SELECT 查询? MySQL?

SELECT 查询 用于从以下位置获取数据: MySQL 数据库。数据库存储数据以供日后检索。数据库的目的是 MySQL SELECT 语句用于从数据库表中返回符合给定条件的一行或多行数据。SELECT 查询可以在 PHP 或 Ruby 等脚本语言中使用,也可以通过命令行执行。

SELECT 查询 MySQL

因为 SELECT 是您最常运行的命令,所以在接触示例数据之前,最好先学习它的语法。

SQL SELECT语句语法

SELECT 是最常用的 SQL 命令,其一般语法如下:

SELECT [DISTINCT|ALL] { * | [fieldExpression [AS newName]} FROM tableName [alias] [WHERE condition] [GROUP BY fieldName(s)] [HAVING condition] [ORDER BY fieldName(s)];

点击这里

  • 选择 是让数据库知道您想要检索数据的 SQL 关键字。
  • [独特 | 全部] 这些是可选关键字,用于微调 SQL SELECT 语句返回的结果。如果未指定任何关键字,则默认值为 ALL。
  • {*| [字段表达式 [AS newName]} 至少需要指定一个部分。“*”选择指定表名中的所有字段;fieldExpression 对指定的字段执行计算,例如将数字相加或将两个字符串字段合并为一个字段。
  • tableName 为必填项,且必须至少包含一个表名。多个表名之间必须用逗号分隔,或使用 JOIN 关键字连接。
  • NeoCity 条件是可选的。它指定查询返回结果集中的条件。
  • 通过...分组 用于将具有相同字段值的记录放在一起。
  • HAVING 使用 GROUP BY 关键字时,条件用于指定条件。
  • ORDER BY 用于指定结果集的排序顺序。

*

星号 (*) 会选中表中的所有列。一个简单的 SELECT 语句如下所示。

SELECT * FROM `members`;

上述语句会选择 members 表中的所有字段。分号是语句终止符。虽然不是强制性的,但以这种方式结束语句被认为是一种良好的编程习惯。

SELECT DISTINCT 和 LIMIT MySQL

语法中有两个可选关键字值得仔细研究,因为初学者在表格增长时很快就会遇到它们。

DISTINCT, 从结果集中删除重复行。电影表存储了多部 2007 年上映的电影,因此普通查询会重复该年份。DISTINCT 函数会返回每个值一次。

SELECT DISTINCT `year_released` FROM `movies`;

极限 限制返回的行数,从而保护客户端免受可能拉取数百万条记录的查询的影响。

SELECT * FROM `movies` LIMIT 5;
关键字 它做什么 什么时候使用
全部(默认) 返回所有匹配的行,包括重复行。 统计或列出原始记录
DISTINCT, 将重复行合并为一行。 构建唯一值列表
极限 仅返回前 N 行 预览数据或分页结果

语法确定后,示例数据库将这些子句付诸实践。

SELECT 语句实际示例

点击下载 用于实际示例的 myflix 数据库。

您可以学习如何将 .sql 文件导入到系统中。 MySQL 工作台.

以下示例基于以下两张表格进行演示。

表1: 成员

会员号码 全名 性别 出生日期 实际地址 邮寄地址 联系电话 电子邮件
1 珍妮特琼斯 (女) 21-07-1980 第一街 4 号地块 私人包 0759 253 542 janetjones@yagoo.cm
2 珍妮特·史密斯·琼斯 (女) 23-06-1980 梅尔罗斯 123 jj@fstreet.com
3 罗伯特·菲尔 (男) 12-07-1989 第三街 3 12345 rm@tstreet.com
4 格洛丽亚·威廉姆斯 (女) 14-02-1984 第二街 2

表2: 电影

电影 ID 标题 导向器 发行年份 类别编号
1 加勒比海盗4 罗伯·马歇尔 2011 1
2 忘掉莎拉·马歇尔 尼古拉斯·斯托勒 2008 2
3 X-战警 2008
4 Code 黑 埃德加·吉姆斯 2010
5 爸爸的小女孩 2007 8
6 天使与魔鬼 2007 6
7 达芬奇 Code 2007 6
9 Honey moonERS 约翰舒尔茨 2005 8
16 67% 有罪 2012

获取会员列表

假设我们想要获取数据库中所有已注册的图书馆会员名单。我们可以使用下面所示的脚本来实现这一点。

SELECT * FROM `members`;

执行脚本 MySQL Workbench 生成以下结果。

会员号码 全名 性别 出生日期 实际地址 邮寄地址 联系电话 电子邮件
1 珍妮特琼斯 (女) 21-07-1980 第一街 4 号地块 私人包 0759 253 542 janetjones@yagoo.cm
2 珍妮特·史密斯·琼斯 (女) 23-06-1980 梅尔罗斯 123 jj@fstreet.com
3 罗伯特·菲尔 (男) 12-07-1989 第三街 3 12345 rm@tstreet.com
4 格洛丽亚·威廉姆斯 (女) 14-02-1984 第二街 2

查询返回了 members 表中的所有行和列。

选择特定列

假设我们只对全名、性别、实际地址和电子邮件字段感兴趣。以下脚本可以实现这一点。

SELECT `full_names`,`gender`,`physical_address`, `email` FROM `members`;

执行脚本 MySQL Workbench 生成以下结果。

全名 性别 实际地址 电子邮件
珍妮特琼斯 (女) 第一街 4 号地块 janetjones@yagoo.cm
珍妮特·史密斯·琼斯 (女) 梅尔罗斯 123 jj@fstreet.com
罗伯特·菲尔 (男) 第三街 3 rm@tstreet.com
格洛丽亚·威廉姆斯 (女) 第二街 2

使用表达式获取电影列表

表达式也可以用于 SELECT 语句中。例如,假设我们想要一个电影列表,其中一个字段包含电影标题和导演姓名,导演姓名用括号括起来,另一个字段包含电影上映年份。以下脚本可以实现此功能。

SELECT Concat(`title`, ' (', `director`, ')') , `year_released` FROM `movies`;

点击这里

  • Concat() MySQL 该函数将列值连接在一起。
  • “Concat(`title`, ' (', `director`, ')')”这行代码获取标题,添加一个左括号,然后是导演的名字,最后添加一个右括号。
  • 在 Concat() 函数中,字符串各部分之间用逗号分隔。

执行脚本 MySQL Workbench 生成以下结果集。

连接(‘title’,‘(’,‘director’,’)’) 发行年份
加勒比海盗4(罗伯·马歇尔) 2011
忘掉莎拉·马歇尔(尼古拉斯·斯托勒) 2008
2008
Code 姓名 Black(Edgar Jimz) 2010
2007
2007
2007
Honey mooners(约翰·舒尔茨) 2005
2012

注意: 当任何参数为 NULL 时,Concat() 返回 NULL,这就是为什么上面没有导演的电影显示 NULL 的原因。

别名字段名称

上面的示例将连接代码作为字段名返回。要在结果集中使用更具描述性的字段名,请应用列别名。基本语法如下。

SELECT `column_name|value|expression` [AS] `alias_name`;

点击这里

  • “SELECT `column_name|value|expression`” 是常规的 SELECT 语句,可以是列名、值或表达式。
  • “[作为]” 是别名前的可选关键字。
  • “别名” 是结果集中作为字段名返回的别名。

同样的查询,但列名更有意义:

SELECT Concat(`title`, ' (', `director`, ')') AS `Concat`, `year_released` FROM `movies`;

我们得到以下结果。

康卡特 发行年份
加勒比海盗4(罗伯·马歇尔) 2011
忘掉莎拉·马歇尔(尼古拉斯·斯托勒) 2008
2008
Code 姓名 Black(Edgar Jimz) 2010
2007
2007
2007
Honey mooners(约翰·舒尔茨) 2005
2012

获取显示出生年份的会员列表

假设我们想要一个包含所有成员的列表,其中显示了成员编号、全名和出生年份。我们可以使用 LEFT 字符串函数来实现这一点。trac根据出生日期字段确定出生年份。

SELECT `membership_number`,`full_names`,LEFT(`date_of_birth`,4) AS `year_of_birth` FROM members;

点击这里

  • “LEFT(`出生日期`,4)” 这个 LEFT 字符串函数 接受出生日期作为参数,并仅返回从左侧数起的 4 个字符。
  • “AS `出生年份`”列别名 我们的研究结果中也包含了这一点。 AS 关键字是可选的您可以将其省略,查询仍然有效。

执行查询 MySQL 使用 Workbench 对 myflixdb 进行测试,得到如下所示的结果。

会员号码 全名 出生年份
1 珍妮特琼斯 1980
2 珍妮特·史密斯·琼斯 1980
3 罗伯特·菲尔 1989
4 格洛丽亚·威廉姆斯 1984

手动编写查询语句只是获取结果集的一种途径。Workbench 还可以自动为您构建语句。

使用 SQL MySQL 工作台

我们现在要使用 MySQL 使用 Workbench 生成脚本,该脚本显示我们类别表中的所有字段名称。

1. 右键单击​​“类别”表。单击“选择行 - 限制 1000”。

2. MySQL Workbench 会自动创建 SQL 查询并将其粘贴到编辑器中。

3. 查询结果显示在编辑器下方的网格中。

SQL 使用 MySQL 工作台

如截图所示,我们并没有自己编写 SELECT 语句。 MySQL Workbench 为我们生成了它。

为什么我们要使用 SELECT SQL 命令? MySQL 工作台?

你可能想知道,既然有像 SQL SELECT 这样的工具,为什么还要学习 SQL SELECT 命令呢? MySQL Workbench 无需任何 SQL 语言知识即可返回相同的结果。虽然可以使用这种捷径,但是…… 学习 SELECT 命令 为您提供更多 灵活性质量控制 在你的 SQL SELECT 语句.

MySQL 工作台属于“示例查询”(QBE)工具。其目的是更快地生成 SQL 语句并提高用户的工作效率。

学习 SQL SELECT 命令可以让你创建 复杂查询 这无法通过诸如“按示例查询”之类的实用程序轻松生成。 MySQL 工作台。

为了提高生产力,您可以 生成代码 MySQL 工作台, 然后 定制满足您的要求只有理解了 SQL 语句的工作原理,才能做到这一点。

了解 MySQL 选择语句

常见问题

通常情况下是的。SELECT * 会读取每一列,包括你可能不需要的大型文本字段和 BLOB 字段,并且会阻塞索引。给列命名可以减小结果集的大小,并加快查询速度。

SELECT 和 FROM 等关键字不区分大小写。字符串比较遵循列的排序规则,因此像 utf8mb4_0900_ai_ci 这样不区分大小写的排序规则会将“Janet”和“janet”视为相等。

缺少索引是常见原因。在查询之前运行 EXPLAIN 以查看是否出现此问题。 MySQL 执行全表扫描,然后对筛选或连接的列建立索引,并仅返回所需的行。

是的。文本转SQL助手在了解您的数据库模式后,会将纯文本请求转换为SELECT语句。 Rev查看生成的连接和过滤器,因为 AI 模型可能会创建不存在的列名。

不。人工智能可以快速生成查询语句,但你仍然需要验证其逻辑、连接以及性能。 MySQL 工作台了解 SELECT 语句可以让你在结果进入生产环境之前发现错误结果。

总结一下这篇文章: