Está en la página 1de 26

SQL EN ACCESS

Consultas por Parámetros y


Múltiples Tablas
Consultas SQL por Parámetros

Son aquellas cuyas condiciones de búsqueda se definen


mediante parámetros. Si se ejecutan directamente
desde la base de datos donde han sido definidas
aparecerá un mensaje solicitando el valor de cada uno
de los parámetros. Es una consulta interactiva.
Consultas SQL por Parámetros

Sintaxis:
PARAMETERS nombre1 tipo1, nombre2 tipo2, ... , nombreN tipoN;
Consulta;
Donde:
Elemento Descripción
nombre1, nombre2 Nombre del campo que se pide por parámetro
tipo1, tipo2 Tipo de datos del campo parámetro
Consulta SQL

Nota: para los tipos de datos SQL y sus sinónimos, consultar el siguiente enlace:
http://www.aulaclic.es/sql/a_8_1_1.htm
Consultas SQL por Parámetros

Ejem1. Consulta por parámetros que devuelve el nombre del producto.


Además devuelve solo precios entre un precio_mínimo y un
precio_máximo, pedidos por parámetros.
Consulta sin parámetros
SELECT ProductName, Price FROM Products WHERE Price > 25 AND Price < 50
ORDER BY Price;

Consulta con Parámetros

PARAMETERS PrecioMin Short, PrecioMax Short;


SELECT ProductName, Price FROM Products WHERE Price > PrecioMin AND Price < PrecioMax
ORDER BY Price;
Consultas SQL por Parámetros

Ejem2. Consulta que lista los clientes del país que se pide en el parámetro
Pais.
Consulta sin parámetros
SELECT ContactName, City, Country FROM Customers WHERE
Country='Mexico'
ORDER BY City;
Consulta con Parámetros
PARAMETERS Pais Text;
SELECT ContactName, City, Country FROM Customers WHERE Country=Pais
ORDER BY City;
Consultas SQL por Parámetros

En Access puede obviar la declaración de los parámetros a


proporcionar a la consulta. Además se puede proporcionar más
información en el parámetro, que debe ir entre corchetes:
Ejem3: consulta que lista la categoría de producto dada por
parámetros.
SELECT ProductId, Productname, Price
FROM Products
WHERE CategoryId=[Categoría: 1=Beverages, 2=Condiments,
3=Confections, 4=Dairy Products];
Consultas SQL por Parámetros

Ejer1: Escribir por parámetros las siguientes consultas:


SELECT ContactName, City, Country FROM Customers WHERE City
In ('Sevilla', 'Madrid', 'Barcelona')
ORDER BY Country;

SELECT FirstName, LastName, BirthDate FROM Employees


WHERE BirthDate BETWEEN #01/01/1960# AND #12/31/1963#
ORDER BY BirthDate;
Consultas SQL por Parámetros

Ejem4: La siguiente consulta muestra el nombre y precio de los


productos más otra columna de nuevo precio, tras aplicar el 15% de
descuento para los productos cuyos precios sean mayores a 50 y 10% en
otro caso, de la categoría seleccionada por parámetros. Ordena por
precio.

SELECT ProductName, Price, IIf(Price >50, Price*0.85, Price*0.90)


As NuevoPrecio
FROM Products WHERE CategoryId=[Elija el código de categoría entre
1 y 7]
ORDER BY Price;
Consultas SQL por Parámetros

Ejem5: La siguiente consulta hace uso de una subconsulta (SELECT


AVG(Price) FROM Products), que devuelve el promedio general de
precios. La consulta principal muestra ProductID, SupplierID,
ProductName y Price de Products. Filtra solo aquellos precios que están
por debajo del promedio general de precios y del proveedor pedido por
parámetro.
SELECT ProductId, SupplierID, ProductName, Price
FROM Products
WHERE Price<(SELECT AVG(Price) FROM Products) AND
SupplierID=[Código de proveedor entre 1 y 29];
Consultas SQL de Múltiples Tablas

En este tema vamos a estudiar las consultas multitabla, llamadas así


