Está en la página 1de 28

Gua No.

3 Tpicos Avanzados de Diseo de


Base de Datos con Sql Server
1 COMPRESION DE TABLAS.

Al completar este tema el estudiante estar en capacidad de:

Entender los diferentes tipos de compresin.


Entender cmo comprimir una tabla o ndice.
Determinar cundo comprimir una tabla o ndice.

A menudo omos que el espacio en disco es barato y que no hay que


preocuparse demasiado si las bases de datos estn creciendo a un ritmo
excesivo. Acaba de comprar ms discos. Bueno, lo que la mayora de los
directivos no se dan cuenta es que no estamos hablando de los discos que
usted compra en alguna gran tienda electrnica. Microsoft SQL Server y otros
RDBMS requieren de conjuntos de discos de inmediato. Ese acoplamiento tiene
un sobreprecio en el disco desde la marca ms econmica a menudo sele ser
muy caros. Adems, si debe incluir una alta disponibilidad y recuperacin de
desastres como parte de la topologa, entonces los costos se duplican.

Para compensar algunos de los costos, SQL Server incluye una caracterstica
que le permite comprimir sus datos en los diferentes niveles, especficamente,
tablas e ndices. En realidad se puede comprimir cualquiera de los siguientes:

Una tabla que se almacena como una pila (que no tiene un ndice agrupado)
Una tabla que tiene un ndice agrupado
Un ndice no agrupado
Una vista indexada
Una particin

No slo se puede reducir los requisitos de disco de SQL Server con la


compresin, en la mayora de los casos, tambin se puede mejorar el
rendimiento global de sus subsistemas de disco y los tiempos de consulta. La
tasa de compresin real depende de dos factores principales: caractersticas de
datos y el tipo de datos correspondiente. Aunque no todos los tipos de datos se
ven afectados por la compresin, estos son los tipos de datos afectados.

Smallint, int, bigint, decimal, numeric, real, float, money, smallmoney,


bit, datetime, datetime2, datetimeoffset, char, nchar, binary, rowversion.

SQL Server tiene dos tipos de compresin: datos y copia de seguridad. Esta
gua se concentrara en la compresin de datos.

Nota La compresin de datos slo se admite en la versin Enterprise de SQL


Server 2012.
1 Escuela Tecnolgica Instituto Tcnico Central
Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server

1.1 . Entendiendo la Compresin por Registros.


La gran cosa acerca de la compresin de SQL Server es que es completamente
transparente para las aplicaciones que necesitan acceder a los datos
subyacentes. Aunque la compresin hace cambiar la forma de almacenar
fsicamente los datos, los desarrolladores no tienen que cambiar nada
sintcticamente en su cdigo.

Compresin de registros, por naturaleza, no es un proceso muy complicado.


Bsicamente, se identifica el tipo de datos de cada columna, la convierte en
longitud variable, y, finalmente, reduce la cantidad de almacenamiento
necesaria para slo aquellos que lo necesitan. Como resultado, la compresin
aumenta la cantidad de datos que se pueden almacenar en una pgina.
Adems, puede reducir la cantidad de metadatos asociados a un registro.

Por ejemplo, si tiene una columna que tiene un tipo de datos smallint, por
defecto se asignar 2 bytes de almacenamiento. Sin embargo, el valor
insertado en la columna puede requerir slo 1 byte de almacenamiento. Si ese
es el caso, lo que permite la compresin en esa tabla reduce la cantidad de
almacenamiento asignado a slo lo que se necesita: 1 byte. Este proceso se
repite para cada columna de la tabla o el ndice.

Como se ha dicho, puede comprimir una tabla o ndice. Durante la creacin,


tiene la opcin de especificar una opcin de compresin de los datos dentro de
una tabla. Continuando con la tendencia, puede comprimir los datos con T-SQL
y Microsoft SQL Server Management Studio (SSMS).

Ejercicio No.1.2. Comprimir un ndice no agrupado utilizando


SSMS

Ejercicio No.1.3. Compresin de registros con T-SQL

1.2 Entendiendo la Compresin por Pginas.


Compresin Pgina ampla an ms la compresin de filas mediante la
realizacin de algunos pasos adicionales. Pgina de compresin realiza tres
operaciones:

Compresin de filas
La compresin de prefijo
La compresin de diccionario
2 Escuela Tecnolgica Instituto Tcnico Central
Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
Como puede ver, la compresin de pgina incluye la compresin de filas como
parte de su proceso. Nada cambia con el proceso de compresin de filas que es
slo el primer paso en la compresin de pgina. Despus de la compresin de
filas se ha completado, el siguiente paso es la compresin de prefijo.

Durante este paso, se analizan cada columna en busca de un valor que


reducir el espacio de almacenamiento para cada columna. Una vez que el
valor se identifica, una fila para cada columna se almacena en el encabezado
de la pgina. Toda la informacin se denomina informacin de compresin (IC),
que se almacena por debajo de la cabecera de la pgina. Los valores
identificados (valores prefijados) se encuentran en cada columna y se
reemplazaron con un puntero para el valor en la seccin IC, como se ilustra el
proceso en la siguiente figura.

