Está en la página 1de 23

UNIVERSIDAD DE EL SALVADOR

FACULTAD DE CIENCIAS ECONOMICAS


DEPARTAMENTO DE COMPUTACION
COMPUTACIÓN II
GUIA DE CLASE #: 8

Consultas por parámetros, sobre múltiples tablas y de Acción.

Contenido:
1. Consultas por Parámetros...................................................................................................................... 2
2. Consultas sobre múltiples tablas ........................................................................................................... 7
2.1. INNER JOIN ................................................................................................................................ 11
2.2. LEFT JOIN .................................................................................................................................. 14
2.3. RIGHT JOIN ................................................................................................................................ 15
3. Consultas de acción ............................................................................................................................. 16
3.1. Consultas de eliminación: DELETE ............................................................................................ 16
3.2. Consultas de registros: INSERT INTO ........................................................................................ 18
3.3. Consultas de actualización: UPDATE ......................................................................................... 22

Página 1 de 23 Ciclo II-2019


1. Consultas por Parametros

Las consultas con 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.
Si deseamos ejecutarlas desde una aplicación hay que asignar primero el valor de los
parámetros y después ejecutarlas. Su sintaxis es la siguiente:

PARAMETERS nombre1 tipo1, nombre2 tipo2, ... , nombreN tipoN;


Consulta;

Parte Descripción
nombre Es el nombre del parámetro
Tipo Es el tipo de datos del parámetro
consulta Una consulta SQL

Tipos de datos SQL

Los tipos de datos Microsoft Access SQL de motor de base de datos consisten en 13 tipos de
datos principales definidos por el motor de base de datos de Microsoft Access y varios
sinónimos válidos reconocidos para estos tipos de datos.

La tabla siguiente enumera los tipos de datos principales.

Tipo de datos Tamaño Descripción


de
almacena
miento
BINARIO 1 byte Se puede almacenar cualquier clase de datos en un
por campo de este tipo. No se realiza ninguna conversión
carácter de datos (por ejemplo, a texto). El modo en que se

Página 2 de 23 Ciclo II-2019


Tipo de datos Tamaño Descripción
de
almacena
miento
proporcionan los datos en un campo binario determina
la forma en la que aparecerán como resultado.
BIT 1 byte Valores Sí y No y campos que contienen uno o dos
valores.
TINYINT 1 byte Valor entero entre 0 y 255.
MONEY 8 bytes Entero escalado entre
– 922.337.203.685.477,5808 y
922.337.203.685.477,5807.
DATETIME 8 bytes Valor de fecha u hora entre los años 100 y 9999.
(Vea DOUBLE)
UNIQUEIDENTIFI 128 bits Número de identificación exclusivo utilizado en llamadas
ER a procedimientos remotos.
REAL 4 bytes Valor de punto flotante de precisión simple con un
intervalo de – 3,402823E38 a – 1,401298E-45 para
valores negativos, 1,401298E-45 a 3,402823E38 para
valores positivos, y 0.
FLOAT 8 bytes Valor de punto flotante de precisión doble con un
intervalo de – 1,79769313486232E308 a –
4,94065645841247E-324 para valores negativos,
4,94065645841247E-324 a 1,79769313486232E308
para valores positivos, y 0.
SMALLINT 2 bytes Entero corto entre – 32.768 y 32.767.
INTEGER 4 bytes Entero largo entre – 2.147.483.648 y 2.147.483.647.
DECIMAL 17 bytes Tipo de datos numérico exacto que mantiene valores
desde 1028 - 1 hasta - 1028 - 1. Puede definir la
precisión (1 - 28) y la escala (0 - precisión definida). La
precisión y escala predeterminadas son 18 y 0
respectivamente.
TEXT 2 bytes De cero a un máximo de 2,14 gigabytes.
por
carácter
(Vea la
nota)

Página 3 de 23 Ciclo II-2019


Tipo de datos Tamaño Descripción
de
almacena
miento
IMAGE Según se De cero a un máximo de 2,14 gigabytes. Se utiliza para
requiera objetos OLE.
CHARACTER 2 bytes De cero a 255 caracteres.
por
carácter
(Vea la
nota)
Puede utilizar nombre pero no tipo de datos en una cláusula WHERE o HAVING.