porque están basadas en más de una tabla.
Desde el SQL de Microsoft Jet 4.x soporta dos grupos de consultas
multitabla:
•la unión de tablas
•la composición de tablas
Consultas SQL de Múltiples Tablas
La Unión de Tablas
Esta operación se utiliza cuando
tenemos dos tablas con las mismas
columnas y queremos obtener una
nueva tabla con las filas de la
primera y las filas de la segunda.
En este caso la tabla resultante tiene
las mismas columnas que la primera
tabla (que son las mismas que las de
la segunda tabla). El operador que
permite realizar esta operación es el
operador UNION.
Consultas SQL de Múltiples Tablas
La Unión de Tablas
• Sintaxis: SELECT nombre_columna(s) FROM tabla1 UNION ALL
SELECT nombre_columna(s) FROM tabla2 ORDER BY
nombre_columna;
• Las dos consultas deben tener el mismo número de columnas pero las columnas pueden
llamarse de diferente forma y ser de tipos de datos distintos.
• Las columnas del resultado se llaman como las de la primera consulta.
• Por defecto la unión no incluye filas repetidas, si alguna fila está en las dos tablas, sólo
aparece una vez en el resultado.
• Si queremos que aparezcan todas las filas incluso las repeticiones de filas, incluimos la
palabra ALL (todo en inglés).
• El empleo de ALL tienen una ventaja, la consulta se ejecutará más rápidamente. Puede que
la diferencia no se note con tablas pequeñas, pero si tenemos tablas con muchos registros
(filas) la diferencia puede ser notable.
• La cláusula ORDER BY se escribe después de la última consulta, en este último caso se
deben de utilizar los nombres de columna de la primera consulta.
Consultas SQL de Múltiples Tablas
La Unión de Tablas
• Ejem1. Consulta UNION entre las tablas Clientes (Customers) y Proveedores
(Suppliers). Primero creo una nueva columna llamada Tipo, para distinguir entre
Cliente y en la segunda consulta hago lo mismo para Proveedor.

SELECT 'Cliente' As Tipo, ContactName As Contacto, City As


Ciudad, Country As País
FROM Customers
UNION SELECT 'Proveedor', ContactName, City, Country
FROM Suppliers ORDER BY País;
Consultas SQL de Múltiples Tablas
La composición de tablas
Consiste en concatenar filas de una tabla con filas de otra. En este caso
obtenemos una tabla con las columnas de la primera tabla unidas a
las columnas de la segunda tabla, y las filas de la tabla resultante son
concatenaciones de filas de la primera tabla con filas de la segunda
tabla.
Los tipos de composición de tablas son:
•El producto cartesiano
•El INNER JOIN (Composición Interna ó Join Interno). En algunos
motores de BD solamente se usa el comando JOIN para éste tipo.
•El LEFT / RIGHT JOIN (Composición por la izquierda / derecha)
Consultas SQL de Múltiples Tablas
El producto cartesiano
Aplicando el producto cartesiano
a dos tablas se obtiene una tabla
con las columnas de la primera
tabla unidas a las columnas de
la segunda tabla, y las filas de
la tabla resultante son todas las
posibles concatenaciones de
filas de la primera tabla con
filas de la segunda tabla.
Consultas SQL de Múltiples Tablas
El producto cartesiano
Ejemplo: En la siguiente consulta se obtiene el producto cartesiano de 2
tablas: Customers y Orders. 92x196 = 18,032 combinaciones!
SELECT O.OrderID, O.OrderDate, O.CustomerID, C.CustomerID
FROM Customers C, Orders O;
Esta operación no es de las más utilizadas, normalmente cuando
queremos componer dos tablas es para añadir a las filas de una tabla, una
fila de la otra tabla, por ejemplo añadir a los pedidos (Orders) los datos
del cliente (Customers) correspondiente, como por ejemplo el Contacto
del cliente (ContactName) que está solamente en la tabla Customers.
Consultas SQL de Múltiples Tablas
El producto cartesiano
• El producto cartesiano con selección de filas específicas
Sintaxis:

SELECT Tabla1.campo1, Tabla1.campo2, Tabla2.Campo1


FROM Tabla1, Tabla2
WHERE Tabla1.PK1 = Tabla2.FK1
Notemos que en WHERE
Nota: PK significa la clave primaria de la tabla y FK una necesitamos expresar el vínculo que
clave foránea o ajena en la tabla. se establece entre las dos tablas.
Consultas SQL de Múltiples Tablas
El producto cartesiano
• El producto cartesiano con selección de filas específicas
Ejemplo1:
Consulta que devuelve el producto cartesiano
de Clientes y Pedidos, pero solamente
mostrará las filas de CustomerID (Clientes)
que coinciden con el CustomerID de la tabla
Orders (Pedidos). El resto de campos será
diferente.
SELECT C.CustomerID, O.CustomerID, O.OrderID, O.OrderDate
FROM Customers AS C, Orders AS O
WHERE O.CustomerId=C.CUstomerID;
Consultas SQL de Múltiples Tablas
El producto cartesiano
• El producto cartesiano con selección de filas específicas
Ejer1:
Agregar más campos de la tabla Clientes
(Customers) a la consulta anterior, por
ejemplo el nombre del cliente
(CustomerName) y quitar el CustomerId de la
tabla Pedidos (Orders).

