Subconsultas
Mtra. Edith Andrea Hernández Blancas
Subconsultas
Son consultas dentro de otra consulta más externa o
dispuestas de forma anidada, y puedes colocarlas
en cualquier parte de un SELECT .
Una subconsulta tiene la misma sintaxis que una
sentencia SELECT normal exceptuando que aparece
encerrada entre paréntesis
No puede contener la cláusula ORDER BY, ni puede
ser la UNION de varias sentencias SELECT
Subconsultas
=====> Referencias externas. Es un nombre de una columna que esta en una
subconsulta.
SELECT numemp, nombre, (SELECT MIN(fechapedido) FROM pedidos WHERE
rep = numemp)
FROM empleados;
=====>Anidar subconsultas. Una subconsulta aparece en la cláusula WHERE de
otra subconsulta que a su vez forma parte de otra consulta principal.
SELECT numemp, nombre
FROM empleados
WHERE numemp = (SELECT rep FROM pedidos WHERE clie = (SELECT numclie
FROM clientes WHERE nombre = 'Julia Antequera'))
Subconsultas bd Hospital
=====> Referencias externas. Mostrar los médicos y sus id de especialidad. Indicar
el nombre del medico y la especialidad
select m.nombre, m.apellido,
(select me.idMedico from medicoespecialidad me where
me.idMedico=m.idmedico) idmedico
from medico m;
=====>Anidar subconsultas. Muestra el medico (nombre y apellidos) y su
especialidadselect nombre, apellido, especialidad
from medico m, especialidad e
where m.idmedico=(select me.idMedico from medicoespecialidad me where
me.idEspecialidad=e.idespecialidad and me.idMedico=m.idMedico);
Subconsultas
====>Subconsulta en UPDATE
-- UPDATE Productos SET existencia=0 WHERE idProveedor IN(SELECT id
FROM Proveedor WHERE activo=0);
====> Subconsulta en DELETE
DELETE FROM Productos WHERE idProveedor IN(SELECT id FROM Proveedor
WHERE activo=0);
Operadores SET
(Conjunto)
Mtra. Edith Andrea Hernández Blancas
Operadores SET (Conjunto)
Combinan los resultados de dos o más consultas en un
único resultado.
Las consultas que contienen operadores SET (Conjunto) son
llamadas consultas compuestas (compound queries).
UNION
El operador UNION obtiene todas las filas seleccionadas por
ambas consultas.
Use el operador UNION para obtener todas las filas de
múltiples tablas y eliminar cualquier fila duplicada.
UNION
Normas a seguir
• El número de columnas y tipo de datos deben ser idénticos en
todas las sentencias SELECT usadas en las consultas. Los
nombres de las columnas no necesitan ser idénticas.
• La UNION opera sobre todas las columnas inicialmente
seleccionadas.
• Los valores NULOS no son ignorados durante la verificación de
duplicados
• El operador IN tiene una mayor precedencia que el operador
UNION
• Por defecto, el resultado es ordenado ascendentemente por la
primera columna de la cláusula SELECT
UNION ALL
El operador UNION ALL obtiene todas las filas de múltiples
consultas
UNION ALL
Normas a seguir
• Diferente a UNION, las filas duplicadas no son eliminadas y el
resultado no es ordenado por defecto.
• La palabra reservada DISTINCT no puede ser usada
Ejemplos UNION bd Hospital
=====> Union
select * from turno where estado=2
union
select * from turno where estado=1;
=====> Esta consulta da un error porque los campos deben de ser iguales. Y la
estructura de la tabla turno y paciente debe de ser iguales asi mismo los tipos de
datos.
select * from turno where estado=2
union
select * from paciente;
Ejemplos UNION bd Hospital
=====> Como los campos tienen los mismos tipos de datos, puede hacer la
union entre las dos tablas
select idturno from turno where estado=2
union
select idpaciente from paciente;
=====> union obtiene los registros y elimina las repeticiones de de esos resultados
de la consulta union all devuelve todo, no elimina las repeticiones.select * from
turno
union all
select * from turno
Vistas
Mtra. Edith Andrea Hernández Blancas
VISTAS
Una vista es una tabla virtual compuesta de un subconjunto de
tablas a partir de consultas SELECT a otras tablas.
====>crear una vista
CREATE [OR REPLACE] VIEW nombre_vista [column_list]
AS consulta_SELECT
====>Eliminar una vista
DROP VIEW [IF EXISTS] nombre_vista1 , nombre_vista2 ...;
====>Modificar una vista
ALTER VIEW nombre_vista [column_list]
AS consulta_SELECT
VISTAS
====>creando la vista_medicos vista con todas las filas y columnas de la
tabla medico.
CREATE VIEW vista_medicos AS
SELECT * FROM medico;
-- ver resultados de la vista_medicos
select * from vista_medicos;
=====> Crear vista 'vista_detalleMedico' que muestre el detalle de los medicos:
el medico (nombre y apellidos) y su especialidad
CREATE VIEW vista_detalleMedico AS
select nombre, apellido, especialidad
from medico m, especialidad e
where m.idmedico=(select me.idMedico from medicoespecialidad me where
me.idEspecialidad=e.idespecialidad and me.idMedico=m.idMedico);
VISTAS
====> -- Crear vista 'vista_detalleCitaPaciente' que muestre el detalle
de la cita del paciente:
-- Vincular las tablas necesarias para Mostrar el medico(nombre y
apellidos), fechaturno,
-- nombre del paciente, apelido del paciente, observacion del campo
turno, y todos los campos de turnopaciente
CREATE VIEW vista_detalleCitaPaciente AS
select concat(m.nombre,' ', m.apellido) as medico,
t.fechaTurno, p.nombre, p.apellido, t.observacion,
tp.idpaciente, tp.idturno, tp.idmedico
from paciente as p
inner join turnopaciente as tp
on tp.idpaciente=p.idpaciente
inner join turno as t
on tp.idturno=t.idturno
inner join medico as m
on m.idmedico=tp.idmedico;