Los prefijos que reduzcan el tamao de los datos se mueven a la cabecera de


la pgina, y los valores de columna reales se modifican para incluir punteros a
la IC, como se muestra en la Figura

3 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server

El valor 3kkk representa los tres primeros caracteres del prefijo y el KKK.

El siguiente paso es la compresin de diccionario, que explora toda la pgina


en lugar de una sola columna. Los valores que se repiten, por ejemplo, 4j se
mueven a la seccin IC de la cabecera de la pgina y se sustituyen por
referencias a los valores, como se muestra en la siguiente figura.

El proceso de compresin de pgina con SSMS o con el T-SQL es exactamente


el mismo que con la compresin de fila. La diferencia es que especifique PAGE
lugar de ROW.

Ejercicio No.1.4. Compresin de una pgina usando SSMS

Ejercicio No.1.5. Compresin Pgina (page) con T-SQL

1.3 . Estimacin de los Efectos de la Compresin.


Realizacin de los pasos para estimar el ahorro de espacio en cada tabla
individual o ndice en una base de datos puede ser una tarea ardua.
Afortunadamente, SQL Server proporciona un procedimiento almacenado que
puede utilizar para llevar a cabo la misma accin.

Por otra parte, con un poco de tiempo y habilidad, se puede construir un


proceso que se repite sobre cada tabla o ndice en una base de datos y se

4 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
obtienen los resultados de la llamada al procedimiento almacenado. El
siguiente script calcula el ahorro de espacio para un nico ndice en la tabla
Production.TransactionHistory:

exec sp_estimate_data_compression_savings
@schema_name = 'Production',
@object_name = 'TransactionHistory',
@index_id = 1,
@partition_number = NULL,
@data_compression = 'row'

Este script puede tomar varios minutos para ejecutar en funcin de la cantidad
de datos que hay y el tipo de compresin que seleccione.

El columna size_with_requested_compession_setting (KB) estima el tamao de


la tabla o ndice comprimido. Debe tener en cuenta estos resultados, junto con
otros factores mencionados en la seccin siguiente para determinar si se
comprime una tabla o ndice.

1.4 . Consideraciones de compresin


Se debe considerar cuidadosamente si se debe implementar la compresin de
filas o de pgina antes de hacerlo. Al igual que con la mayora de las cosas, la
compresin no viene sin un costo. Mientras que los datos permanecen
comprimidos en la memoria, cuando se selecciona, se descomprime. Adems,
la insercin de nuevas filas, los datos son comprimidos en filas y/o pgina.
Cuando las filas se actualizan o se eliminan, los objetos comprimidos por fila
persisten en los niveles actuales de compresin. Sin embargo, la compresin
por pgina podr calcularse de nuevo dependiendo del nmero de cambios que
se producen en los datos.

Como resultado, la determinacin de qu objetos comprimir depende en gran


medida de las actividades que realizan los objetos correspondientes. Como
punto general de partida, aquellos objetos que se actualizan con frecuencia
deben tener compresin por registro. Aquellos objetos que en su mayora son
de lectura deben aplicar una compresin por pgina. Es cierto que hay otras
cuestiones en las que pensar, pero estos son un buen punto de partida.
Tambin, las tablas que slo se aade a (en otras palabras, se aade datos al
final) debe aplicar la comprimido por pgina.

1.5 Resumen
5 Escuela Tecnolgica Instituto Tcnico Central
Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
Decidir qu comprimir y cuando tomar una prueba definitiva y el analizar la
base de datos actual. La compresin en la mayora de los casos ahorrar
espacio, y puede incluso ofrecer algunas mejoras de rendimiento en el entorno
de base de datos global. El proceso de compresin se puede aplicar a ciertos
objetos en su base de datos utilizando SSMS o de T-SQL. Este gua examino los
dos tipos de compresin, de registros y pginas, y nos habl sobre las medidas
para aplicar ambos tipos de compresin.
2. PARTICIONAMIENTO DE TABLAS.

Despus de completar este apartado, estar en capacidad de:

Entender el particionamiento de tablas.


Crear una funcin de particin.
Crear un esquema de particin.
Particionar una tabla.

El concepto de particin no es muy difcil de explicar o comprender. Por


ejemplo, suponga que tiene una tabla que contiene los datos de ventas, y que
le gustara dividir los datos en segmentos basados en el ao de la venta.
Lgicamente, la tabla se asemejara a la siguiente figura:

Como se muestra en la figura, dividir los datos por ao es simple para ilustrar.
Cuando se aade datos a la tabla, se coloca en el lugar adecuado en funcin
del ao de la venta. El particionamiento de tablas ofrece varios beneficios,
principalmente en la forma de simplificar el mantenimiento, las mejoras
potenciales de rendimiento, y la capacidad de almacenar fsicamente los datos
en una sola base de datos en varios discos.

6 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
Entonces, cmo puede ser manejada la particin fsicamente cuando los
datos se insertan en una tabla de Microsoft SQL Server? El proceso consta de
los tres pasos siguientes:

