MySQL SELECT 语句及示例

MySQL 中的 SELECT 查询是什么?

SELECT 查询用于从 MySQL 数据库中获取数据。数据库存储数据以便以后检索。MySQL Select 的目的是从数据库表中返回一个或多个符合给定条件的行。Select 查询可用于脚本语言,如 PHP、Ruby,或者您可以通过命令行执行它。

SELECT query in MySQL

SQL SELECT 语句语法

它是使用最频繁的 SQL 命令,并且具有以下通用语法

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

HERE

  • SELECT 是 SQL 关键字,它告知数据库您要检索数据。
  • [DISTINCT | ALL] 是可选关键字,可用于微调 SQL SELECT 语句返回的结果。如果未指定任何内容,则假定 ALL 为默认值。
  • {*| [fieldExpression [AS newName]} 至少要指定一个部分,“*”选择指定表名中的所有字段,fieldExpression 对指定字段执行一些计算,例如数字相加或将两个字符串字段连接成一个。
  • FROM tableName 是必需的,并且必须包含至少一个表,多个表必须用逗号分隔或使用 JOIN 关键字连接。
  • WHERE condition 是可选的,可用于指定查询返回的结果集中的条件。
  • GROUP BY 用于将具有相同字段值的记录分组。
  • HAVING condition 用于在使用 GROUP BY 关键字时指定条件。
  • ORDER BY 用于指定结果集的排序顺序。

*

星号 (*) 用于选择表中的所有列。简单的 SELECT 语句示例如下所示。

SELECT * FROM `members`;

上述语句从 members 表中选择了所有字段。分号是语句终止符。它不是必需的,但通常建议以这种方式结束语句。

实际示例

点击下载用于实际示例的 myflix DB。

您可以学习如何将 .sql 文件导入 MySQL WorkBench

示例在以下两个表上执行

表 1:members

membership_ number full_names gender date_of_ birth physical_ address postal_ address contct_ number email
1 Janet Jones Female 21-07-1980 First Street Plot No 4 Private Bag 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Female 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
3 Robert Phil Male 12-07-1989 3rd Street 34 NULL 12345 rm@tstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL

表 2:movies

movie_id title director year_released category_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2
3 X-Men NULL 2008 NULL
4 Code Name Black Edgar Jimz 2010 NULL
5 Daddy’s Little Girls NULL 2007 8
6 Angels and Demons NULL 2007 6
7 Davinci Code NULL 2007 6
9 Honey mooners John Schultz 2005 8
16 67% Guilty NULL 2012 NULL

获取会员列表

假设我们想从数据库中获取所有注册图书会员的列表,我们将使用下面的脚本来实现。

SELECT * FROM `members`;

在 MySQL workbench 中执行上述脚本会产生以下结果。

membership_ number full_names gender date_of_ birth physical_ address postal_ address contct_ number email
1 Janet Jones Female 21-07-1980 First Street Plot No 4 Private Bag 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Female 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
3 Robert Phil Male 12-07-1989 3rd Street 34 NULL 12345 rm@tstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL

我们上面的查询返回了 members 表中的所有行和列。

假设我们只对 full_names、gender、physical_address 和 email 字段感兴趣。下面的脚本将帮助我们实现这一点。

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

在 MySQL workbench 中执行上述脚本会产生以下结果。

full_names gender physical_address email
Janet Jones Female First Street Plot No 4 janetjones@yagoo.cm
Janet Smith Jones Female Melrose 123 jj@fstreet.com
Robert Phil Male 3rd Street 34 rm@tstreet.com
Gloria Williams Female 2nd Street 23 NULL

获取电影列表

请记住,在上面讨论中,我们提到了表达式用于 SELECT 语句。假设我们想从数据库中获取电影列表。我们想在一个字段中显示电影标题和导演姓名。导演姓名应放在括号中。我们还想获取电影的发行年份。下面的脚本可以帮助我们做到这一点。

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

HERE

  • Concat() MySQL 函数用于连接列值。
  • “Concat (`title`, ‘ (‘, `director`, ‘)’) 这行代码获取标题,添加一个开括号,后面跟着导演姓名,然后添加闭括号。

在 Concat() 函数中,字符串部分用逗号分隔。

在 MySQL workbench 中执行上述脚本会产生以下结果集。

Concat(`title`, ‘ (‘, `director`, ‘)’) year_released
Pirates of the Caribean 4 ( Rob Marshall) 2011
Forgetting Sarah Marshal (Nicholas Stoller) 2008
NULL 2008
Code Name Black (Edgar Jimz) 2010
NULL 2007
NULL 2007
NULL 2007
Honey mooners (John Schultz) 2005
NULL 2012

别名字段名

上面的例子返回了 Concatenation 代码作为我们结果的字段名。如果我们想在结果集中使用更具描述性的字段名,我们会使用列别名来实现。以下是列别名的基本语法

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

HERE

  • “SELECT ` column_name|value|expression `” 是常规的 SELECT 语句,它可以是列名、值或表达式。
  • “[AS]” 是别名之前的可选关键字,表示表达式、值或字段名将以此形式返回。
  • “`alias_name`” 是我们想在结果集中作为字段名返回的别名。

上面带有更有意义的列名的查询

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

我们得到以下结果

Concat year_released
Pirates of the Caribean 4 ( Rob Marshall) 2011
Forgetting Sarah Marshal (Nicholas Stoller) 2008
NULL 2008
Code Name Black (Edgar Jimz) 2010
NULL 2007
NULL 2007
NULL 2007
Honey mooners (John Schultz) 2005
NULL 2012

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

假设我们想获取所有会员的列表,显示会员号、姓名和出生年份,我们可以使用 LEFT 字符串函数从出生日期字段中提取出生年份。下面的脚本可以帮助我们做到这一点。

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

HERE

  • “LEFT(`date_of_birth`,4)” LEFT 字符串函数接受出生日期作为参数,并仅从左侧返回 4 个字符。
  • “AS `year_of_birth`” 是将在我们的结果中返回的列别名。请注意 AS 关键字是可选的,您可以省略它,查询仍然可以工作。

在 MySQL workbench 中对 myflixdb 执行上述查询会得到如下结果。

membership_number full_names year_of_birth
1 Janet Jones 1980
2 Janet Smith Jones 1980
3 Robert Phil 1989
4 Gloria Williams 1984

使用 MySQL Workbench 进行 SQL 操作

现在我们将使用 MySQL workbench 生成显示我们 categories 表中所有字段名的脚本。

1. 右键单击 Categories 表。单击“Select Rows – Limit 1000”。

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

3. 将显示查询结果

SQL using MySQL Workbench

请注意,我们没有自己编写 SELECT 语句。MySQL workbench 为我们生成了它。

当有 MySQL Workbench 时,为什么还要使用 SELECT SQL 命令?

现在,您可能会想,既然可以使用像 MySQL workbench 这样的工具在不了解 SQL 语言的情况下获得相同的结果,为什么还要学习 SQL SELECT 命令来从数据库查询数据呢?当然这是可能的,但学习如何使用 SELECT 命令会给您的SQL SELECT 语句带来更大的灵活性控制力

MySQL workbench 属于“按示例查询”QBE 工具类别。它旨在帮助更快地生成 SQL 语句,以提高用户的工作效率。

学习 SQL SELECT 命令可以使您创建复杂的查询,而这些查询无法使用 MySQL workbench 等按示例查询实用程序轻松生成。

为了提高工作效率,您可以使用MySQL workbench 生成代码,然后自定义它以满足您的需求。这只有在您理解 SQL 语句如何工作时才可能发生!

MySQL SELECT Statement with Examples

摘要

  • SQL SELECT 关键字用于从数据库查询数据,它是最常用的命令。
  • 最简单的形式语法是“SELECT * FROM tableName;”。
  • 也可以在 select 语句中使用表达式。例如“SELECT quantity + price FROM Sales”
  • SQL SELECT 命令还可以包含其他可选参数,如 WHERE、GROUP BY、HAVING、ORDER BY。这些将在后面讨论。
  • MySQL workbench 可以在同一个窗口中帮助开发 SQL 语句、执行它们并生成输出结果。