Pildoritas de Bases de Datos: SQL. Predicados

¡Hola corazones! Una vez más vuelvo con una pildorita de Bases de Datos y de nuevo es otra pildorita de SQL, pero tengo una buena noticia, es la última 😀

Como os comenté en el anterior artículo el tema de hoy serán los predicados y va a ser muy cortito.

Predicados

Los predicados son palabras reservadas que se indican entre SELECT y el nombre de la primera columna, y que indican ciertas características sobre los conjuntos recogidos en la consulta.

Los predicados principales son los siguientes:

Predicado Descripción
ALL Devuelve todos los registros de la consulta. Equivale a no indicar nada entre los campos y el SELECT.
DISTINCT Omite del resultado los registros que tienen los mismos datos en los campos seleccionados.
DISTINCTROW Omite del resultado los registros repetidos (en su totalidad, no sólo en los campos seleccionados)
TOP/LIMIT /ROWNUM Devuelve sólo los registros que se indiquen después de la palabra reservada.

 

Como veis este tema tampoco es que tenga mucha chicha, pero viene bien conocer los predicados porque se utilizan mucho en el día a día. Pondré varios ejemplos para que veáis su potencial.

Vamos a usar de nuevo nuestra amada tabla empleados del anterior post:

empleado

Imaginad que obtenemos los Apellidos de los empleados.

SELECT APELLIDOS FROM EMPLEADO

Puede ocurrir el caso de que existan en nuestra tabla dos personas con los mismos apellidos. En ese caso, obtendríamos dos registros, uno por cada empleado. Si queremos que no haya repeticiones, utilizaríamos el predicado DISTINCT.

SELECT DISTINCT APELLIDOS FROM EMPLEADO

Por otra parte, imaginaos que queremos saber quiénes son las 20 personas de la empresa que cobran más. Para eso utilizaríamos el predicado TOP, junto a la clausula ORDER BY.
Este comando es de los que he visto variar más entre los diferentes motores de búsqueda. Por tanto, indicaré la query para cada motor:

SQLServer

SELECT TOP 20 * EMPLEADOS ORDER BY SALARIO DESC

MySQL

SELECT * EMPLEADOS ORDER BY SALARIO DESC LIMIT 20

Oracle

SELECT * EMPLEADOS WHERE ROWNUM >= 20 ORDER BY SALARIO DESC

Como veis en MySQL y Oracle estas funcionalidades no son predicados como tal, sino clausulas – en el caso de MySQL – o incluso operadores dentro del WHERE (Oracle). No obstante, aunque no se coloquen después de la palabra SELECT su función es exactamente la misma.

DISTINCTROW os puede parecer igual a DISTINCT, pero tiene una diferencia notable: No afecta a los campos de la query repetidos, sino al registro completo.

Por ejemplo, imaginemos que un empleado de nuestro modelo ha estado en dos proyectos. Primero trabajo con una compañía y un tiempo más tarde entra al mismo proyecto pero siendo trabajador de otra cárnica. Si queremos saber simplemente en que proyectos ha trabajado deberíamos utilizar DISTINCTROW, ya que de otra forma tendríamos resultados repetidos.

ejemplo distinctrow

SELECT DISTINCTROW 
PROYECTO.NOMBRE 
FROM 
EMPLEADO, PROYECTO, PROYECTO_HAS_EMPLEADO 
WHERE 
PROYECTO.ID_PROYECTO = PROYECTO_HAS_EMPLEADO.ID_PROYECTO 
AND EMPLEADO.ID_EMPLEADO = PROYECTO_HAS_EMPLEADO.ID_EMPLEADO 
AND ID_EMPLEADO = 3

Bueno, con esto doy por finalizada la parte de SQL de las Pildoritas de Bases de Datos, aunque he sido un poco malvada, porque realmente no hemos terminado con SQL, ya que lo seguiremos usando en lo que queda culturitas. Dejemoslo en que hemos dejado atrás la parte coñazo de aprendizaje del lenguaje en sí. En siguientes pildoritas empezaremos con optimización de SQL.

Índice de Pildoritas

Share