1. Crear una funcin de particin.


2. Crear un esquema de particin.
3. Aplicar el esquema de particin a una tabla.

2.1 . Crear Una Funcin de Particin.

Mientras que el proceso manual-particionamiento lgico se podra decir que es


sencillo, el proceso de dividir una tabla en SQL Server no es que mucho ms
difcil. El primer paso es crear una funcin de particin. Esta funcin es lo que
se utiliza para alinear o asignar los datos a la particin correspondiente sobre
la base de una columna en la tabla.

Usando argumentos de la funcin de particin.

Al crear una funcin de particin, debe especificar o proporcionar unas pocas


piezas de informacin. La primera y ms obvia es un nombre. El siguiente es el
tipo de parmetro de entrada, que es el tipo de datos de la columna que se va
a utilizar para la particin. Los nicos tipos de datos que no se pueden usar son
de texto, ntext, image , xml, timestamp, varchar (max ), nvarchar (max ) y
varbinary ( max) , los alias en los tipos de datos y los tipos de datos definido
por el usuario con el Common Language Runtime (CLR ). Tpicamente, una
columna de fecha o de nmero entero se utiliza para la funcin de particin..

Por ejemplo , hacer referencia a la Figura anterior tenga en cuenta que los
valores seran 2010 , 2011 , y 2012 , y una cuarta particin que contiene todos
los datos de ms de 2.012 . El ltimo argumento define en qu lado de la
frontera , izquierda o derecha , el lmite residirn .

Nota En Microsoft SQL Server 2012, el nmero de particiones que se pueden


crear en una tabla o ndice se ha aumentado a 15.000.

Nota Para facilitar el mantenimiento y, a menudo, un mejor rendimiento, se


recomienda colocar cada particin en un grupo de archivos independiente. Al
crear sus grupos de archivos, siempre se debe incluir uno ms que el nmero

7 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
de los lmites especificados en la funcin de particin. Los grupos de archivos
deben ser colocados en diferentes discos fsicos de separacin de I / O. La
siguiente secuencia de comandos agrega varios grupos de archivos de la base
de datos AdventureWorks2012:

ALTER DATABASE AdventureWorks2012


ADD FILEGROUP Sales2005;
- Use este cdigo para agregar varios grupos de archivos de la base de datos
AdventureWorks2012
USE master;
ALTER DATABASE AdventureWorks2012
ADD FILE
(
NAME = 'Sales2005',
FILENAME = 'C:\SQLData\Sales2005File.ndf',
SIZE = 5MB,
MAXSIZE = 200MB,
FILEGROWTH = 5MB
)
TO FILEGROUP Sales2005;

ALTER DATABASE AdventureWorks2012


ADD FILEGROUP Sales2006;

ALTER DATABASE AdventureWorks2012


ADD FILE
(
NAME = 'Sales2006',
FILENAME = 'C:\SQLData\Sales2006File.ndf',
SIZE = 5MB,
MAXSIZE = 200MB,
FILEGROWTH = 5MB
)
TO FILEGROUP Sales2006;

ALTER DATABASE AdventureWorks2012


ADD FILEGROUP Sales2007;

ALTER DATABASE AdventureWorks2012


ADD FILE
(
8 Escuela Tecnolgica Instituto Tcnico Central
Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
NAME = 'Sales2007',
FILENAME = 'C:\SQLData\Sales2007File.ndf',
SIZE = 5MB,
MAXSIZE = 200MB,
FILEGROWTH = 5MB
)
TO FILEGROUP Sales2007;

ALTER DATABASE AdventureWorks2012


ADD FILEGROUP Sales2008;

ALTER DATABASE AdventureWorks2012


ADD FILE
(
NAME = 'Sales2008',
FILENAME = 'C:\SQLData\Sales2008File.ndf',
SIZE = 5MB,
MAXSIZE = 200MB,
FILEGROWTH = 5MB
)
TO FILEGROUP Sales2008;

ALTER DATABASE AdventureWorks2012


ADD FILEGROUP Sales2009;

ALTER DATABASE AdventureWorks2012


ADD FILE
(
NAME = 'Sales2009',
FILENAME = 'C:\SQLData\Sales2009File.ndf',
SIZE = 5MB,
MAXSIZE = 200MB,
FILEGROWTH = 5MB
)
TO FILEGROUP Sales2009;

Aunque SQL Server 2012 ofrece una interfaz de usuario muy robusto que
abarca todos los pasos necesarios para dividir una tabla o un ndice, se
va a utilizar T-SQL inicialmente para trabajar a travs del proceso de
particin.

9 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server

Ejercicio No.2.1. Crear una funcin de particin


utilizando T-SQL

2.2 . Crear un Esquema de Particin.

Como se mencion anteriormente, el uso de grupos de archivos como parte de


su estrategia de particionamiento ofrece varias ventajas. Para asegurarse de
que se colocan los datos correctos en el grupo de archivos correcto, usted
usar un esquema de particin. El esquema de particin asigna o mapea las
particiones creadas con la funcin de los grupos de archivos.

