📜  SQL - 选择最后

📅  最后修改于: 2022-05-13 01:55:01.514000             🧑  作者: Mango

SQL - 选择最后

SEQUEL广泛称为 SQL(结构化查询语言),是最流行的数据库标准语言。它是一种特定于领域的语言,主要用于执行大量操作,包括创建数据库、以表的形式存储数据、修改、提取等等。有不同版本的 SQL,如 MYSQL、PostgreSQL、Oracle、SQL lite 等。

SQL 于 1986 年成为美国国家标准协会 (ANSI)的规范,次年 1987 年成为国际标准化组织 (ISO)的规范今天是互联网和技术的世界。我们被大量数据所包围。因此,为了安全地存储和管理这些数据,我们需要一个合适的数据库,而为了管理这个数据库,我们需要一种 SQL 语言。

在本文中,我们将研究如何获取中任何记录的最后一个条目。我们将讨论四种不同的方法来提取数据库中任何给定表的最后一个条目。

示例输入:考虑一个“学生信息”表,其中包含有关“ GeekforGeeks DSA 课程”中注册学生的数据。

        Student Information
IDAgeStudent NameSex
122HarryMale
223VishalMale
320SnehalFemale
425RamMale
524HinaFemale

1. 创建数据库



CREATE DATABASE database_name;

2. 创建表

CREATE TABLE Table_name(
col_1 TYPE col_1_constraint,
col_2 TYPE col_2 constraint
.....
);

col: Column name
TYPE: Data type whether an integer, variable character, etc.
col_constraint: Constraints in SQL like PRIMARY KEY, NOT NULL, UNIQUE, REFERENCES, etc.

3. 插入表格

INSERT INTO Table_name
VALUES(val_1, val_2, val_3, ..........);

val: Values in particular column.

4. 查看表格

SELECT * FROM Table_name

方法 1:使用 MS Access

我们可以使用命令 FIRST() 提取特定列的第一个条目,使用 LAST() 提取表中特定列的最后一个条目。有关更多信息,请访问MS Access 中的 First() 和 Last()函数

基本语法:

LAST(expression)

例如,假设我们要从“学生信息”表中提取最后一个学生姓名

SELECT LAST(Student_name) AS Stud_Name 
FROM StudentInformation;

输出:

最后学生姓名

如我们所见,使用上述查询提取了最后一个学生姓名“Hina”。但需要注意的是,SELECT LAST 或 LAST(expression) 仅在 MS Access 中受支持。该语句不支持 MYSQL、Oracle、PostgreSQL 等。有如下讨论的替代方法可以在其他版本的 SQL(如 MYSQL、Oracle、PostgreSQL 等)中执行上述操作。



方法二:通过对数据进行排序

我们可以使用ORDER BY语句和LIMT 子句提取最后的数据。基本思想是对表进行降序排序,然后我们将行数限制为1。这样,我们将得到输出作为表的最后一行。然后我们可以选择我们想要检索的条目。

MYSQL 语法:

SELECT col_name(s) FROM Table_Name
ORDER BY appr_col_name DESC
LIMIT 1;

col_name(s): The name of the column(s).
appr_col_name: Appropriate column name to perform ORDER BY.

甲骨文语法:

SELECT col_name(s) FROM Table_Name
ORDER BY appr_col_name DESC
WHERE ROWNUM <= 1;

col_name(s): The name of the column(s).
appr_col_name: Appropriate column name to perform ORDER BY.

输出 :

最后学生姓名

需要注意的是,为了执行排序,需要正确选择列。例如,如果我们选择“ ORDER BY Student_name DESC ”,那么它将根据名称按字母顺序对表进行排序。因此,包含“Vishal”的行将出现在顶部,但具有“Vishal”作为条目的行不是表的最后一行。此外,我们不能使用“年龄”列来执行 ORDER BY,如下所示:

Ram 不是最后一个学生的名字

Vishal 不是最后一个学生的名字

因此,必须使用列 ID或任何唯一且随表中每条记录依次递增的列。

方法 3:通过使用子查询和 AGGREGATE MAX()

 子查询只不过是维护父子关系的另一个查询中的查询。内部查询将首先执行,然后是外部查询。这里,在该方法中,基本思想是使用聚合函数MAX获取最大ID,然后选择与该最大ID关联的学生姓名。这样,我们就可以从表中提取最后一个学生的名字。

SELECT col_name(s) FROM Table_Name
WHERE appr_col_name = (
        SELECT MAX(appr_col_name)
        FROM Table_Name
);

col_name(s): The name of the column(s).
appr_col_name: Appropriate column name. For example ID.

输出 :

最后学生姓名

方法四:比较法或相对法

在这个方法中,我们也将使用子查询。基本思想是过滤掉这些行并检查是否不存在比我们要提取的行具有更高 ID 值的行。这将有助于获取具有最大 ID 的行,因此我们可以检索最后的信息。这是一个复杂的查询,是一种迭代方法,我们将在其中使用NOT EXISTS语句。如果表中有更多记录,此方法将需要更多时间来执行。

SELECT col_name(s) FROM Table_Name t1
WHERE NOT EXISTS(
    SELECT * FROM Table_Name t2
    WHERE t2.appr_col_name > t1.appr_col_name
);

col_name(s): The name of the column(s).
appr_col_name: Appropriate column name. For example ID.

输出 :

最后学生姓名