📌  相关文章
📜  显示员工表中最后 5 条记录的 SQL 查询

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

显示员工表中最后 5 条记录的 SQL 查询

概括 :

在这里,我们将学习如何借助 SQL 查询从数据库表中检索最后 5 行。

我们将要探索的不同方法是:

  • 在 LIMIT 子句的帮助下按降序排列。
  • 借助关系运算符和 COUNT函数。
  • 借助 Prepared Statement 和 LIMIT 子句。

创建数据库:

CREATE DATABASE geeks; /* SQL is case insensitive thus 'create database geeks;' means the same

显示可用的数据库:



SHOW DATABASES;

使用数据库:

USE geeks;

显示 sql 查询的图像

现在,由于我们已更改为 geeks 数据库,现在我们将创建我们的 Employee 表。

创建员工表:

CREATE TABLE (
ID INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30) NOT NULL,
PHONE INT(10) NOT NULL UNIQUE,
EMAIL VARCHAR(30) NOT NULL UNIQUE,
DATE_OF_JOINING DATE);

显示 sql 查询的图像

注意:我们应该使用VARCHARBIGINT作为 PHONE 列的数据类型以避免整数溢出。

查看/描述员工表:

DESC Employee;

显示 sql 查询的图像

将值添加到 Employee 表中:

INSERT INTO Employee (NAME, PHONE, EMAIL, DATE_OF_JOINING)
VALUES
('Yogesh Vaishnav', 0000000001, 'yogesh@mail.com', '2019-10-03'),
('Vishal Vishwakarma', 0000000002, 'chicha@mail.com', '2019-11-07'),
('Ajit Yadav', 0000000003, 'ppa@mail.com', '2019-12-12'),
('Ashish Yadav', 0000000004, 'baba@mail.com', '2019-12-25'),
('Tanvi Thakur', 0000000005, 'tanvi@mail.com', '2020-01-20'),
('Sam', 0000000006, 'sam@mail.com', '2020-03-03'),
('Ron', 0000000007, 'ron@mail.com', '2020-05-16'),
('Sara', 0000000008, 'sara@mail.com', '2020-07-01'),
('Zara', 0000000009, 'zara@mail.com', '2020-08-20'),
('Yoji', 0000000010, 'yoji@mail.com', '2020-03-10');

显示 sql 查询的图像

从 Employee 表中检索所有数据:

SELECT * FROM Employee;

显示 sql 查询的图像

现在让我们从 Employee 表中检索最后 5 行。



方法 1:以降序使用 LIMIT 子句

我们知道 LIMIT 子句给出了否。来自指定行的指定行。我们将使用 LIMIT 和 ORDER BY 子句按降序检索最后 5 行,最后使结果行升序。

由于 Employee 表有 ID,我们将在查询中执行 ORDER BY ID。

例子 :

(SELECT * FROM Employee ORDER BY ID DESC LIMIT 5)
ORDER BY ID ASC;

输出 :

显示 sql 查询的图像

方法 2:使用关系运算符和 COUNT函数。

我们知道在Employee表中,行是根据ID排列的,我们可以得到最后5行,在条件的帮助下



id >(总行数 – 要检索的行数(此处为 5))

例子 :

SELECT * FROM Employee
WHERE 
ID > (SELECT COUNT(*) FROM Employee) - 5;

输出 :

显示 sql 查询的图像

方法 3:使用 SQL Prepared 语句和 LIMIT 子句

正如我们所知,我们可以检索任何没有。在 LIMIT CLAUSE 的帮助下从指定行开始的行数为:

SELECT * FROM  
LIMIT (row after which the data is to be retrieved), (no. of rows to retrieve)

但是我们不能使用子查询,也不能直接通过 LIMIT 子句使用变量。

因此,我们将执行准备好的语句并在运行时替换模板值。

准备和执行语句的语法如下:

例子 :

/*declare and initialize a variable named 'rows' (here we want to retrieve last 5 rows thus the value 5*/
SET @rows = 5;
SET @startRow = (SELECT COUNT(*) FROM Employee) - @rows; /*Row after which we want to retrieve*/
PREPARE getLastFive FROM 'SELECT * FROM Employee LIMIT ?, ?';
EXECUTE getLastFive USING @starRow, @rows;

输出 :

显示 sql 查询的图像