Sei sulla pagina 1di 7

CONSULTAS

Es un conjunto de rdenes a una Base de Datos que recuperan registros o


realizan una accin especfica sobre un conjunto de registros.
Utilizando consultas se puede recuperar datos de uno o ms campos, de una o
ms tablas. Tambin se puede someter los datos recuperados a una o ms
restricciones, conocidas como criterios, que se utilizan para limitar la cantidad
de datos que se recuperan.
Existen consultas de seleccin, de accin, de referencias cruzadas, de
parmetros, de datos aadidos y especificas de SQL.

CONSULTA DE SELECCIN
Este tipo de consulta obtiene los datos de una o ms tablas y muestra los
resultados en una hoja de datos en donde se pueden actualizar los registros.
Tambin se utiliza para agrupar registros para poder calcular sumas,
promedios y hallar totales.

Combinar tablas relacionadas en una consulta


Las combinaciones se utilizan para recuperar informacin relacionada de ms
de una tabla. Para crear una combinacin en una consulta, debe designarse
las claves principales de las tablas implicadas en la combinacin.
Ejemplo:
Crear la base de datos Farmacia con las tablas Producto e Inventario
Categoria:
Cod_Cat
Categoria

Escuela de Ingeniera de Sistemas

Producto:
Cod_Prod
Cod_Cat
Producto
Marca

Inventario:
N_Inv
Cod_Prod
Pre_compra
Pre_venta
Unidad
Stock

Ing. Ana Doris M. Barrera Loza

La tabla Producto almacena informacin acerca del producto, y la tabla


inventario almacena informacin de los precios, fecha de vencimiento y stock,
es decir de los lotes de los productos
Si se quiere visualizar el producto y su marca, as como los precios podemos
utilizar la sintaxis completa que es utilizando Nombretabla.nombrecampo
como se muestra a continuacin:
SELECT Producto.Producto, Producto.Marca, Inventario.Pre_compra,
Inventario.Pre_venta
FROM Producto, Inventario
WHERE Producto.Cod_Prod = Inventario.Cod_Prod
O la sintaxis abreviada:
SELECT Producto, Marca, Pre_compra, Pre_venta
FROM Producto, Inventario
WHERE Producto.Cod_Prod = Inventario.Cod_Prod
Si se quiere visualizar el nombre de la categora, el producto, la marca y su
stock, tenemos que usar la siguiente sentencia:
SELECT Categoria, Producto, Marca, Stock
FROM Categoria, Producto, Inventario
WHERE Categoria.Cod_Cat= Producto.Cod_Cat AND
Producto.Cod_Prod = Inventario.Cod_Prod
Esta sentencia nos va a permitir visualizar dichos datos pero no nos permite
actualizarlos.

INNER JOIN
Para poder actualizar el conjunto de resultados, se reemplaza a la sentencia
WHERE por INNER JOIN. Se utiliza para generar una vista que contenga solo
aquellos registros que tengan una correspondencia exacta en ambas tablas.
Si empleamos la clusula INNER en la consulta se seleccionarn slo aquellos
registros de la tabla de la que hayamos escrito a la izquierda de INNER JOIN
que contengan al menos un registro de la tabla que hayamos escrito a la
derecha.

Escuela de Ingeniera de Sistemas

Ing. Ana Doris M. Barrera Loza

SELECT
Producto.Producto,
Producto.Marca,
Inventario.Pre_venta
FROM Producto INNER JOIN Inventario
ON Producto.Cod_Prod = Inventario.Cod_Prod

Inventario.Pre_compra,

O puede utilizar la forma simplificada:


SELECT Producto, Nombre, Pre_compra, Pre_venta
FROM Producto INNER JOIN Inventario
ON Producto.Cod_Prod = Inventario.Cod_Prod
SELECT Categoria,Producto, Marca, Stock
FROM Categoria, Producto, Inventario,
Categorias INNER JOIN Producto ON Categoria.Cod_Cat=
Producto.Cod_Cat, Producto INNER JOIN Inventario Producto.Cod_Prod
= Inventario.Cod_Prod
Se pueden anidar instrucciones JOIN utilizando la siguiente sintaxis:
SELECT campos
FROM tb1 INNER JOIN
(tb2 INNER JOIN [( ]tb3
[INNER JOIN [( ]tablax [INNER JOIN ...)]
ON tb3.campo3 comp tbx.campox)]
ON tb2.campo2 comp tb3.campo3)
ON tb1.campo1 comp tb2.campo2;

Se puede utilizar INNER JOIN con las tablas Categoria y Producto para
seleccionar todos los productos de cada categoria.
Pero si se quiere seleccionar todos las categorias (incluso si alguna de ellas no
tiene ningn producto) se emplea LEFT JOIN, o todos los productos (incluso si
alguno no est asignado a ninguna categoria), en este caso RIGHT JOIN.
LEFT toma todos los registros de la tabla de la izquierda aunque no tengan
ningn registro en la tabla de la derecha. RIGHT realiza la misma operacin
pero al contrario, toma todos los registros de la tabla de la derecha aunque no
tenga ningn registro en la tabla de la izquierda.

SUBCONSULTAS
Este tipo de consulta consta de una instruccin SQL SELECT dentro de otra
consulta de seleccin o consulta de accin. Es una consulta cuyo resultado se
Escuela de Ingeniera de Sistemas

Ing. Ana Doris M. Barrera Loza