Especificacin de los argumentos de particin de sistema

Puede especificar cinco argumentos cuando se crea un esquema de particin:

El nombre, cuya definicin y finalidad sean evidentes.


El nombre de la funcin de particin, que debe crearse antes de crear el
esquema. Las particiones creadas con la funcin especificada se asignan a
los grupos de archivos proporcionados al crear el esquema.
ALL, que cuando se utiliza limita el nmero de grupos de archivos a uno.
El ltimo argumento, que acepta una lista delimitada por comas de los
grupos de archivos.

Las particiones se asignan a los grupos de archivos en el orden en el que


aparecen, comenzando con la primera particin especificada en la funcin.

Ejercicio No.2.2. Crear un esquema de particin utilizando T-SQL

2.3 . Particionamiento de Tablas e ndices.

Como se dijo anteriormente, las tablas y los ndices pueden ser divididas. Ms
especficamente, se puede dividir los siguientes objetos:

Una tabla sin un ndice agrupado


Un ndice agrupado
Un ndice nico
Un ndice no agrupado

10 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
Al crear particiones en un ndice agrupado, la columna que se ha especificado
como la columna de particin debe ser incluida en la clave de agrupacin. Si
est particionado un ndice agrupado o no agrupado que no es nico, la
columna de particin no es necesaria como parte de la clave. Sin embargo, si
usted no lo incluya, SQL Server lo aadir al ndice por defecto. Con respecto a
los ndices nicos, agrupados o no agrupados, debe incluir la columna de
particin, como parte de la clave de ndice nico.

Ejercicio No.2.3. Particionamiento de una tabla utilizando SSMS

Ejercicio No.2.4. Particionar una tabla mediante T-SQL

Ejercicio No.2.5. Particionar una tabla utilizando SSMS

Ejercicio No.2.6. Particionar un ndice utilizando T-SQL

2.4 . Resumen.

En este apartado se present una breve resea de particionamiento con SQL


Server, incluyendo una introduccin a los conceptos y trminos necesarios para
obtener una comprensin general del proceso clave de particin. Con los
laboratorios seguido una demostracin paso a paso sobre cmo crear una
funcin de particin y el esquema que se puede utilizar para dividir una tabla o
ndice.

11 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server

3. INSTANTANEAS DE BASES DE DATOS

Despus de completar este apartado, estar en capacidad de:

Comprender las instantneas de bases de datos.


Identificar los requisitos previos de instantneas de bases de datos.
Crear y ver una instantnea de base de datos.
Eliminar una instantnea de base de datos.
Revertir a una instantnea de base de datos.

Una instantnea de base de datos de Microsoft SQL Server es una copia


esttica de slo lectura de una base de datos existente. La base de datos
existente se conoce como la base de datos fuente cuando se habla de las
instantneas de bases de datos. Cuando se crea una instantnea, es una
rplica exacta de slo lectura de la base de datos de origen en ese punto en el
tiempo. A medida que cambia la base de datos fuente, la instantnea se
actualizar para asegurarse de que est sincronizado.

Este gua le mostrara la informacin que necesita para determinar cundo,


cmo y por qu implementar las instantneas. En concreto, la gua destaca las
limitaciones y requisitos previos de uso de instantneas, y usted aprender los
pasos siguientes que muestran cmo crear instantneas y ver instantneas.
Finalmente, aprender cmo utilizar una instantnea como respaldo en caso de
que no existe una copia de seguridad, y tambin la forma de eliminar una
instantnea cuando ya no es necesaria.

3.1. Comprender los requisitos y limitaciones de


instantneas de bases de datos

12 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
Cuando se crea una instantnea de base de datos, debe asegurarse de que su
base de datos fuente es constante y consistentemente que sigue estando
disponible. La siguiente es una lista de los requisitos previos y las limitaciones
ms comunes de la base de datos fuente:

Instantneas de base de datos slo se admiten en la versin Enterprise de


SQL Server 2012.
La BD fuente y la base de datos de instantneas deben residir en la misma
instancia de SQL Server.
La base de datos fuente no se puede quitar, dividir o restaurar.
Archivos de base de datos fuente no pueden ser eliminadas.
Rendimiento podra verse afectado negativamente debido al aumento de E /
S de la fuente.

Si bien la propia instantnea proporciona una copia de slo lectura de la base


de datos de origen, usted debe tener en cuenta varios factores de limitacin
antes de implementar las instantneas en su entorno. La siguiente es una lista
de las limitaciones de instantneas comunes:

Las instantneas deben residir en el mismo servidor que la base de datos


de origen.
Las instantneas no se pueden copiar, restaurar, o separarse.
Los cambios en la base de datos fuente har que la base de datos
instantneas crezca. Por lo tanto, usted debe asegurarse de que tiene
espacio disponible en disco igual al tamao de su base de datos fuente.
Si una instantnea se queda sin espacio, se debe eliminar y volver a crear.

Una vez ms, esto no es una lista exhaustiva de las limitaciones, pero estos
son los que tpicamente afectan siempre y cuando las instantneas de base de
datos funcionen en su entorno.