Los ejemplos mostrados en la presente guía se refieren a la base de datos para gestionar
las cuentas y préstamos de los clientes de una entidad bancaria.

Por lo que se le recomienda descargar el archivo cuentaprestamos.accdb proporcionado en


la Unidad V del aula virtual (Recursos de la unidad 4).

Página 4 de 23 Ciclo II-2019


Ejemplo de consultas utilizando la palabra reservada PARAMETERS

PARAMETERS Precio_Minimo Currency, cant float;


SELECT precio, Cantidad FROM [detalles de Pedido] WHERE Precio > Precio_Minimo
AND cantidad >cant;

PARAMETERS cargoA text;


SELECT codempleado, ape1empleado, cargo
FROM Empleado
WHERE cargo = cargoA;

PARAMETERS balanceb float;


SELECT numcuenta, balance
FROM cuenta
WHERE balance <= balanceb;

Ejemplos de consultas sin utilizar la palabra reservada PARAMETERS

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

SELECT codempleado, ape1empleado, cargo, salario, IIF( salario>1000, 100, 200) AS Bono
FROM Empleado
WHERE cargo = [Digite el cargo a consultar];

Observe que en el ejemplo anterior en las columnas a mostrar se ha utilizado la función IIF
para condicionar el bono a mostrar en la columna bono que no es parte de la estructura de
campos de la tabla Empleado. Por tanto la función IIF permite mostrar valores en una
columna que dependen de una condición.

Página 5 de 23 Ciclo II-2019


En la siguiente consulta se solicita el valor de balance a comparar, y aquellos registros que
cumplan con la condición de que el balance es menor al valor introducido por parámetro se
mostraran en la consulta.

SELECT numcuenta, balance


FROM cuenta
WHERE balance <= [Buscar valores de balance menores a:];

Veamos el siguiente ejemplo, en el cual podemos observar el uso de una subconsulta que
devuelve el promedio de todos los balances. La consulta principal muestra número de
cuenta, balance, tipo de la tabla cuente y condiciona que únicamente se deben mostrar
aquellos registros de la tabla cuenta cuyo balance es mayor al promedio de todos los
balances y además la consulta principal filtra que solo se muestre los registros de un
determinado tipo de cuenta que se pide por parámetro.

SELECT numcuenta, balance, tipo


FROM cuenta
WHERE balance > (SELECT AVG(balance) FROM Cuenta) AND tipo= [Digite tipo de
cuenta:];

Página 6 de 23 Ciclo II-2019


2. Consultas sobre multiples tablas

Todas las consultas estudiadas hasta el momento se basan en seleccionar campos sobre
los datos almacenados en una única tabla. SQL también permite obtener resultados a
través de la combinación de múltiples tablas.

La Sintaxis es:

SELECT <lista de campos>


FROM <tabla1>, <tabla2>, ... <tablaN>

El resto de cláusulas estudiadas hasta ahora (WHERE, ORDER BY, GROUP BY,
HAVING...) siguen siendo válidas y utilizan el mismo formato. Las listas de campos
válidos son ahora cualquiera de los campos de las tablas utilizadas, como si se tratara de
una única tabla en la que existen todos los campos de todas las tablas. Puesto que es
posible que existan campos con el mismo nombre en las diferentes tablas, a la hora de
nombrar los campos será necesario especificar a qué tabla pertenecen con el formato
“<tabla>.<campo>”.

Combinando tablas:
A continuación se explica cómo diseñar consultas que muestren información de varias
tablas
Veamos el siguiente ejemplo de Combinación entre dos tablas:

Tabla1 Tabla2

PK1 FK1
Campo1 FK2

Campo2 Campo1

Página 7 de 23 Ciclo II-2019


SELECT Tabla1.campo1, Tabla1.campo2, Tabla2.Campo1
FROM Tabla1, Tabla2
WHERE Tabla1.PK1 = Tabla2.FK1

Notemos que en WHERE necesitamos expresar el vínculo que se establece entre las dos
tablas.

