Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Cositas Que Cuestan La Nota Edición LAB
Cositas Que Cuestan La Nota Edición LAB
SUBCONSULTAS
UNA SUBCONSULTA PUEDE ESTAR EN (6):
*WHERE y HAVING de un SELECT principal
*Dentro de otra subconsulta (se admiten hasta 32 niveles de anidación).
*En lugar de una expresión, siempre que devuelvan un solo valor o una lista de
valores.
*Como columna en la lista del SELECT.
*Retornando un conjunto de registros de varios campos en lugar de una tabla (en el FROM) o
para obtener el mismo resultado que una combinación (JOIN).
CARACTERÍSTICAS DE LA SUBCONSULTA(4):
*Debe producir una única columna de datos como resultados. Esto significa que una
subconsulta siempre tiene un único elemento de selección en su cláusula SELECT.
*NO puede ser UNION de varias sentencias SELECT diferentes.
*La cláusula ORDER BY NO puede ser especificada en una subconsulta.
* Los nombres de columna que aparecen en una subconsulta pueden referirse a
columnas de tablas en la consulta principal, esto se denomina referencias externas.
Recuerde: cuando lee consignas del estilo “de ese alumno”, “de esa factura” es un
buen indicio de que necesitará una referencia externa.
Ejemplo de una subconsulta como parte de una expresión donde se quiere listar el precio de los
artículos y la diferencia de éste con el precio del artículo más caro:
SELECT descipcion,
precio_unit,(SELECT MAX(pre_unitario) FROM articulos)- pre_unitario
'DIFERENCIA'
FROM artículos
Cuando se usa una subconsulta en una columna, por ejemplo: listar el precio actual de los artículos y el
precio histórico vendido más barato:
SELECT descipcion,
pre_unitario 'precio actual',
(SELECT MIN(pre_unitario)
FROM detalle_facturas d
WHERE d.cod_articulo = a.cod_articulo) 'PRECIO HISTORICO'
FROM artículos a
Ejemplo de WHERE en el UPDATE y DELETE. Para el UPDATE, se quiere aumentar un 5% los precios de
los artículos cuyos precios son inferiores al promedio general.
UPDATE articulos
SET pre_unitario = pre_unitario*1.05
WHERE pre_unitario < (SELECT AVG(pre_unitario)
FROM articulos)
U3
VISTAS
Definición de vista: Una vista ofrece la posibilidad de almacenar una consulta
predefinida como un objeto en una base de datos para usarse posteriormente.
Tabla base: Las tablas consultadas en una vista se denominan tablas base.
Ejemplos de vistas (5):
* Un subconjunto de las filas o columnas de una tabla base.
* Una unión de dos o más tablas base.
* Una combinación de dos o más tablas base.
* Un resumen estadístico de una tabla base.
* Un subconjunto de otra vista o alguna combinación de vistas y tablas base.
Ventajas de usar una vista (5):
*Centrar el interés en los datos de los usuarios: Las vistas crean un entorno controlado
que permite el acceso a datos específicos mientras se oculta el resto. Los usuarios
pueden tratar la presentación de los datos en una vista de forma similar a como lo
hacen en una tabla.
¿Con qué se puede crear una vista?: Con el Asistente para creación de vistas, con el
Administrador corporativo de SQL Server o con Transact-SQL.
*NO se pueden crear vistas temporales ni crear vistas sobre tablas temporales.
¿Y para ver el texto que la define?: Ejecutando el procedimiento almacenado del sistema
"sp_helptext" seguido del nombre de la vista:
sp_helptext NOMBREVISTA;
*La diferencia es que se colocan entre paréntesis los encabezados de las columnas que
aparecerán en la vista. Si no los colocamos y empleamos la sintaxis vista
anteriormente, se emplean los nombres de los campos o alias colocados en el SELECT
que define la vista. Los nombres que se colocan entre paréntesis deben ser tantos
como los campos o expresiones que se definen en la vista.
*Si crea una vista con [SELECT *] y luego agrega campos a la estructura de las tablas
involucradas, los nuevos campos no aparecerán en la vista; esto es porque los campos
se seleccionan al ejecutar CREATE VIEW; debe alterar la vista.
*Pueden generar errores si afectan a campos a las que la vista no hace referencia.
Nota: Cabe recordar que alterar una vista es un dolor de huevos así que recomiendo
humildemente dropearla y crearla nuevamente.
PROCEDIMIENTOS
Definición de procedimiento: Un procedimiento almacenado es un conjunto de
instrucciones a las que se les da un nombre y se almacenan en el servidor. Permiten
encapsular tareas repetitivas. Recuerde: Un procedimiento almacenado puede hacer
referencia a objetos que no existen al momento de crearlo. Los objetos deben existir
cuando se ejecute el procedimiento almacenado.
Tipos de procedimientos (5):
*Del sistema: Están almacenados en la base de datos "master" y llevan el prefijo "sp_".
*Locales: Los crea el usuario.
*Temporales: pueden ser locales, cuyos nombres comienzan con un signo numeral (#),
o globales, cuyos nombres comienzan con 2 signos numeral (##). Los procedimientos
almacenados temporales locales están disponibles en la sesión de un solo usuario y se
eliminan automáticamente al finalizar la sesión; los globales están disponibles en las
sesiones de todos los usuarios.
*Remotos: Son una característica anterior de SQL Server.
*Extendidos: Se implementan como bibliotecas de vínculos dinámicos (DLL, Dynamic-
Link Libraries), se ejecutan fuera del entorno de SQL Server. Generalmente llevan el
prefijo "xp_".
¿De qué son capaces? (4):
*Contener instrucciones que realizan operaciones en la base de datos y llamar a otros
procedimientos almacenados.
*Aceptar parámetros de entrada.
*Devolver varios parámetros de salida.
*Devolver un valor de estado a un procedimiento.
Ventajas de los procedimientos (6):
*Comparten la lógica de la aplicación con las otras aplicaciones, con lo cual el acceso y
las modificaciones de los datos se hacen en un solo sitio.
*Permiten realizar todas las operaciones que los usuarios necesitan evitando que
tengan acceso directo a las tablas.
*Reducen el tráfico de red; en vez de enviar muchas instrucciones, los usuarios
realizan operaciones enviando una única instrucción.
*Pueden encapsular la funcionalidad del negocio. Las reglas o directivas empresariales
encapsuladas en los procedimientos almacenados se pueden cambiar en una sola
ubicación.
*Apartar a los usuarios de la exposición de los detalles de las tablas de la base de
datos.
*Proporcionar mecanismos de seguridad: los usuarios pueden obtener permiso para
ejecutar un procedimiento almacenado incluso si no tienen permiso de acceso a las
tablas o vistas a las que hace referencia.
Cositas a recordar sobre procedimientos (3):
*Los procedimientos almacenados pueden hacer referencia a tablas, vistas, a
funciones definidas por el usuario, a otros procedimientos almacenados y a tablas
temporales.
*Si un procedimiento almacenado crea una tabla temporal, dicha tabla sólo existe
dentro del procedimiento y desaparece al finalizar el mismo. Lo mismo sucede con las
variables. Las vistas, en cambio, no toman temporales.
* Cuando el procedimiento es ejecutado, deben explicitarse valores para cada uno de
los parámetros (en el orden que fueron definidos), a menos que se haya definido un
valor por defecto, en tal caso, pueden omitirse.
*Los procedimientos se pueden alterar (ALTER) y dropear (DROP) como hemos hecho
con las vistas.
*Estos es una boludez, pero quizá los agarra desprevenidos: podemos abreviar
PROCEDURE y EXECUTE como PROC y EXEC.
*Respetá el tipo de dato. Si lo declaraste como X no lo ejecutes como Y.
Condiciones de anidamiento para un procedimiento (4):
*Los procedimientos almacenados se pueden anidar hasta 32 niveles.
*El nivel actual de anidamiento se almacena en la función del sistema @@nestlevel.
*Si un procedimiento almacenado llama a otro, éste puede obtener acceso a todos los
objetos que cree el primero, incluidas las tablas temporales.
*Los procedimientos almacenados anidados pueden ser recursivos. Por ejemplo, el
procedimiento almacenado A puede llamar al procedimiento almacenado B y éste
puede llamar al procedimiento almacenado A.
Distintos ejemplos de sintaxis para los procedimientos (3): Es muy probable que en el
parcial se juegue con las sintaxis para preguntar si es o no un procedimiento funcional,
por tanto, es necesario saber sus diferentes formas en cuanto a cómo declara las
variables y cómo las ejecuta.
-----------------------------------------------------------
CREATE PROC pa_articulos_precios3
@precio1 money,
@precio2 money
AS
SELECT *
FROM articulos
WHERE pre_unitario BETWEEN @precio1 AND @precio2;
EXEC pa_ articulos_precios3 @precio1 = 50, @precio2 = 100;
----------------------------------------------------------------------
(Procedimientos en el INSERT)
CREATE PROC pa_ofertas
AS
SELECT titulo,autor,editorial,precio
FROM libros
WHERE precio < 50;
La siguiente instrucción ingresa en la tabla "ofertas" el resultado del procedimiento "pa_ofertas":
INSERT INTO ofertas EXEC pa_ofertas;
----------------------------------------------------------------------
HASTA LA PRÓXIMAAAAA