MySQL SELECT 语句及示例
MySQL 中的 SELECT 查询是什么?
SELECT 查询用于从 MySQL 数据库中获取数据。数据库存储数据以便以后检索。MySQL Select 的目的是从数据库表中返回一个或多个符合给定条件的行。Select 查询可用于脚本语言,如 PHP、Ruby,或者您可以通过命令行执行它。
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 | |
---|---|---|---|---|---|---|---|
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 | |
---|---|---|---|---|---|---|---|
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 | |
---|---|---|---|
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. 将显示查询结果
请注意,我们没有自己编写 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 语句如何工作时才可能发生!
摘要
- SQL SELECT 关键字用于从数据库查询数据,它是最常用的命令。
- 最简单的形式语法是“SELECT * FROM tableName;”。
- 也可以在 select 语句中使用表达式。例如“SELECT quantity + price FROM Sales”
- SQL SELECT 命令还可以包含其他可选参数,如 WHERE、GROUP BY、HAVING、ORDER BY。这些将在后面讨论。
- MySQL workbench 可以在同一个窗口中帮助开发 SQL 语句、执行它们并生成输出结果。