3.2. Creacin y Visualizacin de las Instantneas de las


Bases de Datos.

T-SQL es el principal mecanismo utilizado para crear instantneas de bases de


datos. La sintaxis es similar a un script de creacin de base de datos
tradicional, con algunas pequeas modificaciones. El siguiente pseudocdigo
representa la sintaxis de una secuencia de comandos de ejemplo:

CREATE DATABASE <nombre de la instantnea de la base de datos>

13 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
ON
(
NAME = <Nombre Lgico de los archivos de la base de datos fuente>,
FILENAME = <Ruta del archive dnde ser almacenada y el nombre del
archivo>
)
AS SNAPSHOT OF <nombre de la base de datos fuente>

Si la base de datos de origen tiene varios archivos de datos, debe


especificar cada uno en el script. Esto se demuestra en el siguiente
laboratorio.

Ejercicio No.3.1 Creando una instantnea de Bases de Datos


usando T-SQL

Ejercicio No.3.2. Ver una Instantnea de Bases de Datos con


SSMS

3.3. Eliminar una instantnea de Base de Datos.

En algn momento, puede decidir que una instantnea de base de datos


ya no es til, o darse cuenta que est consumiendo demasiado espacio y
que le gustara comenzar con una instantnea nueva. Puedes eliminar
una instantnea utilizando SSMS o T-SQL.

Ejercicio No.3.3. Eliminado una instantneas de bases de datos

Ejercicio No.3.4. Eliminando una instantnea de base de datos


utilizando T-SQL

3.4. Revirtiendo una Instantnea de Base de Datos

Una de las mayores ventajas que puede aprovechar mediante la


creacin de instantneas de bases de datos es que usted puede
utilizarlas como una copia de seguridad de base de datos. Por ejemplo,

14 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
supongamos que alguien ha borrado accidentalmente datos de una tabla
en la base de datos o una tabla se eliminado. Cmo restaurar ese
objeto? Usted podra utilizar una copia de seguridad de base de datos,
sin embargo, si ha creado una instantnea de base de datos, puede
utilizar esa instantnea en su lugar. La instantnea puede ofrecer una
versin an ms reciente del esquema de base de datos y los datos de
su ltima copia de seguridad.

Ejercicio No.3.5. Restaurar una instantnea de base de datos


utilizando T-SQL

Restauracin a partir de una instantnea de base de datos es una opcin


viable en algunos casos, pero no es una copia completa de la base de
datos. Por lo tanto, si la base de datos fuente se corrompe, no se puede
revertir a la instantnea. Aqu hay algunas limitaciones ms que puede
encontrar:

La base de datos de origen debe tener una sola instantnea.


Si alguno de los archivos estn fuera de lnea o de slo lectura, no se
puede revertir a una instantnea.
Todos los cambios que se produjeron despus de que se revirti la
instantnea se perdern.

3.5. Resumen

Como se discuti en este apartado, las instantneas de bases de datos


ofrecen a las organizaciones varias maneras de aprovechar una copia de
los datos y el esquema que puede que no haya estado disponibles antes.
Estos son comnmente utilizados como fuentes para informes y
consultas ad-hoc. Adems, se puede utilizar como fuente de copia de
seguridad en caso de prdida de datos. Independientemente de su razn
de apalancamiento a las instantneas, debe tener en cuenta los
requisitos adicionales de espacio en disco y la posibilidad de una
degradacin del rendimiento cuando se considera el uso de esta
caracterstica.

15 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server

4. SENTENCIAS DE SQL SELECT.

Despus de completar este apartado de la gua ser capaz de:

Escribir una declaracin SELECT.


Ordenar los resultados.
Filtrar una instruccin SELECT con la clusula WHERE.
Usar operadores de comparacin.
Utilizar el operador BETWEEN.
Utilizar la clusula WHERE con varias condiciones.
Bsqueda de una lista de valores.
Utilizar una bsqueda con un comodn.
Crear alias.
Utilizar el operador JOIN.

16 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
Limitar los datos devueltos en el conjunto de resultados.
Usar la palabra clave UNION para combinar los conjuntos de
resultados.

Hasta ahora ha aprendido a crear bases de datos y tablas, pero lo que


sucede despus de una aplicacin ha aadido datos a la base de datos?
Cmo obtener los datos?. La recuperacin de datos Microsoft SQL
Server es un proceso muy sencillo y simple. Para recuperar o acceder a
los datos dentro de una base de datos SQL Server, se utiliza una
instruccin SELECT.

4.1. Escribir una sentencia SELECT

Si bien la declaracin SELECT ofrece una gran cantidad de argumentos


que pueden hacer que sea muy compleja, en su forma ms simple
consiste en dos palabras: una lista de columnas y un nombre de tabla.

Ejercicio No.4.1. Escribiendo una sentencia SELECT

4.2. Ordenando Resultados


