lunes, 3 de noviembre de 2014

SQL avanzado en MySQL y PHPMyAdmin - 3 de 5



v. Sustracción de un intervalo de tiempo a una hora

La instrucción que permite sustraer un intervalo de tiempo a una hora es SUBTIME().

Esta función toma los mismos argumentos que los de la función ADDTIME() y funciona con el mismo principio, salvo que sustrae el intervalo de tiempo.

Por ejemplo, para sustraer 2 horas, 5 minutos y 20 segundos a 22h58m02s:

SELECT SUBTIME(’22:58:02’,’02:05:20’) as nueva_hora

Copie esta consulta en la pestaña SQL de PHPMyAdmin y haga clic en Continuar:



w. Unir dos consultas

La instrucción que permite unir dos consultas es UNION.

Esta instrucción se ubica entre dos consultas que deben devolver el mismo número de columnas y del mismo tipo.

Por ejemplo, para unir esta consulta que devuelve los apellidos y el nombre de personas mayores de 50 años:

Select Nombre, Apellidos FROM Persona WHERE Edad > 50

Y esta consulta que devuelve los apellidos y el nombre de personas cuyo nombre es David:

Select Nombre, Apellidos FROM Persona WHERE Nombre = ’David’

Escriba lo siguiente:

Select Nombre, Apellidos FROM Persona WHERE Edad > 50
UNION
Select Nombre, Apellidos FROM Persona WHERE Nombre = ’David’

Copie esta consulta en la pestaña SQL de PHPMyAdmin y haga clic en Continuar:


Puede introducir varios UNION.


2. Las subconsultas

Una subconsulta es una consulta llamada en otra consulta. Una subconsulta se escribe entre paréntesis y puede contener otras subconsultas.

Hay varios tipos de subconsultas:

Subconsulta escalonada

Esta subconsulta solo devuelve una columna con un único registro.

Por ejemplo, la edad media de personas:

SELECT AVG(edad) FROM Persona

Copie esta consulta en la pestaña SQL de PHPMyAdmin y haga clic en Continuar:


He aquí una consulta que muestra las personas que tienen una edad menor que el resultado de la subconsulta anterior:

Select Nombre, Apellidos
FROM Persona
WHERE Edad < (
SELECT AVG(edad)
FROM Persona
)

Copie esta consulta en la pestaña SQL de PHPMyAdmin y haga clic en Continuar:


Subconsulta que reenvía una lista

Puede utilizar como criterio de comparación el operador IN. Este operador devuelve la cifra 1 si se presenta en la lista una expresión.

Por ejemplo:

SELECT ’Estefanía’ IN (’Pablo’,’Estefanía’,’Luna’)

Devuelve 1.

Otro ejemplo: mostrar las personas cuya edad es 48, 55, 36 años:

Select Nombre, Apellidos FROM Persona WHERE Edad IN (48,55,36)

Copie esta consulta en la pestaña SQL de PHPMyAdmin y haga clic en Continuar:


También puede poner una subconsulta en lugar de un grupo de cifras.

Por ejemplo, para mostrar las personas que tienen la misma edad que aquellas cuyo nombre comienza por ’D’:

SELECT Apellidos, Nombre
FROM Persona
WHERE Edad IN (
SELECT Edad
FROM Persona
WHERE Nombre LIKE ’D%.’
)

Copie esta consulta en la pestaña SQL de PHPMyAdmin y haga clic en Continuar:


De hecho, SELECT Edad FROM Persona WHERE Nombre like ’D%’ devuelve la edad de David Manrique y David Olis.

También puede utilizar el operador NOT IN para excluir los elementos de una lista.

Para obtener las otras personas que no están en la consulta anterior:

Select Nombre, Apellidos
FROM Persona
WHERE Edad NOT IN (
SELECT Edad
FROM Persona
WHERE Nombre LIKE ’D%’
)

Copie esta consulta en la pestaña SQL de PHPMyAdmin y haga clic en Continuar:


La palabra clave EXISTS permite probar la existencia de datos de una subconsulta.

Por ejemplo, si quiere mostrar todas las personas, siempre y cuando al menos una de ellas sea mayor o igual a 62 años:

Select Nombre, Apellidos,Edad FROM Persona WHERE EXISTS (SELECT *
FROM Persona WHERE Edad >= 62)

Copie esta consulta en la pestaña SQL de PHPMyAdmin y haga clic en Continuar:


La consulta SELECT * FROM Persona WHERE Edad >= 62 devuelve al menos un registro, por lo tanto WHERE EXISTS es verdadero y la consulta Select Nombre, Apellidos, Edad FROM Persona devuelve todo el mundo.

También puede utilizar NOT EXISTS para probar la ausencia de datos de una subconsulta.

Subconsulta correlacionada

Una subconsulta correlacionada o anidada es una subconsulta que se ejecuta en cada registro de la consulta principal, ya que la columna de la subconsulta hace referencia a una columna de la consulta principal. Por lo tanto, cada registro de la consulta principal puede cambiar con el resultado del registro de la subconsulta.

Por ejemplo, para mostrar todas las personas con los mismos nombres:

SELECT Id_person, Nombre, Apellidos
FROM persona P1
WHERE Apellidos IN (
Select Nombre,Apellidos
FROM persona P2
WHERE P1.Id_person <> P2.Id_person
)

Copie esta consulta en la pestaña SQL de PHPMyAdmin y haga clic en Continuar:


Observe que la cláusula WHERE de la subconsulta hace referencia a la tabla P1 de la consulta principal.

Esta consulta busca todos los registros que tienen los mismos apellidos en la tabla Persona, pero no el mismo Id_person; de lo contrario, la consulta devolvería todo el mundo.



Espero haber ayudado en algo. Hasta la próxima oportunidad!








No hay comentarios:

Publicar un comentario en la entrada