utiliza

como

criterio

de

otra

consulta.

Las

subconsultas

se

hacen

normalmente dentro de las expresiones WHERE.

Ejemplo:
Visualizar los datos de los productos cuyo precio de compra sea mayor que el
promedio de precio de compra de todos los productos de la tabla.
SELECT *
FROM Inventario
WHERE Pre_compra > (SELECT AVG(Pre_compra) FROM Inventario)
Visualizar los productos que no tienen inventario
SELECT *
FROM Producto
WHERE Cod_Prod NOT IN ( SELECT Cod_Prod FROM Inventario)

Escuela de Ingeniera de Sistemas

Ing. Ana Doris M. Barrera Loza

SQL CON MAS DE UNA TABLA


Disear una base de datos con 3 tablas las cuales van a estar relacionadas por el campo
Cod_Emp
Tabla

Campo

Tipo

Dpto
Dpto

Cod_Dpto
Departamento

Texto
Texto

Empleado
Empleado
Empleado
Empleado
Empleado
Empleado

Cod_Emp
Nombres
Apellidos
Edad
Salario
Cod_Dpto

Texto
Texto
Texto
Numrico
Numrico
Texto

Cliente
Cliente
Cliente
Cliente
Cliente

Cod_Cliente
Nombres
Apellidos
Ciudad
Cod_Emp

Texto
Texto
Texto
Texto
Texto

Seleccionar apellidos del empleado, salario y el departamento al que pertenece


ordenado por departamento.
select Empleado.Apellidos, Empleado.Salario, Dpto.Departamento
from
Dpto, Empleado
where Dpto.Cod_Dpto = Empleado.Cod_Dpto

order by Departamento

Seleccionar los nombres y apellidos del empleado, el departamento y su salario


ordenado por el salario descendentemente.
select Nombres, Apellidos, Departamento, Salario
from
Dpto, Empleado
where Dpto.Cod_Dpto = Empleado.Cod_Dpto
order by Salario Desc

Seleccionar el cdigo del empleado, los nombres y apellidos del empleado,


departamento y el nombre y apellidos de los clientes que tiene y la ciudad a la que
pertenece el cliente
select Empleado.Cod_Emp, Empleado.Nombres, Empleado.Apellidos,
Departamento, Cliente.Nombres, Cliente.Apellidos, Ciudad
from
Dpto, Empleado, Cliente
where Dpto.Cod_Dpto = Empleado.Cod_Dpto

and

Empleado.Cod_Emp = Cliente.Cod_Emp

Escuela de Ingeniera de Sistemas

Ing. Ana Doris M. Barrera Loza

Seleccionar el cdigo, apellidos, departamento y edad de los empleados, adems de los


nombres y apellidos de sus clientes, pero solo de los empleados cuya edad es menor
que 29
select Empleado.Cod_Emp, Empleado.Apellidos, Departamento, Edad,
Nombres, Cliente.Apellidos
from
Dpto, Empleado, Cliente
where Dpto.Cod_Dpto = Empleado.Cod_Dpto

and
and

Empleado.Cod_Emp = Cliente.Cod_Emp
Edad < 29

Seleccionar el cdigo del empleado, nombres , apellidos y ciudad de sus clientes cuya
ciudad empiece con la letra B
select Empleado.Cod_Emp, Cliente.Apellidos, Cliente.Nombres, Ciudad
from
Empleado, Cliente

where Empleado.Cod_Emp = Cliente.Cod_Emp


and

Ciudad Like B*

SQL CON SUB QUERYS


Visualizar los nombres y apellidos de los empleados que tienen clientes
select Nombres, Apellidos
from
Empleado
where Empleado.Cod_Emp IN ( SELECT Cod_Emp FROM

Cliente )

Visualizar los nombres y apellidos de los empleados que no tienen clientes


select Nombres, Apellidos
from
Empleado
where Empleado.Cod_Emp

NOT IN ( SELECT Cod_Emp FROM

Cliente )

Visualizar los nombres de los empleados cuyo salario es igual o mayor que el salario
medio de todos los empleados.
SELECT Apellido, Nombres FROM Empleados
WHERE Salario >= (SELECT Avg(Salario) FROM Empleados

SQL CON MAS DE UNA TABLA Y AGRUPACIONES


Suma de salarios por departamento
select
from
where
group

Departamento, SUM(salario) AS suma_salario


Dpto, Empleado
Dpto.Cod_Dpto = Empleado.Cod_Dpto
by Departamento

Cantidad de clientes por cada empleado


Escuela de Ingeniera de Sistemas

Ing. Ana Doris M. Barrera Loza

select Empleado.Cod_Emp As Cdigo_Emp, COUNT (Cliente.Cod_Emp)


N_Clientes
from
Empleado, Cliente
where Empleado.Cod_Emp = Cliente.Cod_Emp
group by Empleado.Cod_Emp

AS

Suma de salarios, mximo, mnimo, promedio por departamento


select

from
where
group

Dpto.Departamento,
SUM(salario) AS suma_salario,
MAX(salario) AS max_salario,
MIN(salario) AS min_salario,
AVG(salario) AS Prom_salario
Dpto, Empleado
Dpto.Cod_Dpto = Empleado.Cod_Dpto
by Dpto.Departamento

Escuela de Ingeniera de Sistemas

Ing. Ana Doris M. Barrera Loza

Potrebbero piacerti anche