Resumen :
Aquí aprenderemos cómo recuperar las últimas 5 filas de una tabla de base de datos con la ayuda de consultas SQL.
Los diferentes enfoques que vamos a explorar son:
- Con la ayuda de la cláusula LIMIT en orden descendente.
- Con la ayuda del operador relacional y la función COUNT.
- Con la ayuda de la declaración preparada y la cláusula LIMIT.
Creación de base de datos:
CREATE DATABASE geeks; /* SQL is case insensitive thus 'create database geeks;' means the same
Mostrando bases de datos disponibles:
SHOW DATABASES;
Uso de la base de datos:
USE geeks;
Ahora que hemos cambiado a la base de datos de geeks, ahora crearemos nuestra tabla de empleados.
Creación de una tabla de empleados:
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);
NOTA: Deberíamos usar VARCHAR o BIGINT como el tipo de datos para la columna TELÉFONO para evitar el desbordamiento de enteros.
Para ver/describir la tabla de empleados:
DESC Employee;
Agregar valores en la tabla de empleados:
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');
Recuperando todos los datos de la tabla de empleados:
SELECT * FROM Employee;
Ahora recuperemos las últimas 5 filas de la tabla Empleado.
MÉTODO 1: Uso de la cláusula LIMIT en orden descendente
Como sabemos, la cláusula LIMIT da el no. de filas especificadas de la fila especificada. Recuperaremos las últimas 5 filas en orden descendente usando las cláusulas LIMIT y ORDER BY y finalmente haremos que las filas resultantes sean ascendentes.
Dado que la tabla de empleados tiene ID, realizaremos ORDER BY ID en nuestra consulta.
SINTAXIS:
(SELECT * FROM <table_name> ORDER BY <id_column> DESC LIMIT <cant. de filas a recuperar>)
ORDENAR POR <id_columna> ASC;
Ejemplo :
(SELECT * FROM Employee ORDER BY ID DESC LIMIT 5) ORDER BY ID ASC;
Producción :
MÉTODO 2: Uso del operador relacional y la función COUNT.
Como sabemos que en la tabla de empleados, las filas se organizan según los ID, podemos obtener las últimas 5 filas, con la ayuda de la condición como
id > (número total de filas – número de filas para recuperar (aquí 5))
SINTAXIS:
SELECCIONE * DE <nombre_tabla>
DÓNDE
<id_column> > (SELECT COUNT(*) FROM <table_name>) – (cant. de filas a recuperar);
Ejemplo :
SELECT * FROM Employee WHERE ID > (SELECT COUNT(*) FROM Employee) - 5;
Producción :
MÉTODO 3: Uso de la declaración preparada de SQL y la cláusula LIMIT
Como sabemos que podemos recuperar cualquier no. de filas a partir de una fila específica con la ayuda de la CLÁUSULA DE LÍMITE como:
SELECT * FROM <table_name> LIMIT (row after which the data is to be retrieved), (no. of rows to retrieve)
Pero no podemos usar subconsultas ni podemos usar variables directamente con la Cláusula LIMIT.
Por lo tanto, ejecutaremos la declaración preparada y reemplazaremos los valores de la plantilla en tiempo de ejecución.
La sintaxis para preparar y ejecutar una sentencia es la siguiente:
SINTAXIS:
PREPARE <statement_name> FROM ‘<Cualquier consulta sql válida>’; /*usar ? (signo de interrogación) para indicar que esto tiene que ser reemplazado con un valor durante la ejecución */
EXECUTE <nombre_instrucción> USING (opcional) <valores_plantilla o valores de parámetros>
Ejemplo :
/*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;
Producción :