Ahora que se puede recuperar los datos, es posible que desee hacer ciertas
cosas con los resultados de la consulta. Por ejemplo, a menudo se desea
ordenar los datos. Para ordenar los datos en SQL Server 2012, se utiliza la
clusula ORDER BY. Esta clusula ordena los datos en el orden especificado, ya
sea ascendente (ASC) o descendente (DESC).

Ejercicio No.4.2. Ordenando un conjunto de Datos.

Abra el editor de consultas en SSMS.


En el editor de consultas, escriba y ejecute el siguiente cdigo T-SQL:

USE AdventureWorks2012;
SELECT * FROM [HumanResources].[Department]
ORDER BY DepartmentID DESC

En vez de devuelto los resultados a partir de DepartmentID 1, como se


muestra en la imagen del ejercicio anterior, los resultados comienzan

17 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
con DepartmentID 16. La imagen siguiente muestra los nuevos
resultados.

Nota: Si existe un ndice agrupado en la tabla, y ORDER BY no se


especifica, los resultados se devuelven en el orden especificado cuando
el ndice agrupado sea creado. Sin embargo, cuando la lgica se basa en
los datos ordenados de una manera especfica, siempre debe especificar
ORDER BY.

4.3. Filtrado de datos con la clusula WHERE

Hasta el momento, slo ha devuelto todas las filas de una tabla. En el


mundo real, esto probablemente no es lo que vas a hacer, la mayora de
veces, usted necesita devolver slo un subconjunto de los datos. Por
ejemplo, suponga que desea escribir una consulta que busca un
departamento especfico o todos los departamentos que comienzan con
la letra P. Para lograr esto, usted incluir la clusula WHERE como parte
de la instruccin SELECT. La clusula WHERE siempre sigue el FROM y
precede a la clusula ORDER BY. Hay varias implementaciones diferentes
de la clusula de consulta, entre ellos los siguientes:

18 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server

Los operadores de comparacin


El operador BETWEEN
Una clusula WHERE con mltiples condiciones
Una bsqueda de una lista de valores
Una bsqueda con comodines

El uso de los operadores de comparacin

SQL Server ofrece varios operadores de comparacin, como = (igual),


<(menor que),> (mayor que) y> = (mayor o igual que), entre otros. El
acoplamiento de estos operadores con la clusula donde puede ayudar a
limitar los datos se realiza de varias maneras.

Ejercicio No.4.3. Utilizando el operador de igualdad

Ejercicio No.4.4. Utilizando el operador mayor que

Usando el operador BETWEEN

En algunos casos, es posible que desee buscar informacin para un


rango datos. Por ejemplo, es posible que desee devolver todas las
ventas desde el 1 de mayo de 2007, hasta el 12 de diciembre de 2007.
Puede usar un par de las operaciones de comparacin, pero SQL Server
le ofrece una solucin ms elegante: el operador BETWEEN.

Ejercicio No.4.5. Utilizando el operador BETWEEN

El uso de la clusula WHERE con mltiples condiciones


A veces puede que tenga que especificar varios filtros en una sentencia.
Por ejemplo, quizs usted quiere encontrar las ventas en un rango de
fechas determinado, sino tambin slo para un producto especfico. En
ese caso, puede utilizar el operador AND u OR para combinar ambos
filtros.

19 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
Ejercicio No.4.6. Escribe una clusula WHERE con mltiples
condiciones

Buscando en una lista de valores

Otro escenario tpico consiste en recuperar un conjunto de resultados basado


de una lista de valores. Por ejemplo, puede que tenga que devolver todas las
ventas de una lista particular de productos. Usando el operador IN, SQL Server
determina si los elementos de una lista especfica que coincida con el valor
especificado.

Ejercicio No.4.7. Utilizando el operador IN

El uso de un comodn de bsqueda

La variacin final de la clusula WHERE cubierto hasta aqu es la bsqueda con


comodn. Por ejemplo, suponga que desea devolver todos los departamentos
de su organizacin que comienzan con las letras PR. Para ello, se utiliza una
comparacin LIKE. Al utilizar LIKE, SQL Server puede determinar si un carcter
especificado o cadena de caracteres coincide con un valor en la base de datos.

Ejercicio No.4.8. Utilizando la comparacin LIKE

La sintaxis LIKE no utiliza un conjunto tpico de comodines de


expresiones regulares. Como se demuestra en el guin anterior, el %
representa cualquier cadena de cero o ms caracteres. Adems, otros
caracteres comodines son los siguientes:

_ (un solo carcter)


[abc] (un solo carcter en un conjunto)
[^ abc] (un solo no carcter en conjunto)

4.4. Creacin de alias

Puede crear alias, que puede ser un nombre ms corto o ms comprensible,


que los nombres de tablas y columnas, por lo que es ms fcil trabajar con
agregaciones, expresiones y consultas que implican varias tablas. Adems, su
base de datos puede contener nombres de columna muy crpticos, y es posible
20 Escuela Tecnolgica Instituto Tcnico Central
Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
que desee proporcionar nombres que son ms significativos para las
aplicaciones y los usuarios finales. El uso de alias le permite renombrar o
acortar los nombres de tablas y columnas.