SELECT C.CustomerID, C.CustomerName, O.OrderID, O.OrderDate


FROM Customers AS C, Orders AS O
WHERE O.CustomerId=C.CUstomerID;
Consultas SQL de Múltiples Tablas
El producto cartesiano
Ejem1_1:
Del cambio anterior, podemos dejar los
campos repetidos, para agrupar por ellos y
contar la cantidad de pedidos (OrderID) que
ha hecho cada cliente en la tabla Orders

SELECT C.CustomerID, C.CustomerName, Count(O.OrderID) AS


CantPedidos
FROM Customers AS C, Orders AS O
WHERE O.CustomerId=C.CUstomerID
GROUP BY C.CustomerID, C.CustomerName;
Consultas SQL de Múltiples Tablas
El producto cartesiano
Ejem2: consulta de 3 tablas
Del Ejem1_1 (SIN AGRUPAR), quiero agregar datos de
los Detalles de Pedido (OrderDetails), como la
cantidad (Quantity) de producto incluidos en cada
Pedido (Order), debemos incluir información de la
tabla OrderDetails, (una tabla más) que está
relacionada con Orders por medio de OrderId.

SELECT C.CustomerID, C.CustomerName, O.OrderID, O.OrderDate,


OD.Quantity
FROM Customers AS C, Orders AS O, OrderDetails AS OD
WHERE C.CustomerID=O.CustomerId AND
O.OrderId=OD.OrderID;
Consultas SQL de Múltiples Tablas
El producto cartesiano
Ejem2_1: consulta de 3 tablas
Nuevamente, en la consulta anterior, aparecen campos
repetidos, que puedo usar para agrupar por ellos y calcular
la cantidad total de productos por pedido de cada cliente:
SUM(Quantity). Ordenar por Pedido (OrderID)

SELECT C.CustomerID, C.CustomerName, O.OrderID, O.OrderDate,


SUM(OD.Quantity) AS TotalProductos FROM Customers AS C, Orders AS
O, OrderDetails AS OD WHERE C.CUstomerID=O.CustomerId AND
O.OrderId=OD.OrderID
GROUP BY C.CustomerID, C.CustomerName, O.OrderID, O.OrderDate
ORDER BY O.OrderID;
Consultas SQL de Múltiples Tablas
El producto cartesiano
Ejemplo3: consulta de 4 tablas relacionadas
Consulta que devuelve el detalle de pedido de
los clientes y el monto (Quantity*Price) de
cada producto por pedido. Muestra
CustomerID, CustomerName, OrderId,
ProductId, Quantity, Price.

SELECT c.CustomerID, c.CustomerName, o.OrderID, p.ProductID, od.Quantity,


p.Price, od.Quantity*p.Price as Monto
FROM Customers as c, Orders as o, OrderDetails as od, Products as p
WHERE c.CustomerID=o.CustomerID and o.OrderID=od.OrderID and
od.ProductID=p.ProductID;
Consultas SQL de Múltiples Tablas
El producto cartesiano
Ejer3_1: consulta de 4 tablas relacionadas Calcular Monto Total: SUM(Quantity*Price)
Nuevamente tenemos algunos campos
repetidos, para poder agruparlos y de esa
manera obtener la suma del Monto Total
SUM(Quantity*Price) por cada Pedido (OrderID).
De la consulta anterior, descartar campos no
repetidos, agrupar los repetidos y calcular el
Monto Total. Ordenar por pedido (OrderID)

SELECT c.CustomerID, c.CustomerName, o.OrderID, SUM(od.Quantity*p.Price)


as MontoTotal
FROM Customers as c, Orders as o, OrderDetails as od, Products as p
WHERE c.CustomerID=o.CustomerID and o.OrderID=od.OrderID and
od.ProductID=p.ProductID
GROUP BY c.CustomerID, C.CustomerName, O.OrderId ORDER BY O.OrderID;
Consultas SQL de Múltiples Tablas
El producto cartesiano
Ejercicio: MontoTotal de Venta x Producto
La consulta debe mostrar, ProductID,
ProducName, Price, Calcular la cantidad total
(Quantity) de producto vendido. Además debe
calcular el Monto Total de Ventas de cada
producto como MontoTotal.
BIBLIOGRAFÍA

https://sistemaspdfs.files.wordpress.com/2010/05/cursosql.pdf

http://www.aulaclic.es/sql/f_sql.htm
http://quidel.inele.ufro.cl/~pvalenzu/tutoriales/sql/sql.html

También podría gustarte