SQL Server 2008 R2
Clase 3
MANIPULACIÓN DE DATOS
o Datos Numéricos: Operadores Aritméticos o Conversión de datos
FILTRANDO DATOS A TRAVES DE CONDICIONES DE BÚSQUEDA
o Cláusula WHERE o Cláusula BETWEEN o Cláusula IN o Cláusula LIKE
o Valores NULL o Operadores Lógicos AND y OR o Cláusula DISTINCT o Cláusula ORDER
RELACIONANDO Y/O RECUPERARANDO INFORMACIÓN RELACIONANDO DOS O MAS TABLAS
o JOINS o INNER JOINS o OUTER JOINS o LEFT OUTER JOINS
o RIGHT OUTER JOINS o FULL JOINS o CROSS JOINS o JOINS con más de dos tablas
o SELF JOINS
SQL Server 2008 R2
Clase 3… antes un repaso
SELECT es el comando utilizado para recuprar datos de una o más {tablas y/o vistas}
Tabla Clientes La estructura básica de un SELECT tiene los siguientes elementos:
SELECT [* | enumeración de columnas separadas por coma]
FROM nombreDeTabla
SELECT *
FROM Clientes /* recupera todos los datos de la tabla con su nombre de columna
original*/
• Puedo crear alias con la palabra
SELECT ApellidoRzSocial AS 'Apellido o Razon Social', reservada AS (no es obligatorio)
IdCliente AS [Numero de Cliente], • Si uso alias con palabras que contienen
espacios debo usar [] o ‘ ‘
FechaBaja 'Fecha de Baja',
' Valor fijo‘ Literal
FROM Clientes
Importante:
Siempre se debe buscar de usar una indentación clara
Para favorecer la lectura de la consulta
SQL Server 2008 R2
Datos numéricos exactos:
Numeric De- 10^38 +1 a 10^38 – 1 Int De -2^31 a 2^31-1
Numeric (precision,escala) Entero simple con signo
NUMERIC(5,2) 5 digitos como maximo de los cuales 2 reservo para decimal
Bit [1|0 true |false] Bigint De -2^63 a 2^63-1
Decimal idem Numeric Smallint De -2^15 a 2^15-1
Money y Smallmoney tienen una precisión de una diezmilésima de las unidades monetarias que representan.
Por ejemplo, 2.15 puede especificar 2 dólares y 15 centavos.
Tinyint De 0 a 255 entero sin signo
Datos numéricos inexactos:
Float y Real: Se utilizan con datos numéricos de coma flotante. No se pueden representar todos los valores del
rango con exactitud. Ej float(53) donde 53 es la mantisa del numero en notación científica.
SQL Server 2008 R2
Operadores Aritméticos:
+ operador suma - operador resta * operador multiplicación / operador división % operador resto
SqlServer lleva las operaciones al tipo de datos
de mayor precision de los operandos
SQL Server 2008 R2
Conversión de datos: Sql permite realizar gran variedad de conversiones de datos, desde correcciones de precisión hasta
convertir datos numéricos y fechas en String, etc. Los comandos utilizados a tal efecto son: CAST y CONVERT, en menor
medida tambien STR
CAST: CAST(ExpresionAConvertir AS TipoDeDatoDeseado[longitud])
CONVERT: CONVERT(TipoDeDatoDeseado[longitud], Expresiona Convertir [, estilo]) ****El estilo se usa mayormente para fechas,
SQL Server 2008 R2
Clausula WHERE es la aliada y complemento de toda instrucción donde se necesite incorporar filtros “condiciones” a las
consultas o manipulacion de datos.
Sintaxis: WHERE <condicion de búsqueda>
a) Condición simple:
b) B. Buscar las filas que contienen un valor como una parte de una cadena
SQL Server 2008 R2
c) Buscar filas utilizando un operador de comparación
d). Buscar las filas que tienen un valor comprendido entre dos valores
e) Buscar las filas que están en una lista de valores
SQL Server 2008 R2
OPERADORES LOGICOS OR INCLUYENTE
AND EXCLUYENTE
f) Buscar las filas que cumplen alguna de dos condiciones
g) Buscar las filas que deben cumplir varias condiciones
SQL Server 2008 R2
Casos especiales: BUSQUEDA DE VALORES NULL.
El valor NULL significa la no existencia de dato. No se debe confundir con vacío que es un dato de tipo char.
NULL puede estar en todos los tipos de datos numéricos, fechas, cadenas de texto, por citar algunos. Por esta razón
tiene un operador propio para hacer las comparaciones: IS NULL para saber si un valor es nulo o IS NOT NULL para saber
que no lo es.
SQL Server 2008 R2
Casos especiales: FILTROS DISTINCT / TOP
EL filtro DISTINCT se usa para evitar informar repeticiones de registros duplicados al momento de obtener los datos
consultados (filtro pos consulta).
Para evitar el problema anterior puedo usar DISTINCT, este modificador de la consulta siempre tiene que anteceder a la
primer columna del SELECT.
Otra herramienta que tenemos el TOP que nos sirve para indicarle al motor de la base de datos que cantidad de
registros devolvernos.
SQL Server 2008 R2
Definiendo Ordenamiento, claúsula ORDER BY
Tiene como objetivo ordenar el conjunto de resultados de una consulta por la lista de columnas especificada y,
opcionalmente, limitar las filas devueltas a un intervalo especificado. El orden en que se devuelven las filas en un
conjunto de resultados no se puede garantizar, a menos que se especifique una cláusula ORDER BY.
Como vemos se puede ordenar especificando:
• Nombre de columna,
• Número de columna en SELECT
• Por nombre del Alias
• Combinación de las tres anteriores
SQL Server 2008 R2
JOINS….. UNIENDO TABLAS Y CONSULTAS
Las combinaciones permiten recuperar datos de dos o más tablas según las relaciones lógicas entre ellas.
Las combinaciones indican cómo debe usar Microsoft SQL Server los datos de una tabla para seleccionar las filas de otra
tabla.
Una condición de combinación define la forma en la que dos tablas se relacionan en una consulta al Especificar la
columna de cada tabla que debe usarse para la combinación.
Una condición de combinación típica especifica una clave externa de una tabla y su clave asociada en otra tabla.
OTRA VISION QUE PUEDE AYUDAR A PENSAR EN COMO UNIR LAS TABLAS ES PENSARLOS COMO INTERSECCIONES,
UNIONES Y COMPLEMENTOS DE CONJUNTOS….
SQL Server 2008 R2
INNER JOIN LA INTERSECCION
Es el tipo de combinación mas usada. Sólo devuelve las filas en las que haya un valor igual en la/s columna/s de la
combinación. COINCIDENCIA TOTAL ENTRE TODAS LAS COLUMNAS DE COMBINACION.
Para resolver las combinaciones en general es necesario incorporar alias de tablas para saber determinar a que tabla
pertenece cada columna. En este ejemplo usamos alias c para la tabla Clientes y pr para la tabla Provincias.
SELECT [Link],
[Link] Alias de tabla
FROM Clientes c
Columnas de combinación (siempre conviene
INNER JOIN Provincias pr
Igualarlas según el orden de aparición de las tablas
ON [Link] = [Link]
Desde el FROM hasta el ultimo JOIN)
WHERE [Link] LIKE '%MART%'
SQL Server 2008 R2
LEFT JOIN CONSERVA LA TABLA PRECEDENTE (A IZQUIERDA)
Este tipo de combinación se usa cuando se necesita unir una tabla con otra que probablemente no tiene todos los datos
que se pretenden combinar, posibilitando mantener los datos de las tablas o combinaciones que anteceden a su uso
(Izquierda).
La última fila, en las últimas dos columnas contienes valores nulos debido a que no existen pedidos para el producto 1183
SQL Server 2008 R2
RIGHT JOIN CONSERVA LA TABLA SIGUIENTE (A DERECHA)
Este tipo de combinación se usa cuando se necesita unir una tabla con otra que probablemente no tiene mas datos que
se los que se pueden combinar, posibilitando mantener los datos de las tablas o combinaciones que preceden
(Derecha).
Vamos a combinar los clientes con las provincias utilzando como relación la columna idProvincia, el resultado deberá
Contener por el tipo de consulta RIGHT JOIN todos los resultados de la tabla derecha, en este caso Provincias.
En otras palabras es como decir traeme todas las provincias y los clientes que están en ellas, incluyendo aquellas provincias
que no tienen clientes.
SQL Server 2008 R2
FULL JOIN CONSERVA TODOS LOS DATOS DE AMBAS = (UNION DE CONJUNTOS)
Este tipo de combinación se usa cuando se necesita unir TODOS los registros o filas de ambas tablas de la combinación,
completando con valores NULL de una tabla o de la otra en los casos que no hay coincidencia.
Vamos a combinar los detalles de los pedidos con todos nestros productos. El resultado es la unión de ambas tablas.
El resultado de esta combinacion nunca el será mayor que la suma de sus registros.
Como vemos en la fila 77 y 78 se devolvieron productos que no están
en ningún pedido.
SQL Server 2008 R2
CROSS JOIN TODOS CONTRA TODOS…Producto cartesiano de dos tablas.
Este tipo de combinación se usa cuando se necesita unir TODOS los registros o filas de una table contra TODOS los
registro de la otra tablas. La cantidad o CARDINALIDAD del resultado se obtiene de multiplicar los registros de la primer
tabla por los registros de la segunda.
Como observamos en la consulta anterior, se devolvieron 380544 filas, lo que implica que se hizo el producto cartesiano
de 991 clientes y 384 productos
SQL Server 2008 R2
JOIN’s Por lo general cuando necesitamos obtener Información es altamente probable que tengamos que consultar
mas de una tabla. En esos casos necesitaremos conocer el MODELO (como están relacionadas las tablas entre sí)
En el siguiente supuesto queremos traer todos los pedidos cargados, tenemos que tener en cuenta que no todos tienen
un detalle asociado. Se pide el número de pedido, el apellido del cliente que lo solicitó, la descripción de la provincial
del cliente y en caso que haya detalle la descripción y cantidad de producto solicitada,
SQL Server 2008 R2
SELF JOIN No es una nueva clase de join sino una técnica para combinar una tabla consigo misma. El ejemplo que se
muestra a continuacion es solo a efectos pedagogicos ya que el mismo resultado podria obtenerse de otra manera mas
eficiente.(se usa el los diferentes join que se requieran INNER / LEFT / RIGHT / FULL / CROSS)
SQL Server 2008 R2
CLASE 4
SUB CONSULTAS Se trata de una consulta que se escribe dentro de otra.
La sintáxis de una consulta es idéntica a las consultas “NORMALES”, excepto que las subconsultas por estar dentro de
otras siempre van entre paréntesis.
PRIMER CASO SUB CONSULTA ANIDADA
Este tipo de consulta se hace por cada registro que devuelve
la consulta principal “NORMAL”
SQL Server 2008 R2
SEGUNDO CASO SUB CONSULTA FILTRADA por IN o NOT IN
La primer consulta devuelve los primeros 5 clientes que hicieron un pedido
La segunda consulta devuelve los primeros 5 clientes que no realizaron un pedido
SQL Server 2008 R2
TERCER CASO SUB CONSULTA PARA COMPROBACION DE EXISTENCIA – EXISTS | NOT EXISTS
La primer consulta devuelve los primeros 5 clientes que EXISTEN en la tabla
De pedidos y cuya fecha de baja es diferente a NULL
La segunda consulta devuelve los primeros 5 clientes que EXISTEN en la tabla
De pedidos y cuya fecha de baja es NULL
SQL Server 2008 R2
CUARTO CASO – SUB CONSULTAS CORRELACIONADAS
La primer consulta busca los clientes que están dados de baja, una
vez que los obtiene pasa a buscar los pedidos de esos clientes que
tambien están dados de baja.
Las otras dos consultas son la comprobación de la primera
SQL Server 2008 R2
UNION / UNION ALL / INTERSECT / EXCEPT
UNION
Especifica que se deben combinar varios conjuntos de resultados para ser devueltos como un solo conjunto de resultados.
UNION ALL
Agrega todas las filas a los resultados. Incluye las filas duplicadas. Si no se especifica, las filas duplicadas se quitan.
EXCEPT devuelve filas distintas de la consulta de entrada izquierda que no son de salida en la consulta de entrada
derecha.(Excluye los resultaos de la consulta anterior)
INTERSECT devuelve filas distintas que son de salida en las consultas de entrada izquierda y derecha. (coincidentes)
Las reglas básicas para combinar los conjuntos de resultados de dos consultas que utilizan EXCEPT o INTERSECT son las
siguientes:
El número y el orden de las columnas debe ser el mismo en todas las consultas.
Los tipos de datos deben ser compatibles.
UPDATE (Transact-SQL)
Es utilizado para modificar registros existentes en una tabla o en un vista (MS SQL Server)
Sintaxis SQL UPDATE
UPDATE nombre_tabla
SET columna1=valor1,column2=valor2,...
WHERE alguna_columna=algun_valor;
Base para pruebas
A continuación, una selección de la tabla “Clientes”
UPDATE (Transact-SQL)
Ejemplo SQL UPDATE
Se supone que se quiere modificar al cliente “JOSE RICARDO PRINA” y actualizar la calle y el código postal.
Se utiliza, entonces, la siguiente declaración:
UPDATE Clientes
SET Calle=‘CHARCAS 348’, CodigoPostal=‘1325’
WHERE IdCliente=‘284’;
Ahora, una selección de la tabla “Clientes” se verá así:
¡ATENCIÓN! ¡CUIDADO!
Si se omite la cláusula WHERE, ¿qué sucede?
UPDATE Clientes
SET Calle=‘CHARCAS 348’, CodigoPostal=‘1325’;
DELETE (Transact-SQL)
Se utiliza para eliminar filas de una tabla
Sintaxis SQL DELETE
DELETE FROM nombre_tabla
WHERE alguna_columna=algun_valor;
Ejemplo SQL DELETE
Se busca eliminar al cliente “PRINA” de la table Clientes
DELETE FROM Clientes
WHERE IdCliente=‘284’;
¡ATENCIÓN! ¡CUIDADO!
Si se omite la cláusula WHERE, ¿qué sucede?
(y no existe “deshacer”)
TRUNCATE (Transact-SQL)
¿Qué pasa si queremos deshacernos de los datos en una tabla –pero no de la tabla en sí-?
Es decir, si buscamos “vaciarla”.
Sintaxis TRUNCATE
TRUNCATE TABLE nombre_table;
DROP (Transact-SQL)
Se utiliza para eliminar una tabla completa
Sintaxis DROP
DROP TABLE nombre_table;
TRUNCATE vs DELETE
• Equivalentes a nivel lógico
• No equivalentes a nivel físico
• Clásula de condición WHERE
• Eliminación de filas (una por vez vs. todas)
• Performance
• Rollback
FUNCIONES DE AGREGACIÓN
Son las funciones que devuelven un único valor, calculado a partir de varios valores de una columna.
• AVG (): Devuelve el valor promedio
• COUNT (): Calcula el número de filas
• FIRST (): Devuelve el primer valor
• LAST (): Devuelve el ultimo valor
• MAX (): Devuelve el valor más grande
• MIN (): Devuelve el valor más pequeño
• SUM (): Calcula la sumatoria
FUNCIÓN AVG ()
Devuelve el valor promedio de una columna numérica
Sintaxis AVG ()
SELECT AVG (nombre_columna) FROM Nombre_table;
Ejemplos
A continuación, se obtiene el valor promedio de la columna precio, de la tabla Productos:
SELECT AVG(Precio) AS PrecioPromedio FROM Productos
El siguiente ejemplo permite conocer los productos cuyo precio está por encima del
promedio. El resultado ordenado en forma ascendente de acuerdo a su precio.
SELECT Descripcion, Precio FROM Productos
WHERE Precio>(SELECT AVG(Precio) FROM Productos)
ORDER BY Precio ASC
FUNCIÓN COUNT ()
Devuelve el número de filas según criterio específico
Sintaxis COUNT ()
SELECT COUNT(nombre_columna) FROM Nombre_table;
Ejemplos
SELECT COUNT (IdProducto) FROM Productos
WHERE Precio>(SELECT AVG(Precio) FROM Productos);
SELECT COUNT (IdProducto) AS CANTIDAD_PRODUCTOS FROM Productos;
FUNCIONES FIRST & LAST
Devuelven primer y último valor
Ejemplos
SELECT TOP 1 Descripcion, Precio from Productos
ORDER BY Descripcion
SELECT TOP 1 Descripcion, Precio from Productos
ORDER BY Descripcion DESC
FUNCIONES MIN & MAX
Devuelven los valores más pequeños o más grandes de una columna seleccionada
Ejemplos
SELECT MAX(Precio) AS PrecioMásAlto FROM Productos;
SELECT MIN(Precio) AS PrecioMásBajo FROM Productos;
FUNCIÓN SUM ()
Devuelve la suma de todos los valores indicados
Sintaxis SUM ()
SELECT SUM(column_name) FROM nombre_tabla;
Ejemplo
A continuación, se buscar obtener la cantidad de productos solicitados
SELECT SUM(CantidadSolicitada) FROM PedidoDetalle;
SELECT SUM(CantidadSolicitada) AS CantidadTotal FROM PedidoDetalle;
REPASO FUNCIONES AGREGADAS
MS SQL Server posee funciones que permiten contar registros, calcular sumas, promedios, obtener valores mínimos y
máximos.
Se pueden utilizer en una instrucción SELECT y son combinables con la cláusula “GROUP BY”
Existen relaciones entre las funciones y los tipos de datos
• COUNT: se puede emplear con cualquier tipo de dato
• MIN y MAX: con cualquier tipo de dato
• SUM y AVG: solo en campos de tipo numérico
Tratamiento de los valores nulos
COUNT (*): incluye los valores nulos de los campos
Resto de las funciones: excluyen los valores nulos de los campos
RESUMIENDO DATOS: GROUP BY
Las funciones de agregado permiten realizar varios cálculos operando con conjuntos de registros.
La declaración GROUP BY es utilizada en conjunto con las funciones agregadas para agrupar el conjunto
resultante en una o más columnas.
Las funciones de agregado, en soledad, producen un valor de resumen para todos los registros de un campo.
¿Cómo generar valores de resumen para un solo campo? Combinando las funciones de agregado con la
cláusula “GROUP BY", que agrupa registros para consultas detalladas.
Sintaxis GROUP BY
SELECT columna, función_agregada(columna)
FROM tabla
WHERE columna operador valor
GROUP BY columna;
RESUMIENDO DATOS: HAVING
Mientras la cláusula WHERE permite seleccionar (o rechazar) registros individuales; la cláusula "having" permite la misma
acción pero con grupos de registros.
Entonces:
Especifica una condición de búsqueda para un grupo o agregado.
HAVING solo se puede utilizar con la instrucción SELECT.
Normalmente, HAVING se utiliza en una cláusula GROUP BY.
Cuando no se utiliza GROUP BY, HAVING se comporta como una cláusula WHERE (M$)
No confundir las cláusulas WHERE y HAVING. Una establece condiciones para la selección de registros de un SELECT; la
segunda condiciones para la selección de registros de una salida GROUP BY.
Puede utilizarse con funciones de agrupamiento (la cláusula WHERE no puede hacer esto)
Sintaxis HAVING
SELECT columna1, FUNCIÓN(columna2)
FROM tabla
WHERE columna2 operador valor
GROUP BY columna1
HAVING FUNCIÓN(columna) operador valor;
Entonces, se usa la claúsula HAVING para restringir las filas que devuelve una salida GROUP BY.
(Va siempre después de la cláusula GROUP BY antes de la cláusula ORDER BY si la hubiere.)
COMPUTE & COMPUTE BY
Son cláusulas que generan totales que aparecen en columnas extras al final del resultado.
Se utilizan con las funciones de agrupamiento: avg(), count(), max(), min(), sum().
En la misma instrucción se puede incluir varias cláusulas “comute?
Sintaxis COMPUTE
SELECT columna1, columna2
FROM tabla
COMPUTE FUNCION(columna1)
Entonces, se usa la claúsula HAVING para restringir las filas que devuelve una salida GROUP BY.
(Va siempre después de la cláusula GROUP BY antes de la cláusula ORDER BY si la hubiere.)
COMPUTE & COMPUTE BY
Son cláusulas que generan totales que aparecen en columnas extras al final del resultado.
Se utilizan con las funciones de agrupamiento: avg(), count(), max(), min(), sum().
En la misma instrucción se puede incluir varias cláusulas ‘compute’
Sintaxis COMPUTE & COMPUTE BY
SELECT columna1, columna2 FROM tabla
order by columna1, columna2
COMPUTE FUNCION1(columna1), FUNCION2(columna2)
by columna1, columna2
"Compute by" genera cortes de control y subtotales.
Con "compute by" se DEBE usar también la cláusula "order by" y utilizar los mismos campos (o menos) y en mismo orden.
Listando varios campos luego del "by" corta un grupo en subgrupos y aplica la función de agregado en cada nivel de
agrupamiento.
IDENTITY
• Un campo numérico puede tener un atributo extra "identity". Los valores de un campo con este atributo genera valores
secuenciales que se inician en 1 y se incrementan en 1 automáticamente.
• Se usa en campos correspondientes a codigos de identificación para generar valores unicos para cada nuevo registro que se
inserta
• El campo debe ser entero
• Cuando un campo tiene el atributo "identity" no se puede ingresar valor para él, porque se inserta automáticamente tomando el
último valor como referencia, o 1 si es el primero.
• Si se elimina el último registro ingresado (por ejemplo 3) y luego se inserta otro registro, SQL Server seguirá la secuencia, es decir,
colocará el valor "4".
create table libros(
codigo int identity,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio float
);
SUMARIZANDO: ROLL UP
El operador "rollup" resume valores de grupos.
Es posible incluir varias funciones de agrupamiento
Por cada agrupación aparece una fila extra con valores de resumen
Con "rollup" se puede emplear "where" y "having«
Entonces, es un modificador para GROUP BY
Sintaxis ROLL UP
SELECT columna, FUNCION(columna) FROM tabla
group by columna WITH ROLL UP
SUMARIZANDO: CUBE
Genera filas de resumen de subgrupos para todas las combinaciones posibles de los valores de los campos por los que
agrupamos
Se pueden colocar hasta 10 campos en el "group by".
Con "cube" se puede emplear "where" y "having"
Sintaxis ROLL UP
SELECT columna, FUNCION(columna) FROM tabla
group by columna WITH ROLL UP
SUMARIZANDO: CUBE
Mientras que “rollup” agrega filas extras resumiendo resultados por grupo y subgrupo…
“cube” genera filas de resumen de subgrupos para todas las combinaciones posibles de valores de campos
Se pueden colocar hasta 10 campos en el “group by”
Se pueden emplear “where” y “having”
Sintaxis CUBE
SELECT columna, FUNCION(columna) FROM tabla
group by columna WITH CUBE
Genera un conjunto de resultos que es un cubo multidimensional
Cuya expansión se basa en las columnas que se deseen analizar
GROUPING
Función utilizada con operadores “rollup” y “cube”
Se utiliza para distinguir, en el resultado, valores de detalle y de resumen
Permite diferenciar si valores “null” son valores de tablas o filas generadas por los operadores “rollup” o “cube”
Genera una nueva columna por cada “grouping”
Valor 1 -> valores de resumen “rollup” o “cube”
Sintaxis Grouping
SELECT columna, FUNCION(columna)
GROUPING(columna) as alias
FROM tabla
group by columna with rollup;
Se utiliza cuando no se puede distinguir la fila generada por “rollup” o “cube” de otras (null)
Por lo tanto, si se utiliza “cube” o “rollup” y los campos empleados para agrupar admiten valores null -> utilizar “grouping”
ÍNDICES
SQL Server accede a los datos de dos maneras: Recorriendo tablas o empleando índices
Es decir, registro x registro vs. estructura de árbol del índice
Una tabla se indexa por un campo (o varios)
Eficientizan las búsquedas -> Obejtivo es mejorar performance
Genera espacio en disco
Mejores índices=creados con campos con valores únicos
Campos a indexar: pk, fk o campos que combinan tablas
SQL Server los crea automáticamente bajo ciertas restricciones
Dos tipos: agrupados y no agrupados
Permiten el acceso directo
Aceleren búsquedas, consultas y otras operaciones
Optimizan rendimiento general
ÍNDICES AGRUPADOS (cluster)
Similar a guía telefónica
Para campos utilizados por búsquedas con frecuencia
Sólo puede haber 1 índice agrupado
Modifican el orden físico de los registros, ordenándolos secuencialmente
-> El orden lógico de los valores de clave determina el orden físico de las filas de la tabla
ÍNDICES NO AGRUPADOS
Índice de un libro
No están ordenados físicas -> estructura adicional
Los punteros indicar el lugar de almacenamiento
Para cuando se realizan distintos tipos de búsqueda frecuentes
Pueden existir hasta 249 índices no agrupados
Dif.básica-> Los agrupados están ordenados y almacenados en forma secuencial en
función de su clave
CONSIDERACIONES (al crearlos)
Evitar crear demasiada cantidad (sobre todo en tablas que se actualizan con mucha
frecuencia)
Tablas con poca actualización & gran volumen de datos -> mayor número de índices
Gran número de índices -> SELECT
Sintaxis INDICES (creación)
CREATE INDEX nombre_indice
ON tabla (columna)
VISTAS
Es una alternativa para mostrar datos de varias tablas
Tabla virtual que almacena una consulta
Sus datos no son objeto de la DB
En gral., se puede nombrar cualquier consulta y almacenarla como una vista
permiten
Ocultar información
Simplificar la administración de la seguridad
Mejorar el rendimiento (evitando tipear instrucciones repetidamente)
Vista= subconjunto de registros y campos de una tabla, unión de varias tablas, combinación,
subconjunto de otra vista, combinación de vistas y tablas
VISTAS (cont.)
Sintaxis VISTAS (creación)
create view NOMBRE_VISTA as
SETENCIA_SELECT
from TABLA
VISTAS (cont.)
Cómo obtener información
Cifrado (with encryption)
Eliminación
Exists & Not Exists
Operadores para determinar si hay o no datos en una lista de valores
Se suelen utilizar en subconsultas (interior) para restrigir el resultado de la consulta (exterior).
Sintaxis (ejemplo)
select cliente,numero
from facturas as f
where exists
(select *from Detalles as d
where [Link]=[Link]
and [Link]='lapiz');
Store Procedures
SQL ofrece dos alternativas para asegurar la integridad de los datos:
Declarativa (constraints, defaults, rules)
Procedimental (sp, trigger)
SP: Conjunto de instrucciones que constituyen una unidad y que
están almacenados en el servidor.
Encapsulan tareas repetitivas
Tipos: del sistema, locales, temporales, y extendidos
Ventajas: reducen tráfico entre cliente & servidor, seguridad, aúnan el acceso y las modificaciones.
Store Procedures: Creación
SQL analiza las instrucciones desde la sintaxis -> nombre en tabla “sysobjects”, contenido en
“syscomments”. Si hay error, no se crea.
Se pueden referenciar objetos no creados…pero deben existir al momento de ejecutar!
Simulan conjunto de referencias a tablas, vistas, funciones definidas por el usuario.
Pueden incluir todo tipo de instrucción menos: create default, create rule, etc.
Tablas temporales y variables con duración = a la ejecución del SP.
Ya hemos utilizado SPs (sp_help, sp_columns, etc.)
Sintaxis (crear)
Create procedure NOMBREPROCEDIMIENTO
As INSTRUCCIONES
Store Procedures (parámetros de entrada)
Permiten pasar info a un proc
Se deben declarar variables como parámetros en la creación
Son locales al procedimiento
Se pueden declarar varios
El valor por defecto puede ser null o una constante
Al ejecutar el proc, los valores puede pasarme por posición o por nombre (por ej., segundo
valor)
Sintaxis
Create procedure NOMBREPROCEDIMIENTO
@NOMBREPARÁMETRO TIPO =VALOR POR DEFECTO
As INSTRUCCIONES
Store Procedures (parámetros de salida)
Se utilizan para devolver información
Se debe declarar la variable como tipo “output”
Sintaxis
create procedure NOMBREPROCEDIMIENTO
@PARAMETROENTRADA TIPO =VALORPORDEFECTO,
@PARAMETROSALIDA TIPO=VALORPORDEFECTO output
as
SENTENCIAS
select @PARAMETROSALIDA=SENTENCIAS;
Store Procedures (insert)
Se puede ingresar datos en una tabla con el resultado devuelto por un SP
insert into TABLA exec SP_NAME
Store Procedures (anidados)
Un SP puede invocar a otro SP
Si A llama a B, B debe existir al crear A
B tiene acceso a todos los objetos que cree A
insert into TABLA exec SP_NAME
Triggers
Es un tipo de SP que se ejecuta cuando se intenta modificar datos de una tabla (o vista)
Se definen para una tabla o vista específicas.
Se crean por integridad y coherencia entre los datos entre distintas tablas
Se dispara automáticamente cuando se intenta insert, update o delete
Vs SP=no pueden ser invocados directamente
No reciben ni retornan parametros
Se utilizan para integridad de los datos, no para obtener resultados de consultas
Sintaxis
create trigger NOMBREDISPARADOR
on NOMBRETABLA
for EVENTO- insert, update o delete
as
SENTENCIAS
Triggers
Es un tipo de SP que se ejecuta cuando se intenta modificar datos de una tabla (o vista)
Se definen para una tabla o vista específicas.
Se crean por integridad y coherencia entre los datos entre distintas tablas
Se dispara automáticamente cuando se intenta insert, update o delete
Vs SP=no pueden ser invocados directamente
No reciben ni retornan parametros
Se utilizan para integridad de los datos, no para obtener resultados de consultas
Sintaxis
create trigger NOMBREDISPARADOR
on NOMBRETABLA
for EVENTO- insert, update o delete
as
SENTENCIAS
Triggers (cont.) + trigger inserted
“Create trigger” es la primer sentencia del bloque y sólo se pueden aplicar a una tabla
Se crean solamente en la base de datos actual pero pueden hacer referencia a objetos de
otras bases.
No está permitido: create/alter/drop/load database, disk init, disk resize y otros.
Se pueden crear varios triggers para cada evento (insert,update, delete) para una misma
tabla
Dentro del trigger, se accede a tabla virtual “inserted” (estructura=tabla en la que se define
el trigger) -> guarda los valores nuevos de los registros
Triggers: ON, Instead Of, After
Se puede especificar el momento del inicio del trigger
Si no -> After (equivalente a FOR)
Con “Instead Of” -> sólo un trigger por evento
Modelo Cliente/Servidor
Arquitectura donde un programa (el cliente) realiza peticiones a otro programa (el servidor)
que le da respuesta
Servidores web, fileserver, servidores de correo, de bases de datos, etc.
La arquitectura básica es la misma en todos.
Características de un cliente
Quien inicia, rol activo.
Espera y recibe las respuestas del servidor
Por lo Gral., puede conectarse a varios servidores a la vez.
Interactúa directamente con los usuarios (personas) a través de una interfaz gráfica (GUI)
Características de un servidor
Se inicia y espera a que lleguen peticiones, rol pasivo
Recepción, procesamiento y envío de respuesta al cliente
Aceptan gran número de conexiones concurrentes
Ventajas
Escalabilidad. Se puede aumentar la cant de clientes y servidores, en forma independiente.
Granularidad en Seguridad. SQL permite administrar permisos en todos los niveles: servidor,
tablas, lectura/escritura/ejecución, sp’s, etc.
Herramientas de Administración (SQL Server)
SSMS
SQL Server Profiler
Asistente para la optimización de bases de datos
Herramientas para el símbolo de sistema, como [Link] o [Link]
Complementos de SQL Server Data Tools (SSDT) para MVStudio
SQL Server Management Studio (SSMS)
Entorno integrado de acceso a todos los componentes de SQL Server (config, admin, develop)
Combina herramientas gráficas para desarrolladores y admins
Combina Enterprise Manager, Query Analyzer, Analysis Manager (tools inc. en versiones anteriores)
SQL Server Profiler
Permite realizar seguimientos, analizarlos y reproducir resultados de aquéllos.
Los eventos registrados se guardan en un archivo (log) de seguimiento que poteriormente
se puede anlizar o usar para recrear una serie de pasos específicos
Se utilizar para diagnosticas situaciones o problemas
[Link]
Otras herramientas
Asistente para la optimización del motor
Sqlcmd (utility)
[Link] (utility)
Reporting services
Import/Export Data
Creando Bases de Datos & Archivos
Cuando planificamos una nueva base, considerar:
El número de transacciones / unidad de tiempo
Crecimiento potencial del almacenamiento físico
Hardware (RAM, CPU, redundancia de discos, etc.)
Archivos físicos de una BD
Colecciones de archivos
Tres tipos:
Archivos de datos principales (MDF)
Archivos de datos secundarios (NDF)
Archivos de registro (Log/LDF)
Schemas
Contienen a los objetos creados en una base de datos
Frontera/límite para el espacio de nombres para objetos
Formato: [Link]
Hasta 2012, espacio determinado por el nombre de usuario que lo creo (owner)
Schema DBO & Creación
Contendrá todo usuario que no tenga explícitamente definido un schema predeterminado
Para creación:
Schema DBO & Creación
Contendrá todo usuario que no tenga explícitamente definido un schema predeterminado
Para creación:
Creación de Bases de Datos (transac-SQL)
SP_HELPDB
SP_HELPFILE
DROP DATABASE (eliminación en instancia y archivos físicos)
COLLATION
SnapShots
Vistas inmediatas de sólo lectura de una base de datos
Vista estática congelada en el tiempo
Ahorro de tiempo y storage (vs crear una copia completa de la base)
En un archivo de crecimiento automático.
Con cada modificación de la base original, el snapshot recibe copia de la page original que se
modifica desde que se creó el SS
Si no, se redirige a la base principal
Datos del Sistema
Base de Datos MASTER
Registra toda la información del motor:
Existencia de las demás bases, ubicación archivos + info de inicio de SQL Server
Cuentas de inicio de sesión, servers vinculados, configuración del sistema
¡No se puede iniciar SQL si esta base no está disponible!
Datos del Sistema
Tablas del sistema
SQL Server utilizar el mismo gestor de base de datos para administrarse a sí mismo
Son las tablas subyacentes que almacenan los metadatos
Metadatos: datos que describen otros datos (análogo al uso de índices)