Ejercicio No.4.9. Alias de una tabla y una columna

4.5. Usando el operador JOIN para devolver los datos de


varias tablas

Nos hemos centrado principalmente en la recuperacin de datos de una


sola tabla hasta el momento. En la prctica, es muy poco probable que
las consultas no se refieran a una sola tabla, la mayor parte del tiempo,
se le requerir para devolver los datos de varias tablas. Para ello, se
utiliza el operador JOIN. Si bien existen muchos tipos de uniones, nos
centraremos en los tres ms comnmente utilizados:

INNER
LEFT OUTER
RIGHT OUTER

El uso de INNER JOIN

De los tres ms comnmente utilizado de los operadores JOIN es el INNER JOIN


el que ms probablemente utilice con regularidad. INNER JOIN junta las
igualdades entre dos o ms tablas. Por ejemplo, suponga que tiene una tabla
que contiene los productos y otro que contiene las ventas, y que desea
encontrar slo los productos que se han vendido. Bsicamente, usted est
buscando la interseccin de las dos tablas en algn valor.

21 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server

La seccin sombreada de la figura muestra las filas que se devuelven en una


consulta que se unira a las tablas de ventas y de producto.

La Sintaxis de JOIN

Sin importar si usted est escribiendo una combinacin interna o una


combinacin externa, se empieza con una instruccin SELECT bsica.
Vamos a usar la consulta siguiente como su punto de partida:

USE AdventureWorks2012;
SELECT
p.FirstName,
p.LastName
FROM Person.Person p

La tabla en la clusula FROM debe incluir una columna con los valores
que existen en la tabla que tiene intenciones de unirse. En este caso,
usted desea incluir una direccin de correo electrnico en el conjunto de
resultados. Para lograr esto, se debe hacer referencia a una segunda
tabla en la consulta, como se ilustra en la siguiente consulta:

USE AdventureWorks2012;
SELECT
p.FirstName,
p.LastName,
ea.EmailAddress
FROM Person.Person AS p

22 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
INNER JOIN Person.EmailAddress AS ea
ON p.BusinessEntityID = ea.BusinessEntityID

La palabra reservada INNER JOIN deben ser incluidas, que permite


especificar una segunda tabla en la consulta. El INNER JOIN o cualquier
JOIN deben ir acompaado de la palabra clave ON. En la clusula ON, se
especifica qu columna o columnas que se utiliza para conectar (JOIN)
las dos tablas. La clave de incorporarse con xito dos tablas es
identificar sus datos de interseccin, que comnmente se alinea a travs
de la clave principal y las relaciones de claves externas. Si desea realizar
una combinacin externa izquierda o RIGHT OUTER JOIN en la consulta
anterior, se reemplaza INNER, ya sea con LEFT OUTER o RIGHT OUTER.

Nota Puede unir varias tablas en una sentencia SELECT incluyendo


INNER adicionales y ON para los acoplamientos.

Ejercicio No.4.10. Escribir una consulta con INNER JOIN

El uso de OUTHER JOINs

Hay dos tipos bsicos de las combinaciones externas: LEFT y RIGHT.


Ambos proporcionan una funcionalidad muy similar, pero hay una ligera
diferencia que depende del orden de las tablas en la consulta. Usando el
ejemplo anterior, las ventas de productos, si usted comienza a leer la
pregunta de izquierda a derecha, qu tabla se encuentra en primer
lugar?. La tabla Production.Product, que la convierte en la tabla de la
izquierda. La segunda tabla se encuentra (seguir leyendo a la derecha)
es Sales.SalesOrderDetail, la tabla de la derecha. Esta tendencia se
mantiene a lo largo de la consulta.

Por lo tanto, si desea obtener una lista de productos,


independientemente de su existencia en la tabla Sales.SalesOrderDetail,
un LEFT OUTER JOIN debe ser su eleccin.

23 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server

Por otro lado, si usted est tratando de recuperar todas las ventas, ya
sea que estn o no asociados a un producto, usted debe elegir una
combinacin externa derecha. La figura ilustra una combinacin externa
derecha.

Independientemente del tipo de OUTER JOIN, la sintaxis es similar a la


de un INNER JOIN. Reemplaza INNER, ya sea con LEFT OUTER o RIGHT
OUTER.

Ejercicio No.4.11. Escribe una consulta de combinacin externa

Si se desplaza hacia abajo el conjunto de resultados, usted debe


comenzar a ver los valores NULL en las columnas que forman parte de la
tabla Sales.SalesOrderDetail. Este es un resultado directo de la
utilizacin de una combinacin externa. Recordemos el rea sombreada
de la figura ilustra el conjunto de resultados de un LEFT OUTER JOIN. Las
24 Escuela Tecnolgica Instituto Tcnico Central
Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
filas devueltas por la consulta son lo que debe esperar. No slo son los
productos asociados a las ventas devueltas, pero tambin lo son los que
no tienen ventas.

4.6. Limitando los datos devueltos en el conjunto de


resultados.

Adems de utilizar una clusula WHERE en la consulta, se tiene otras