Tipos de combinaciones.
En Access se pueden realizar tres tipos de combinaciones:
1. INNER JOIN
2. LEFT JOIN
3. RIGHT JOIN

Producto cartesiano de dos tablas


Analizaremos las consultas con dos tablas relacionadas: Sucursal y banco

Página 8 de 23 Ciclo II-2019


Si seleccionamos varias tablas y no hacemos coincidir los valores de las columnas
relacionadas con una instrucción WHERE, obtendremos una gran duplicidad de filas,
realizándose el producto cartesiano entre las filas de las diferentes tablas
seleccionadas.

SELECT * FROM banco, sucursal;

Para representar el resultado de una consulta combinando dos tablas sin exigir
coincidencia ente las columnas relacionadas se puede representar el resultado con un
diagrama de ven (esquemas usados en la teoría de conjuntos)

SELECT * FROM A, B;

Campos combinados que tengan valores iguales de dos tablas

SELECT * FROM banco, sucursal WHERE (banco.codbanco = sucursal.codbanco);

También se puede expresar el nombre de la tabla con Alias.

SELECT * FROM banco AS b, sucursal AS s WHERE (b.codbanco = s.codbanco);

Página 9 de 23 Ciclo II-2019


A continuación se representa el resultado de la consulta anterior con diagrama de Venn:
SELECT * FROM A, B WHERE A.pk = B.fk

Donde pk es la clave principal de la tabla A y fk es la clave foránea o secundaría en la


tabla B.

Ejemplo para mostrar campos específicos de dos tablas y sus campos


combinados que tengan valores iguales.

SELECT banco.codbanco, banco.nombre, sucursal.nomsucursal, sucursal.


CantEmpleados FROM banco, sucursal WHERE (banco.codbanco = sucursal.codbanco);

Ejemplo para mostrar campos específicos de dos tablas con sus campos
combinados que tengan valores iguales y una condición.

SELECT banco.codbanco, banco.nombre, sucursal.nomsucursal,


sucursal.CantEmpleados FROM banco, sucursal WHERE (banco.codbanco =
sucursal.codbanco) and sucursal.cantEmpleados> 750;

Página 10 de 23 Ciclo II-2019


2.1. INNER JOIN

INNER JOIN combina dos tablas con los campos combinados que tengan valores iguales:

SELECT Nombres de campos a seleccionar


FROM Tabla1 INNER JOIN Tabla2 ON Tabla1.PK1 = Tabla2.FK1
WHERE condiciones;

Observe que se requiere la palabra reservada ON para especificar la condición de


combinación en la consulta.

SELECT *
FROM banco INNER JOIN sucursal
ON banco.codbanco = sucursal.codbanco;

SELECT banco.codbanco, banco.nombre, sucursal.nomsucursal, sucursal.CantEmpleados


FROM banco INNER JOIN sucursal
ON (banco.codbanco = sucursal.codbanco)
WHERE sucursal.cantEmpleados> 750;

Ejemplos de Combinación entre tres tablas sin utilizar INNER JOIN:

Tabla1 Tabla2 Tabla3

PK1 FK1 PK2


Campo1 FK2 Campo1

Campo2 Campo1 Campo2

Página 11 de 23 Ciclo II-2019


Se requiere mas de una condicion en WHERE para expresar el vínculo que se establece
entre las tres tablas con el operador and para comparar los valores de los campos
combinados de las tres tablas.

Ejemplo para mostrar información de tres tablas combinando los campos que
relacionan las tres tablas por medio de una condición de igualdad de valores sin
utilizar INNER JOIN.

La siguiente consulta muestra información de tres tablas relacionadas: Banco, Sucursal y


Cuenta

SELECT banco.codbanco, banco.Nombre, sucursal.Nomsucursal, sucursal.CantEmpleados,


cuenta.NumCuenta
FROM banco, sucursal, cuenta
WHERE (banco.codbanco = Sucursal.codBanco) AND (sucursal.codsucursal =
cuenta.codsucursal);

La siguiente consulta agrega una condición al resultado de la combinación de información de


tres tablas:

SELECT banco.codbanco, banco.Nombre, sucursal.Nomsucursal, sucursal.CantEmpleados,


