CTE es la forma abreviada de Common Table Expressions. CTE es una de las herramientas más poderosas de SQL (lenguaje de consulta estructurado), y también ayuda a limpiar los datos. Es el concepto de SQL (Lenguaje de consulta estructurado) utilizado para simplificar la codificación y ayudar a obtener el resultado lo más rápido posible. CTE es la tabla temporal utilizada para hacer referencia a la tabla original. Si la tabla original contiene demasiadas columnas y solo requerimos algunas de ellas, podemos hacer CTE (una tabla temporal) que contenga solo las columnas requeridas.
CTE se utiliza para resolver problemas complejos fácilmente con una buena legibilidad del código. Un código siempre debe ser más fácil de leer, de modo que si lo remite después de un tiempo, obtendrá ese código de inmediato. Incluso si la tercera persona se refiere a su código, puede entenderlo muy bien si la legibilidad de su código es fácil y buena. CTE es uno de los conceptos importantes de SQL. Si tiene conocimientos de CTE, se está adentrando en el mundo del SQL avanzado. Common Table Expressions (comúnmente conocido como CTE) ayuda a los analistas de datos, científicos de datos o cualquier otro analista que desee extraer sus datos de manera eficiente y efectiva de una tabla que contiene big data.
WITH CTE_NAME AS
( SELECT column_name1, column_name2,..., column_nameN FROM table_name WHERE condition
)
SELECT column_name1, column_name2,..., column_nameN FROM CTE_NAME;
Ejemplo de CTE
Ejemplo 1:
El siguiente código se ejecuta en MySQL:
-- Creating databse
CREATE DATABASE employee_details; -- Use database
USE employee_details; -- Creating table
CREATE TABLE employee
(
emp_id INT PRIMARY KEY,
emp_name VARCHAR(20),
email_id VARCHAR(30),
city VARCHAR(25),
Verification_status CHAR(3)
); -- Inserting values into the table
INSERT INTO employee VALUES (1,'Suhas','[email protected]','Mumbai','Yes');
INSERT INTO employee VALUES (2,'Yohani','[email protected]','Mumbai','No');
INSERT INTO employee VALUES (3,'Reshama','[email protected]','Pune','Yes');
INSERT INTO employee VALUES (4,'Raj','[email protected]','Bangalore','No');
INSERT INTO employee VALUES (5,'Shivani','[email protected]','Bangalore','Yes');
SELECT * FROM employee;
La salida se da a continuación:
En el ejemplo anterior, he creado la tabla llamada 'empleado' que contiene los detalles del empleado.
La descripción de las columnas de la tabla 'empleado' se muestra a continuación:
emp_id: se refiere a la identificación única de cada empleado
emp_name: se refiere al nombre de cada empleado
email_id: se refiere a una identificación de correo electrónico de cada empleado
ciudad: se refiere a la ciudad donde se encuentra el empleado
Verification_status: si se realiza la verificación de los antecedentes de un empleado, este valor se almacena como 'Sí', mientras que si no se realiza la verificación de los antecedentes de un empleado, este valor se almacena como 'No'.
Supongamos que queremos extraer información específica de los empleados, entonces podemos lograrlo creando CTE.
Si queremos comprobar el estado de verificación de los empleados si está verificado o no y queremos ver los registros de los empleados cuya verificación aún no se ha realizado. Por lo tanto, requerimos solo dos columnas en nuestra CTE (tabla temporal) y las columnas son emp_name y Verification_status que contienen el valor 'No' de la tabla 'employee'.
El siguiente código muestra el ejemplo de creación de CTE usando la tabla 'empleado':
-- Creating CTE
WITH mycte AS ( SELECT emp_name , Verification_status FROM employee WHERE Verification_status = 'No'
)
SELECT * FROM mycte;
La salida se da a continuación:
Aquí, “mycte” es el nombre del CTE (tabla temporal). “mycte” contiene las columnas emp_name y Verification_status. Contiene los detalles de los empleados cuya verificación aún no se ha realizado. Esto es lo que queríamos lograr.
Podemos hacer uno o más de un CTE de una misma tabla separados por coma.
¿Cómo evitar errores en expresiones de tabla comunes?