从 MySQL 表中选择第一行
今天,我们将探讨三种场景及其解决方案,我们希望从 MySQL 表中选择第一行。
在第一个场景中,我们将学习从 MySQL 表中获取第一行,其中特定列有多个实例。 例如,从 manager 表中选择 first_name 为 Mehvish 的第一行。
在第二种情况下,我们将选择每组表中的第一行。 在这里,我们还将了解如何检索与组相关的数据。 在第三个场景中,我们将看到如何从整个 MySQL 表中获取第一行。
从 MySQL 表中选择第一行
在深入代码示例之前,让我们创建一个 manager_id 表,其中 manager_id、first_name 和 last_name 作为字段,其中 manager_id 是主键。
下面给出了创建和填充此表的查询。 您也可以使用这些。
示例代码:
CREATE TABLE manager (
manager_id INT NOT NULL AUTO_INCREMENT,
first_name VARCHAR(150) NOT NULL,
last_name VARCHAR(150) NOT NULL,
PRIMARY KEY(manager_id)
);
INSERT INTO manager (first_name, last_name)
VALUES
('Mehvish', 'Ashiq'),
('Saira', 'Mushtaq'),
('Thomas', 'Christopher'),
('Thomas', 'Gabrial'),
('Tahir', 'Raza'),
('Saira', 'Johny'),
('Saira', 'Daniel');
SELECT * FROM manager;
输出:
+------------+------------+-------------+
| manager_id | first_name | last_name |
+------------+------------+-------------+
| 1 | Mehvish | Ashiq |
| 2 | Saira | Mushtaq |
| 3 | Thomas | Christopher |
| 4 | Thomas | Gabrial |
| 5 | Tahir | Raza |
| 6 | Saira | Johny |
| 7 | Saira | Daniel |
+------------+------------+-------------+
7 rows in set (0.00 sec)
使用 LIMIT 子句从 MySQL 表中检索第一行,其中一列具有多个实例
我们在 manager 表的 first_name 列中有一个 Mehvish 实例、一个 Tahir 实例、两个 Thomas 实例和三个 Saira 实例。 您可以使用 SELECT 语句查看当前表数据。
执行以下语句从 manager 表中获取 first_name 为 Saira 的第一行。
SELECT * FROM manager WHERE first_name = 'Saira' LIMIT 1;
输出:
+------------+------------+-----------+
| manager_id | first_name | last_name |
+------------+------------+-----------+
| 2 | Saira | Mushtaq |
+------------+------------+-----------+
1 row in set (0.00 sec)
假设我们要获取 first_name 为 Saira 的第三条记录。 我们使用带两个参数的 LIMIT 子句(在本教程后面解释)。
SELECT * FROM manager WHERE first_name = 'Saira' LIMIT 2,1;
输出
+------------+------------+-----------+
| manager_id | first_name | last_name |
+------------+------------+-----------+
| 7 | Saira | Daniel |
+------------+------------+-----------+
1 row in set (0.00 sec)
假设我们想要获取 first_name 为 Saira 的前两条记录。 我们可以这样做。
SELECT * FROM manager WHERE first_name = 'Saira' LIMIT 2;
输出:
+------------+------------+-----------+
| manager_id | first_name | last_name |
+------------+------------+-----------+
| 2 | Saira | Mushtaq |
| 6 | Saira | Johny |
+------------+------------+-----------+
2 rows in set (0.00 sec)
我们还可以获取 first_name 名称为 Saira 的最后两条记录。 我们将 ORDER BY 子句与 LIMIT 子句一起使用。
SELECT * FROM manager WHERE first_name = 'Saira' ORDER BY manager_id DESC LIMIT 2;
输出:
+------------+------------+-----------+
| manager_id | first_name | last_name |
+------------+------------+-----------+
| 7 | Saira | Daniel |
| 6 | Saira | Johny |
+------------+------------+-----------+
2 rows in set (0.00 sec)
在这里,了解 LIMIT
和 ORDER BY
子句的作用至关重要。 LIMIT
子句与 SELECT
语句一起使用以从表中获取一定数量的记录。
LIMIT
子句采用一个或两个必须为正整数或零的参数。 以下是带有一个和两个参数的 LIMIT 子句的语法。
语法:
# Syntax with one argument
SELECT
your_select_list
FROM
you_table_name
WHERE
your_condition
LIMIT row_count;
# Syntax with two arguments
SELECT
your_select_list
FROM
your_table_name
WHERE
your_condition
LIMIT [offset,] row_count;
row_count 显示要返回的记录的最大数量,而当我们要检索特定范围的记录时使用偏移量,例如,从偏移量 2 到 row_count 4。请记住,第一行的偏移量不是 1,而是 0。
请参见下图。
记住,LIMIT row_count 和 LIMIT 0, row_count 是等价的。 根据项目要求,ORDER BY
子句对表数据进行降序或升序排序。
使用 IN()、MIN() 和 GROUP BY 从 MySQL 表中获取每个组中的第一行
第二种情况将使用 IN() 和 MIN() 函数以及 GROUP BY 子句从表中选择并获取每个组中的第一行。
示例代码:
SELECT * FROM manager
WHERE
manager_id IN (
SELECT min(manager_id)
FROM manager
GROUP BY first_name
);
输出:
+------------+------------+-------------+
| manager_id | first_name | last_name |
+------------+------------+-------------+
| 1 | Mehvish | Ashiq |
| 2 | Saira | Mushtaq |
| 3 | Thomas | Christopher |
| 5 | Tahir | Raza |
+------------+------------+-------------+
4 rows in set (0.08 sec)
此示例使用不同的函数和子句来获得所需的结果。
- IN() - 此函数允许我们在 WHERE 子句中指定多个值。 如果表达式等于任何 IN() 列表值,它返回 1。
-
GROUP BY - 它对包含相同值的记录进行分组,主要用于聚合函数,例如
MIN()
、MAX()
、COUNT()
等。 - MIN() - 它返回查询中属性(列)的最小值。
- 子查询 - 它嵌套在另一个查询中,例如 SELECT、UPDATE、DELETE 等。我们也可以将一个子查询嵌套到另一个子查询(我们需要了解各种子句的执行顺序)。
使用 LIMIT 和 ORDER BY 从整个 MySQL 表中选择第一行
使用 LIMIT 子句从整个表中选择第一行,而不考虑顺序和条件。
SELECT * from manager LIMIT 1;
输出:
+------------+------------+-----------+
| manager_id | first_name | last_name |
+------------+------------+-----------+
| 1 | Mehvish | Ashiq |
+------------+------------+-----------+
1 row in set (0.00 sec)
使用带有 LIMIT 的 ORDER BY 从排序数据中获取第一行(按降序排列)。
SELECT * from manager ORDER BY first_name DESC LIMIT 1;
输出:
+------------+------------+-------------+
| manager_id | first_name | last_name |
+------------+------------+-------------+
| 3 | Thomas | Christopher |
+------------+------------+-------------+
1 row in set (0.00 sec)
相关文章
使用 Mysqldump 备份 MySQL 中的数据
发布时间:2023/05/09 浏览次数:192 分类:MySQL
-
本篇文章将介绍如何使用 mysqldump 只备份数据。 在这里,我们将探讨 --no-create-info 、--compact 、--skip-triggers 和 --no-create-db 选项。
更新 MySQL 表中的主键
发布时间:2023/05/09 浏览次数:61 分类:MySQL
-
本篇文章介绍如何更新 MySQL 表中的主键。 我们将使用 ALTER 命令对主键进行任何更改。更新 MySQL 表中的主键 我们可以在多种情况下更新 MySQL 表中的主键。
在 MySQL 中获取命令历史记录
发布时间:2023/05/09 浏览次数:150 分类:MySQL
-
本文重点介绍了在 Windows 和 Linux 中获取我们已执行的 MySQL 命令历史记录的各种方法。MySQL命令历史
Oracle 的 decode 函数在 MySQL 中的等价物
发布时间:2023/05/09 浏览次数:115 分类:MySQL
-
本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。
使用 Ubuntu 连接远程 MySQL 服务器的不同方法
发布时间:2023/05/09 浏览次数:97 分类:MySQL
-
在本文中我们将学习如何使用 Ubuntu 连接远程 MySQL 服务器来操作数据以及启动和停止 MySQL 服务器。
在 Linux 中安装 MySQL 客户端
发布时间:2023/05/09 浏览次数:72 分类:MySQL
-
在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。
在 MySQL 中转换为十进制
发布时间:2023/05/09 浏览次数:150 分类:MySQL
-
有时,我们可能需要将一种数据类型转换为另一种数据类型。 下面是我们如何使用带有 DECIMAL(M,D) 的 CAST() 和 CONVERT() 函数在 MySQL 中转换为十进制。
在 MySQL 中获取当前日期和时间
发布时间:2023/05/09 浏览次数:145 分类:MySQL
-
本篇文章我们将学习 NOW()、CURRENT_TIMESTAMP()(也写为 CURRENT_TIMESTAMP)和 SYSDATE() 来获取 MySQL 中的当前日期和时间。 我们还将看到这三个功能之间的比较。在 MySQL 中获取当前日期和时间
更改 MySQL 服务器中的 max_allowed_packet Size
发布时间:2023/05/09 浏览次数:142 分类:MySQL
-
本篇文章介绍如何更改 MySQL 服务器中的 max_allowed_packet 大小。 为了了解这一点,我们将使用两个操作系统,Windows 10 和 Linux (Ubuntu)。