cuenta.NumCuenta;
FROM banco, sucursal, cuenta

Página 12 de 23 Ciclo II-2019


WHERE (banco.codbanco = Sucursal.codBanco) AND (sucursal.codsucursal =
cuenta.codsucursal) AND ( sucursal.cantEmpleados> 750);

SELECT banco.codbanco, banco.Nombre, sucursal.Nomsucursal, sucursal.CantEmpleados,


cuenta.NumCuenta
FROM banco, sucursal, cuenta
WHERE (banco.codbanco = Sucursal.codBanco) AND (sucursal.codsucursal =
cuenta.codsucursal)
AND ( sucursal.cantEmpleados> 650)
ORDER BY banco.codbanco

Con cuatro tablas se requiere una condición de igualdad para cada relación:

A continuación se presenta una consulta que muestra código y nombre del banco, nombre
de la sucursal, el código, nombre, apellido del cliente y el número de préstamo y la cantidad
prestada.

Página 13 de 23 Ciclo II-2019


SELECT banco.codbanco, banco.Nombre, sucursal.Nomsucursal, cliente.codclie,
cliente.nomclie,cliente.apeclie, prestamo.Numprestamo, prestamo.cantidad
FROM banco, sucursal, prestamo, cliente
WHERE (banco.codbanco = Sucursal.codBanco) AND (sucursal.codsucursal =
prestamo.codsucursal) AND ( prestamo.codclie =cliente.codclie);

A continuación se presenta la consulta anterior pero la información que muestra debe cumplir
la condición para los clientes cuyo apellido es Arango:

2.2. LEFT JOIN

La combinación LEFT JOIN muestra todas las filas de la tabla izquierda, sin importar la
existencia de coincidencias en la tabla de la derecha.

SELECT BANCO.*, SUCURSAL.*


FROM BANCO LEFT JOIN SUCURSAL ON BANCO.CodBanco = SUCURSAL.CodBanco;

A continuación se representa la combinación LEFT JOIN con el siguiente diagrama de Venn

Página 14 de 23 Ciclo II-2019


2.3. RIGHT JOIN

La combinación RIGHT JOIN muestra todas las filas de la tabla derecha, sin importar la
existencia de coincidencias en la tabla de la izquierda.

SELECT c.nomclie, c.apeclie, p.Numprestamo, p.cantidad


FROM cliente AS c RIGHT JOIN prestamo AS p ON c.codclie = p.codclie;

A continuación se representa la combinación RIGHT JOIN con el siguiente diagrama de Venn

Página 15 de 23 Ciclo II-2019


3. Consultas de accion

Las consultas de acción o manipulación de datos son aquellas que no devuelven ningún
registro, son las encargadas de acciones como añadir, borrar y modificar registros.

Para poder hacer esto, SLQ nos ofrece las siguientes sentencias: INSERT para insertar,
UPDATE para modificar y DELETE para borrar.

3.1. Consultas de eliminación: DELETE

Crea una consulta de eliminación que elimina los registros de una o más de las tablas
listadas en la cláusula FROM que satisfagan la cláusula WHERE. Esta consulta elimina
los registros completos, no es posible eliminar el contenido de algún campo en concreto.
Su sintaxis es:

En Access usaremos la sentencia colocando el * después de la Instrucción DELETE:

DELETE * FROM nombre_tabla

[WHERE condiciones];

DELETE es especialmente útil cuando se desea eliminar varios registros. En una


instrucción DELETE con múltiples tablas, debe incluir el nombre de tabla (Tabla.*). Si
especifica más de una tabla desde la que eliminar registros, todas deben ser tablas de
muchos a uno. Si desea eliminar todos los registros de una tabla, eliminar la propia tabla
es más eficiente que ejecutar una consulta de borrado.

Página 16 de 23 Ciclo II-2019


Se puede utilizar DELETE para eliminar registros de una única tabla o desde varios lados de
una relación uno a muchos. Las operaciones de eliminación en cascada en una consulta
únicamente eliminan desde varios lados de una relación. Por ejemplo, en la relación entre las
tablas Clientes y Pedidos, la tabla Pedidos es la parte de muchos por lo que las operaciones
en cascada solo afectaran a la tabla Pedidos. Una consulta de borrado elimina los registros
completos, no únicamente los datos en campos específicos. Si desea eliminar valores en un
campo especificado, debe crear una consulta de actualización que cambie los valores a Null.