maneras de limitar los datos devueltos en el conjunto de resultados. Si
bien hay una larga lista de mtodos y tcnicas que puede utilizar, SQL
Server ofrece palabras claves que proporcionan un enfoque muy
simplista limitar el conjunto de resultados.

Usando el TOP

La palabra clave TOP limita el nmero de filas que se devuelven en un


resultado a un nmero concreto de filas o un porcentaje especfico de
filas. TOP siempre se debe utilizar con la clusula ORDER BY. En la
mayora de los casos, se le busca el ms alto o el ms bajo conjunto de
valores para una columna dada, y la clasificacin de los datos le
proporcionar esa informacin. Por ejemplo, si usted quiere volver los
cinco mayores ventas en su tabla de ventas, agrega TOP (5)
inmediatamente despus de la palabra clave SELECT. Adems, se
incluye una clusula ORDER BY que especifica la columna que contiene
el valor de las ventas reales de cada fila como la columna de la orden.

Ejercicio No.4.12. Escribir una consulta TOP

Usando DISTINCT y NULL

DISTINCT devuelve una lista nica de valores distintos de cada columna


que se especifica en una instruccin SELECT. Si hay valores duplicados
25 Escuela Tecnolgica Instituto Tcnico Central
Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
en la lista, todos menos un valor duplicado sern removidos. Por
ejemplo, si ejecuta la siguiente consulta, el resultado devuelve una lista
de productos con algunos de los nombres de productos repetidos varias
veces:

USE AdventureWorks2012;
SELECT
p.Name AS ProductName
FROM Production.Product AS p
INNER JOIN Sales.SalesOrderDetail sd
ON p.ProductID = sd.ProductID

Colocando DISTINCT inmediatamente despus de la palabra clave


SELECT, se quita los duplicados de la lista.

Por otra parte, si desea limitar el resultado slo a productos que no han
enviado, se agrega la clusula WHERE. En este ejemplo, la clusula
WHERE debe identificar todas las filas que contienen valores NULOS en
SalesOrderProduct y CarrierTrackingNumber.

El valor NULL es un valor especial. En realidad no es un valor en


absoluto-que es la ausencia de un valor. Como resultado, hay valores de
comparacin especiales que se pueden utilizar cuando se hace
referencia en una clusula WHERE. Si usted est en busca de valores
NULL, se utilizara el siguiente:

WHERE <column name> IS NULL

Si usted est en busca de columnas que no son NULL, se utilizara la


siguiente:

WHERE <column name> IS NOT NULL

En este ejemplo, usted est en busca de todos los productos que no se


han enviado, en otras palabras, todas las filas del conjunto de resultados
que tienen un valor NULL para la columna SalesOrderDetail y
CarrierTrackingNumber.

26 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server
El siguiente paso consiste en eliminar todas las columnas, si alguno se
enumera, adems de la columna Nombre de producto de la lista de
columnas. Si no, entonces la distincin de cada fila se basar en todas
las columnas de la sentencia SELECT en lugar de exclusivamente en la
columna Nombre del producto. Por ltimo, si an no se ha incluido,
coloque la palabra clave DISTINCT entre la palabra clave SELECT y el
nombre de columna.

Ejercicio No.4.13. Escriba una consulta que incluye DISTINCT

4.7. Usar UNION para combinar conjuntos de


resultados

A menudo, usted tendr que escribir dos sentencias SELECT que pueden
necesitar para combinar en un resultado para el consumo de una
aplicacin o usuario final. Con el uso de la palabra clave UNION, usted
puede lograr precisamente eso. UNION tiene dos variantes:

UNION sola, que elimina las filas duplicadas en el conjunto de


resultados.
UNION ALL, que incluye duplicados. Si duplicados son posibles, debe
utilizar UNION ALL; Es mucho ms rpido, ya que no tiene que incluir
DISTINCT.

El pseudocdigo siguiente muestra el uso de UNION:

SELECT column1, column2 FROM TABLE1


UNION
SELECT column1, column2 FROM TABLE2

Al escribir una consulta con UNION, ambas sentencias SELECT deben


contener el mismo nmero de columnas, y los tipos de datos deben
coincidir para cada columna. Cuando se utiliza UNION, proporcionar slo
una clusula ORDER BY despus de la ltima instruccin SELECT.

Ejercicio No.4.14. Escriba una consulta que incluye UNION

27 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez
Gua No.3 Tpicos Avanzados de Diseo de
Base de Datos con Sql Server

4.8. Resumen

El potencial de la instruccin SELECT slo est limitado por su


conocimiento de la tabla y las relaciones de datos y cmo se pueden
manipular con la sintaxis SELECT. En este guia, aprendi sobre los
mtodos SELECT de uso comn, que debera proporcionar una base
slida para su experimentacin T-SQL. Usted exploro varios mtodos que
le ayudarn a unir datos de varias tablas y luego limitar el resultado.

28 Escuela Tecnolgica Instituto Tcnico Central


Bases de Datos II
Profesor : Ricardo Giraldo Gmez

También podría gustarte