显示员工表中最后 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;
现在,由于我们已更改为 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);
注意:我们应该使用VARCHAR或BIGINT作为 PHONE 列的数据类型以避免整数溢出。
查看/描述员工表:
DESC Employee;
将值添加到 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');
从 Employee 表中检索所有数据:
SELECT * FROM Employee;
现在让我们从 Employee 表中检索最后 5 行。
方法 1:以降序使用 LIMIT 子句
我们知道 LIMIT 子句给出了否。来自指定行的指定行。我们将使用 LIMIT 和 ORDER BY 子句按降序检索最后 5 行,最后使结果行升序。
由于 Employee 表有 ID,我们将在查询中执行 ORDER BY ID。
SYNTAX :
(SELECT * FROM
ORDER BY
例子 :
(SELECT * FROM Employee ORDER BY ID DESC LIMIT 5)
ORDER BY ID ASC;
输出 :
方法 2:使用关系运算符和 COUNT函数。
我们知道在Employee表中,行是根据ID排列的,我们可以得到最后5行,在条件的帮助下
id >(总行数 – 要检索的行数(此处为 5))
SYNTAX :
SELECT * FROM
WHERE
例子 :
SELECT * FROM Employee
WHERE
ID > (SELECT COUNT(*) FROM Employee) - 5;
输出 :
方法 3:使用 SQL Prepared 语句和 LIMIT 子句
正如我们所知,我们可以检索任何没有。在 LIMIT CLAUSE 的帮助下从指定行开始的行数为:
SELECT * FROM
LIMIT (row after which the data is to be retrieved), (no. of rows to retrieve)
但是我们不能使用子查询,也不能直接通过 LIMIT 子句使用变量。
因此,我们将执行准备好的语句并在运行时替换模板值。
准备和执行语句的语法如下:
SYNTAX:
PREPARE
EXECUTE
例子 :
/*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;
输出 :