Una vez que se han eliminado los registros utilizando una consulta de borrado, no puede
deshacer la operación. Si desea saber qué registros se eliminarán, primero examine los
resultados de una consulta de selección que utilice el mismo criterio y después
ejecute la consulta de borrado. Mantenga copias de seguridad de sus datos en todo
momento. Si elimina los registros equivocados podrá recuperarlos desde las copias de
seguridad.

La siguiente consulta de eliminación borra los registros de los empleados que pertenecen al
cargo Analista:

DELETE * FROM Empleado WHERE Cargo = “Analista”;

Borrar los empleados que pertenecen a la sucursal “4322”

DELETE * FROM Empleado WHERE Codsucursal = “4322”;

Página 17 de 23 Ciclo II-2019


La siguiente consulta de eliminación borra la sucursal con código igual a 1088:

Como el código de sucursal 1088 está registrado en otras tablas con las cuales se relaciona
la tabla sucursal y no se ha establecido eliminar en cascada el gestor de base de datos no
permite eliminar el registro.

3.2. Consultas de registros: INSERT INTO

La sentencia INSERT INTO Agrega un registro en una tabla. Se la conoce como una
consulta de datos añadidos. Esta consulta puede ser de dos tipos: Insertar un único
registro ó Insertar en una tabla los registros contenidos en otra tabla.

3.2.1. Para insertar un único Registro:

En este caso la sintaxis es la siguiente:

INSERT INTO Tabla (campo1, campo2, .., campoN) VALUES (valor1, valor2, ..., valorN)

Página 18 de 23 Ciclo II-2019


