Consultas SQL: Ejemplos Prácticos
Comandos SELECT y sus variaciones
- Obtener datos de todos los empleados:
SELECT * FROM emp;
SELECT DISTINCT comm FROM emp;
SELECT sal+1000 AS 'nuevo salario', ename FROM emp WHERE deptno=30;
SELECT * FROM emp WHERE comm <= (0.25*sal) OR comm IS NULL;
SELECT * FROM emp WHERE comm BETWEEN (sal*0.5) AND (sal*0.75) AND ename NOT LIKE 'clark';
SELECT sal, comm, sal+comm AS 'salario total' FROM emp WHERE comm IS NOT NULL ORDER BY empno;
SELECT empno, (100*comm)/sal AS 'porcentaje' FROM emp;
SELECT * FROM emp WHERE ename LIKE '_____';
SELECT ename, sal, IFNULL(sal+comm, sal) AS 'sueldo total' FROM emp ORDER BY sal, comm;
SELECT ename, job FROM emp WHERE CONCAT(ename, job) LIKE 'a%man';
SELECT * FROM emp WHERE mgr > empno AND ((sal > 1000 AND sal < 2000) OR deptno = 30);
SELECT MAX(sal) AS 'salario max', SUM(IFNULL(comm, 0)) AS 'total comisiones', COUNT(empno) AS 'numero de empleados' FROM emp;
GROUP BY deptno
. Y si queremos poner condiciones, por ejemplo: GROUP BY deptno HAVING sal > 1000
Consultas con Condiciones Específicas
- Hallar los datos de los empleados cuyo salario es mayor que el del empleado de código 7934, ordenando por salario:
SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE empno=7934) ORDER BY sal;
SELECT MAX(sal) AS 'salario mayor', MIN(sal) AS 'salario menor', (MAX(sal)-MIN(sal)) AS 'diferencia' FROM emp;
SELECT deptno, AVG(sal) FROM emp WHERE sal < 5000 GROUP BY deptno HAVING MIN(sal) > 900;
SELECT deptno, COUNT(empno) FROM emp GROUP BY deptno HAVING COUNT(empno) > 3;
SELECT job, COUNT(sal) FROM emp GROUP BY deptno;
SELECT ename, sal FROM emp e2, dept WHERE e2.deptno = dept.deptno AND sal IN (SELECT MAX(sal) FROM emp e1 WHERE e2.deptno = e1.deptno GROUP BY deptno);
Vistas en SQL
Una vista es el resultado de una consulta de varias tablas que se presenta como una sola tabla.
Ejemplo de creación de vista:
CREATE VIEW vista1 AS SELECT * FROM emp WHERE empno > 1000 AND sal > 1000;
(Bajo vista1 se guardará esta consulta y solo habrá que poner: SELECT * FROM vista1;
)
Procedimientos, Funciones y Triggers en PL/SQL
Los procedimientos PL/SQL son subprogramas compuestos por un conjunto de sentencias SQL. Siempre debemos usar una base de datos.
Diferencia entre procedure y función: la función devuelve un valor, mientras que el procedimiento hay que llamarlo.
Los Triggers son oyentes que se mantienen a la escucha de eventos que puedan producirse en una tabla (INSERT, UPDATE, DELETE) y ejecutan un código antes (BEFORE) o después (AFTER). Podemos hacer cosas como mantener un log de usuarios que hacen modificaciones en una tabla.
Sintaxis de un Trigger
CREATE TRIGGER nombre_trigger
{BEFORE | AFTER}
{INSERT | UPDATE | DELETE}
ON nombre_tabla
FOR EACH ROW
BEGIN
-- Código del trigger
END;
Ejemplo de alterar una tabla:
ALTER TABLE 'tablaexistente' RENAME TO 'nuevonombre';
Cursores en PL/SQL
Un cursor es un puntero que apunta a los registros de una tabla. Un puntero es un tipo especial de variable que permite guardar direcciones de memoria de otras variables. Permite recorrer diferentes registros.
Ejemplo de Declaración de un Procedimiento con Cursor
CREATE PROCEDURE nombre_procedimiento()
BEGIN
DECLARE variables tipo;
DECLARE done INT DEFAULT 0;
-- Declaramos el cursor
DECLARE nombre_cursor CURSOR FOR SELECT campos FROM tabla;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
-- Lo que dice es que cuando se llegue al final de la tabla se cambie el valor de la variable done a 1
-- Abrimos el cursor ... OPEN nombre_cursor; ... REPEAT
END;