Esta consulta graba en el campo1 el valor1, en el campo2 y valor2 y así sucesivamente. Hay
que prestar especial atención a acotar entre comillas simples (') los valores literales (cadenas
de caracteres) y las fechas indicarlas en formato mm-dd-aa y entre caracteres de
almohadillas (#).

Los valores valor1, valor2, ..., valorN se deben corresponder exactamente con los campos
que posee la estructura de la tabla y deben estar en el mismo orden, a menos que las
volvamos a poner a continuación del nombre de la tabla. En este último caso, los valores se
deben disponer de forma coherente con el nuevo orden que hemos impuesto.

INSERT INTO Banco VALUES (“B15”, “Banco de los trabajadores”, “25 av. Norte,
#4678”)

O Bien:

INSERT INTO Banco (domicilio, nombre, codbanco) VALUES ('25 av. Norte,
#4678','Banco Azul', 'B16')

3.2.2. Para insertar Registros de otra Tabla:

En este caso la sintaxis es:

INSERT INTO Tabla [IN base_externa] (campo1, campo2, ..., campoN)

SELECT TablaOrigen.campo1, TablaOrigen.campo2, ..., TablaOrigen.campoN FROM


TablaOrigen

Página 19 de 23 Ciclo II-2019


En este caso se seleccionarán los campos 1,2, ..., n de la tabla origen y se grabarán en los
campos 1,2,.., n de la Tabla. La condición SELECT puede incluir la cláusula WHERE para
filtrar los registros a copiar. Si Tabla y TablaOrigen poseen la misma estructura podemos
simplificar la sintaxis a:

INSERT INTO Tabla SELECT TablaOrigen.* FROM TablaOrigen

De esta forma los campos de TablaOrigen se grabarán en Tabla, para realizar esta
operación es necesario que todos los campos de TablaOrigen estén contenidos con igual
nombre en Tabla. Con otras palabras que Tabla posea todos los campos de TablaOrigen
(igual nombre e igual tipo).

En este tipo de consulta hay que tener especial atención con los campos contadores o
autonuméricos puesto que al insertar un valor en un campo de este tipo se escribe el valor
que contenga su campo homólogo en la tabla origen, no incrementándose como le
corresponde.

Se puede utilizar la instrucción INSERT INTO para agregar un registro único a una tabla,
utilizando la sintaxis de la consulta de adición de registro único tal y como se mostró
anteriormente. En este caso, su código específico, el nombre y el valor de cada campo del
registro. Debe especificar cada uno de los campos del registro al que se le va a asignar un
valor así como el valor para dicho campo. Cuando no se especifica dicho campo, se inserta
el valor predeterminado o Null. Los registros se agregan al final de la tabla.

También se puede utilizar INSERT INTO para agregar un conjunto de registros


pertenecientes a otra tabla o consulta utilizando la cláusula SELECT ... FROM como se
mostró anteriormente en la sintaxis de la consulta de adición de múltiples registros. En este
caso la cláusula SELECT especifica los campos que se van a agregar en la tabla destino
especificada.

La tabla destino u origen puede especificar una tabla o una consulta.

Página 20 de 23 Ciclo II-2019


Si la tabla destino contiene una clave principal, hay que asegurarse que es única, y con
valores no-Null ; si no es así, no se agregarán los registros. Si se agregan registros a una
tabla con un campo Contador, no se debe incluir el campo Contador en la consulta. Se puede
emplear la cláusula IN para agregar registros a una tabla en otra base de datos.

Se pueden averiguar los registros que se agregarán en la consulta ejecutando primero una
consulta de selección que utilice el mismo criterio de selección y ver el resultado. Una
consulta de adición copia los registros de una o más tablas en otra. Las tablas que contienen
los registros que se van a agregar no se verán afectadas por la consulta de adición. En lugar
de agregar registros existentes en otra tabla, se puede especificar los valores de cada campo
en un nuevo registro utilizando la cláusula VALUES. Si se omite la lista de campos, la
cláusula VALUES debe incluir un valor para cada campo de la tabla, de otra forma fallará
INSERT.

INSERT INTO Clientes SELECT Clientes_Viejos.* FROM Clientes_Nuevos;

INSERT INTO Empleados (Nombre, Apellidos, Cargo) VALUES ('Luis', 'Sánchez',


'Gerente');

INSERT INTO Empleados SELECT Vendedores.* FROM Vendedores WHERE


Fecha_Contratacion < Now() - 30;

En la tabla BANCO, se desea insertar todos los registros almacenados en una tabla llamada
BANCONEW .

La sintaxis seria la siguiente:

INSERT INTO banco SELECT banconew.* FROM banconew;

Página 21 de 23 Ciclo II-2019


Al ejecutar la consulta le parecerá el siguiente mensaje:

3.3. Consultas de actualización: UPDATE

Crea una consulta de actualización que cambia los valores de los campos de una tabla
especificada basándose en un criterio específico. Su sintaxis es:

UPDATE Tabla SET Campo1=Valor1, Campo2=Valor2, ... CampoN=ValorN WHERE


Criterio;

UPDATE es especialmente útil cuando se desea cambiar un gran número de registros o


cuando éstos se encuentran en múltiples tablas. Puede cambiar varios campos a la vez.

El ejemplo siguiente incrementa los valores Cantidad pedidos en un 10 por ciento y los
valores Transporte en un 3 por ciento para aquellos que se hayan enviado al Reino
Unido.:

UPDATE [Detalles de Pedido] SET cantidad = cantidad * 1.1, Precio = precio * 1.03
WHERE [Id de Producto] = 1;

Página 22 de 23 Ciclo II-2019


UPDATE no genera ningún resultado. Para saber qué registros se van a cambiar, hay que
examinar primero el resultado de una consulta de selección que utilice el mismo criterio y
después ejecutar la consulta de actualización.

UPDATE Empleado SET Dependencia = "Gerencia" WHERE Dependencia =


"Presidencia";

UPDATE Empleado SET Dependencia = "Administración" WHERE dependencia =


"Administracion";

UPDATE Productos SET [Precio listado] =[Precio listado] * 1.1 WHERE ( [Categoría] =
"bebidas");

Si en una consulta de actualización suprimimos la cláusula WHERE todos los registros de


la tabla señalada serán actualizados.

UPDATE Empleados SET Salario = Salario * 1.1

Página 23 de 23 Ciclo II-2019

También podría gustarte