MS SQL Nivel I
MS SQL Nivel I
Introducción
SQL Server 2008 es un elemento fundamental de la Plataforma de Datos de Microsoft,
capaz de gestionar cualquier tipo de datos, en cualquier sitio y en cualquier momento. Le
permite almacenar datos de documentos estructurados, semiestructurados o no
estructurados como son las imágenes, música y archivos directamente dentro de la base de
datos. SQL Server 2008 le ayuda a obtener más rendimiento de los datos, poniendo a su
disposición una amplia gama de servicios integrados como son consultas, búsquedas,
sincronizaciones, informes y análisis. Sus datos pueden almacenarse y recuperarse desde
sus servidores más potentes del Data Center hasta los desktops y dispositivos móviles,
permitiéndole tener un mayor control sobre la información sin importar dónde se almacena
físicamente.
SQL Server 2008 le permite utilizar sus datos en aplicaciones a medida desarrolladas con
Microsoft® .NET y Visual Studio y también desde su propia Arquitectura Orientada a
Servicio (SOA) y los procesos empresariales empleando Microsoft® BizTalk® Server.
Además, las personas que gestionan la información pueden acceder directamente a los
datos con las herramientas que utilizan habitualmente como Microsoft® Office 2007. SQL
Server 2008 le ofrece una plataforma de datos, fiable, productiva e inteligente para cubrir
todas sus necesidades.
Confiable: Permite a las organizaciones ejecutar sus aplicaciones más críticas con niveles
de seguridad, confiabilidad y escalabilidad muy altos.
Inteligente: Ofrece una plataforma integral que brinda introspectiva e información donde
sus usuarios lo desean
1
Nuevas funcionalidades de SQL Server 2008
Protección de la Información
¿Cómo podría saber si ha copiado la base de datos del servidor de producción de un cliente
y lo han instalado en otra base de datos o si están accediendo a la información? Con SQL
2008, puede proteger la información con una clave de protección (Encriptación).
¿Cómo podría saber que datos están siendo leídos y modificados, a qué hora y por quien?
SQL 2008 da la opción de Auditora de Datos.
Si sus clientes necesitan estar siempre en línea con sus sistemas sin caídas, SQL 2008
ofrece mejoras en una técnica llamada “Mirroring”, el cual es una copia o espejo de la base
de datos.
Si el disco se daña, donde reside los datos, SQL 2008 recupera la información de una copia
reciente de los datos dañados al otro equipo espejo de manera transparente.
Datos Geoespaciales
Poder manejar información geográfica, la que hoy en día es de alta importancia en las
organizaciones, con todo el tema de globalización
Con SQL 2008 podre crear rápidamente aplicaciones conectadas a la base de datos con la
funcionalidad de funcionar en forma desconectada y después sincronizarlos con la base de
datos central sin perder la línea de negocio y manteniendo los datos validados
Reportes
Poder acceder a reportes directamente desde Word, mejoras en los tipos de gráficos en los
reportes, haciéndolos más entendibles y poder editar los reportes de Microsoft Office, sin
saber donde fue diseñado el reporte.
Microsoft SQL Server 2008 es una plataforma de bases de datos y análisis de datos para
aplicaciones OLTP (OnLine Transaction Processing – Procesamiento de transacciones en
2
línea), para diseño, creación y administración de data warehouses, y para aplicaciones de
comercio electrónico (e-commerce).
Servicios de bases de datos de SQL Server: servicio del Database Engine (Motor de base
de datos) relacional de SQL Server.
Agente SQL Server: ejecuta trabajos, supervisa SQL Server, activa alertas y habilita la
automatización de algunas tareas administrativas.
Nota:
Para que SQL Server y el Agente SQL Server se ejecuten como servicios de Windows,
SQL Server y el Agente SQL Server deben estar asignados a una cuenta de usuario de
Windows.
Búsqueda de texto completo: crea rápidamente índices de texto completo del contenido y
de las propiedades de los datos estructurados y semiestructurados para permitir el filtrado
de documentos y la separación de palabras en SQL Server.
3
Servicio auxiliar de Active Directory de SQL Server: publica y administra los servicios
de SQL Server en Active Directory.
Microsoft SQL Server 2008 proporciona soporte nativo para las versiones de 32 bits de
Microsoft Windows, así como soporte completo para las ediciones de 64 bits de SQL
Server que se ejecutan sobre hardware de 64 bits.
El SQL Server 2008 Installation Wizard (Asistente para Instalación de SQL Server 2008)
está basado en Windows Installer y proporciona una simple presentación de árbol para la
instalación de los componentes de SQL Server: SQL Server 2008 Database Engine,
Analysis Services, Reporting Services, Notification Services, Data Transformation
Services, Replication, y Management Tools.
Espacio de disco Componentes de base de datos de SQL Server: 95 a 300 MB, 250
MB típico.
4
Analysis Services: 50 MB mínimo, 130 MB típico.
Reporting Services: 50 MB mínimo para Report Server, 30 MB
para Report Designer.
La instalación del producto completo, incluyendo las bases de datos
y código de ejemplo requiere aproximadamente 1 GB.
El soporte para Web Service nativo (SOAP/HTTP) solo está disponible para instancias de
SQL Server 2008 corriendo bajo Windows Server 2003.
Requerimientos de Internet
Componente Requerimiento
5
Internet Para escribir aplicaciones XML se debe configurar IIS. Se
Information requiere IIS 5.0 ó superior para Reporting Services.
Services (IIS)
Las herramientas que SQL Server Management Studio contiene ahora son:
El Editor de código es un editor de secuencias completo que sirve para escribir y modificar
secuencias de comandos. El Editor de código reemplaza al Analizador de consultas incluido
en versiones anteriores de SQL Server. SQL Server Management Studio ofrece cuatro
versiones del Editor de código: el Editor de consultas de SQL, el Editor de consultas MDX,
el Editor de consultas XML y el Editor de consultas de Microsoft SQL Server 2005
Compact Edition.
El Explorador de objetos sirve para buscar, modificar e incluir objetos que pertenecen a
instancias de SQL Server en secuencias de comandos o ejecutarlos.
El Explorador de plantillas sirve para buscar plantillas y crear secuencias de comandos para
ellas.
La Ventana Propiedades sirve para mostrar las propiedades actuales de los objetos
seleccionados.
6
SQL Server Management Studio también ofrece nueva funcionalidad, que incluye:
Acceso sin conexión. Puede escribir y modificar secuencias de comandos sin conectarse a
una instancia de SQL Server.
Creación de secuencias de comandos desde cualquier cuadro de diálogo. Puede crear una
secuencia de comandos desde cualquier cuadro de diálogo para que pueda leer, modificar,
almacenar y reutilizar las secuencias de comandos después de crearlas.
1. Para cargar la herramienta ejecute la secuencia botón Inicio, Todos los programas,
Microsoft SQL Server 2008, SQL Server Management Studio.
2. Se abre la ventana Conectar con el servidor. En ella, verifique que en Tipo de servicio
está seleccionado SQL Server.
3. En Nombre del servidor , seleccione el servidor SQL con el que se desea conectar.
4. Indique el tipo de autenticación con el que se identifica ante el servidor, y haga clic en
Connect.
5. Se abre el SQL Server Management Studio con la conexión al servidor indicado.
7
8
El proceso de autenticación
Es un proceso que se utiliza para comprobar que una entidad u objeto es quien dice ser, en
el caso de SQL Server 2008 es el proceso que permite verificar las credenciales de un
usuario que desea acceder a un servidor SQL.
Autenticación integrada a Windows: cuando con la misma cuenta con que accedemos
a Windows podemos acceder a SQL Server. Para que esto sea posible, se requiere que
la cuenta de usuario Windows (por ejemplo, la cuenta CEPS\PC-402-01 con la que
ingreso a la red Windows) esté registrada también como cuenta de inicio de sesión
(login name) de SQL Server.
Como se ve, cualquiera que sea el tipo de autenticación, si no contamos con un login name,
no podemos acceder a SQL Server. Este login name puede ser una cuenta Windows
registrada como login name, ó un login name estándar de SQL.
Modos de autenticación
9
Un servidor SQL puede ser configurado para aceptar cualquiera de los siguientes dos
modos de autenticación:
1. En la ventana Explorador de objetos haga un clic secundario sobre el nodo del servidor
a verificar, y luego seleccione Propiedades
10
UNIVERSIDAD NACIONAL DE INGENIERIA
Centro de Extensión y Proyección Social
Para cambiar el modo de autenticación seleccione el modo y luego tiene que reiniciar el
servicio.
11
Las bases de datos de sistema
Cuando se instala SQL Server, se crean cuatro bases de datos de sistema, dos bases de datos
de usuario, y dos bases de datos del Report Server.
Las bases de datos de sistema contienen las tablas de sistema, las que a su vez contienen
metadatos; es decir, los datos que permiten operar y administrar el sistema. Las bases del
sistema son: master, model, tempdb y msdb.
Base de datos del sistema master
La base de datos master registra toda la información del sistema de SQL Server. Registra
todas las cuentas de inicio de sesión y todas las opciones de configuración del sistema. La
base de datos master registra la existencia del resto de bases de datos, incluida la ubicación
de los archivos de base de datos. La base de datos master registra la información de
inicialización de SQL Server, y siempre mantiene disponible una copia de seguridad
reciente de master.
Base de datos del sistema model
La base de datos model se utiliza como plantilla para todas las bases de datos creadas en un
sistema. Cuando se emite una instrucción CREATE DATABASE, la primera parte de la
base de datos se crea copiando el contenido de la base de datos model, el resto de la nueva
base de datos se llena con páginas vacías. Como tempdb se crea de nuevo cada vez que se
inicia SQL Server, la base de datos model siempre tiene que existir en un sistema SQL
Server.
Base de datos del sistema tempdb
La base de datos tempdb almacena todas las tablas y todos los procedimientos almacenados
temporales. También satisface otras necesidades de almacenamiento temporal, como las
tablas de trabajo generadas por SQL Server. La base de datos tempdb es un recurso global;
las tablas y los procedimientos almacenados temporales de todos los usuarios conectados al
sistema se almacenan en ella; tempdb se vuelve a crear cada vez que se inicia SQL Server,
de forma que el sistema se inicia con una copia limpia de la base de datos. Como las tablas
y los procedimientos almacenados temporales se eliminan automáticamente al desconectar
12
y cuando se cierra el sistema no hay conexiones activas, en tempdb nunca hay nada que se
tenga que guardar de una sesión de SQL Server a otra.
Base de datos del sistema msdb
La base de datos msdb la utiliza el Agente SQL Server para programar alertas y trabajos, y
para registrar operadores.
Las creadas durante la instalación del servidor sirven como bases de datos de ejemplo.
13
Utilizar SQL Server Manangement Studio para emitir consultas
Transact SQL
Transact SQL es el lenguaje utilizado por SQL Server 2008 para escribir comandos que
luego serán enviados al servidor para su ejecución.
Transact SQL es la implementación de la empresa Microsoft del lenguaje estándar de
consultas estructurado (SQL).
Transact SQL no es CASE-SENSITIVE, es decir, no diferencia mayúsculas de minúsculas
como otros lenguajes de programación como C o Java.
Comentarios
En primer lugar activar Microsoft SQL Server Manangement Studio y conectar al servidor.
A continuación dar un clic en la pestaña Nueva Consulta
14
Se activar la ventana de edición de código SQL Query1.sql
En la ventana de edición activa se debe empezar a escribir los comandos Transact SQL.
15
Ejercicio 01
PRINT GETDATE()
Luego seleccione el bloque de código que desea ejecutar y dar un clic en el botón Ejecutar
o pulsar la tecla F5.
16
Para continuar escriba lo siguiente:
Ejercicio 02
Ejercicio 03
-- se imprime la fecha
PRINT @Fecha
17
Ejercicio 04
USE AdventureWorks
GO
-- Se emite la consulta
18
El Script creado se puede grabar y luego recuperar el contenido del archivo para una
posterior utilización.
Las tablas del sistema
Las tablas de sistema almacenan metadatos acerca del sistema y de los objetos de la base de
datos.
Cada una de las bases de datos, ya sea de sistema o de usuario, contiene una colección de
tablas de sistema que almacenan datos que describen a una base de datos específica. Esta
colección de tablas se conoce como el Catálogo de la Base de Datos, y pertenecen al
esquema sys de la base de datos.
A partir de esta versión de SQL Server, las tablas de sistema no pueden ser consultadas
directamente. Para consultar el Catálogo de una base de datos podemos utilizar las Vistas
del Catálogo (Catalog Views) ó las Vistas de Esquema de Información (Information
Schema Views).
El siguiente cuadro muestra algunas de las vistas del catálogo que forman el Catálogo de la
Base de Datos.
sys.sysusers Todas Tiene una fila por cada usuario que tiene acceso a
la base de datos.
sys.sysindexes Todas Tiene una fila por cada índice creado para las
tablas de la bases de datos.
19
A continuación se presentan ejemplos del uso de las vistas del catalogo de base de datos:
Ejercicio 05
-- Activar la base de datos AdventureWorks
USE AdventureWorks
GO
-- Listado de las tablas de la base de datos AdventureWorks
SELECT * FROM sys.objects
WHERE type='U'
20
El Catálogo del Sistema
Es una colección de tablas de sistema que almacenan datos acerca del sistema y todas las
bases de datos. Esta colección de tablas solo está presente en la base de datos de sistema
master.
El siguiente cuadro muestra algunas de las vistas del catálogo que forman el Catálogo del
Sistema.
sys.syslogins master Tiene una fila por cada login name que puede
conectarse al servidor.
sys.sysmessages master Tiene una fila por cada mensaje de error del
sistema o advertencia que el servidor puede
retornar.
Ejemplos:
Ejercicio 06
21
GO
--02 Listado de los login name que puede conectarse al servidor
SELECT * FROM sys.syslogins
GO
--03 Listado de los mensajes de error del sistema o advertencia
-- que el servidor puede retornar.
SELECT * FROM sys.sysmessages
GO
Una vista es una consulta pre construida que se almacena en la base de datos, y que ser
ejecutada por un programa. SQL Server cuenta con un conjunto de vistas denominadas de
esquema de información que permiten averiguar sobre el esquema de una base de datos.
22
El identificador de estas vistas tiene la forma INFORMATION_SCHEMA. objetos
Ejemplos:
Ejercicio 07
GO
WHERE TABLE_NAME='Product'
23
Utilizando funciones de metadatos
SQL Server define varias categorías de funciones que retornan información acerca de la
base datos activa y objetos de la base de datos. Estas funcionas retorna solo un valor y son
conocidas como funciones escalares
Ejercicio 08
--01
USE AdventureWorks
GO
GO
GO
GO
24
--05 Retorna el nombre del archivo logico para el ID especificado
SELECT FILE_NAME(1) AS 'Nombre del archivo'
GO
Este procedimiento almacenado del sistema presenta información acerca de una base de
datos especificada o de todas las bases de datos.
Sintaxis
Argumentos: name
25
Es el nombre de la base de datos cuya información se va a presentar. Si no se especifica
nombre, sp_helpdb devuelve información acerca de todas las bases de datos
master.dbo.sysdatabases.
Ejercicio 09
EXECUTE sp_helpDB
Ejercicio 10
26
Ejercicio 11
27
2
Creación de base de datos
En la actualidad se reconoce que la información y la calidad que esta posee, además del
tratamiento automatizado no solo es necesario para el eficiente funcionamiento de toda
organización sino que se ha convertido en uno de los principales elementos de
competitividad. Por este motivo el almacenamiento de los datos y su pronta disponibilidad
para los usuarios se hace indispensable para el manejo y funcionamiento de la organización.
La arquitectura Cliente / Servidor presenta dos componentes: programas que proporcionan
una interfaz al usuario del sistema que permitan tener acceso a los datos y un programa
gestor de base de datos que faciliten la administración y mantenimiento de los datos en el
servidor. Así por ejemplo si está interesado en crear una aplicación de facturación deberá
crear una estructura de base de datos que permita administrador las diferentes transacciones
que se realicen en la empresa, además debe tener disponibles una interfaz que permita a los
usuarios manipular los datos que necesite.
Base de datos
Una base de datos es una colección de objetos que contienen y manejan datos.Los objetos
que se pueden almacenar en una base de datos son:
Tablas
Vistas
Procedimientos Almacenados
Opciones predeterminadas
Reglas
Disparadores
Indicies
Tipos de datos
Restricciones
Diagramas
28
Estos objetos se definen para poder realizar distintas operaciones con los datos que se
almacenan en una base de datos, deben estar relacionados con un determinado tema o un
proceso determinado como por ejemplo un sistema de pedidos.
Los componentes de datos de SQL Server están compuestos de un conjunto de tablas en la
que se almacena un conjunto específico de datos que están estructurados. Una tabla está
conformada por un conjunto de filas (registros o tuplas) y columnas (Atributos).
Como mínimo, todas las bases de datos de SQL Server 2008 tienen dos archivos del
sistema operativo: un archivo de datos y un archivo de registro. Los archivos de datos
contienen datos y otros objetos, como tablas, índices, procedimientos almacenados y vistas.
Los archivos de registro contienen la información necesaria para recuperar todas las
transacciones de la base de datos. Los archivos de datos se pueden agrupar en grupos de
archivos para su asignación y administración.
Las bases de datos de SQL Server 2005 tienen tres tipos de archivos: principal, secundario
y de registro de transacciones.
Principal
Secundario
Los archivos de datos secundarios son opcionales, están definidos por el usuario y
almacenan los datos del usuario. Se pueden utilizar para distribuir datos en varios discos
29
colocando cada archivo en una unidad de disco distinta. Además, si una base de datos
supera el tamaño máximo establecido para un archivo de Windows, puede utilizar los
archivos de datos secundarios para permitir el crecimiento de la base de datos. La extensión
recomendada para los nombres de archivos de datos secundarios es .ndf.
Registro de transacciones
Por ejemplo, puede crearse una base de datos sencilla denominada Ventas con un archivo
principal que contenga todos los datos y objetos y un archivo de registro con la información
del registro de transacciones. Por otra parte, puede crearse una base de datos más compleja,
Pedidos, compuesta por un archivo principal y cinco archivos secundarios. Los datos y
objetos de la base de datos se reparten entre los seis archivos, y cuatro archivos de registro
adicionales contienen la información del registro de transacciones.
Concepto de Transacción
Una transacción asegura que las operaciones se llevarán a cabo completas, o en caso
contrario, la transacción será anulada para garantizar la consistencia de los datos.
30
El registro de transacciones de SQL Server
El archivo de registro de transacciones almacena todas las transacciones llevadas a cabo
con las sentencias INSERT, UPDATE y DELETE. El proceso se lleva a cabo de la
siguiente manera:
31
Creación de una base de datos
Para crear una base de datos, debe determinar su nombre, su propietario , su tamaño, los
archivos y los grupos de archivos que se utilizaran para almacenarla.
Cuando se crea una base de datos SQL Server crea automáticamente un registro de
Transacciones para ella. Esto se registra en un archivo especial donde se guarda toda
actividad relacionada con dicha base de datos, siempre que un usuario modifique o elimine
información de la base de datos el registro de transacciones tomara nota de la acción. Por
defecto, estos registros tienen el mismo nombre que la base de datos, pero utilizan la
extensión. .ldf, los archivos de transacciones proporcionan cierto nivel de seguridad a los
datos. En caso de fallo, es posible aplicar las transacciones que se encuentran en este
archivo en otra copia de la base de datos.
La instrucción CREATE DATA BASE crea una base de datos y los archivos que se
utilizan almacenar la base de datos.
Sintaxis:
ON [ PRIMARY ] (
NAME = nombre_lógico_data ,
FILENAME = 'ubicación_y_nombre_archivo_data' ,
LOG ON (
NAME = nombre_lógico_log ,
32
FILENAME = 'ubicación_y_nombre_archivo_log' ,
Observación
Todas las bases de datos tienen al menos un grupo de archivos principal. Todas las tablas
del sistema se encuentran en el grupo de archivos principal. Una base de datos puede tener
también grupos de archivos definidos por el usuario. Si se crea un objeto con una clausula
ON grupoArchivos que especifica un grupo de archivos definidos por el usuario, todas las
páginas del objeto se asignan desde el grupo de archivos especificado. Las páginas de todos
los objetos de usuario creados sin una clausula ON gurpoArchivos, o con una clausula O
DEFAULT, se asignan desde el grupo de archivos predeterminado. Cuando se crea una
33
base de datos por primera vez, el grupo de archivos principal es el grupo de archivos
predeterminado.
Procedimientos almacenados del sistema
Para mostrar un informe de una base de dato o de todas las bases de datos de un servidor
con SQL Server, ejecute sp_helpbd y se presentara una pantalla como la siguiente.
34
Ejercicio 12
USE AdventureWorks
GO
EXECUTE sp_spaceused
GO
Utilice el procedimiento almacenado del sistema sp_helplife para obtener el informe de los
archivos de la base de datos.
Ejercicio 13
USE AdventureWorks
GO
EXECUTE sp_helpfile
GO
Antes de crear una base de datos de usuario en el servidor SQL Server tenga en cuenta lo
siguiente:
Solo pueden crear bases de datos las cuentas de inicio de sesión que pertenecen a los
roles fijos de servidor sysadmin y dbcreator, aunque el permiso se puede conceder a
otras cuentas.
35
La cuenta de inicio de sesión que crea la base de datos se convierte en el usuario dueño
(dbo) de la base de datos.
Defina el nombre y tamaño de la base de datos, los archivos (y sus propiedades) en los
que residirá la base de datos.
Ejemplos de creación de base de datos utilizando T_SQL
Ejercicio 14: Escriba el siguiente Script que permite crear la base de datos BDEjemplo_00
-- Crear la base de datos BDEjemplo_00
USE master
GO
CREATE DATABASE BDEjemplo_00
GO
Ejercicio 15: Crear la base de datos BdEjemplo_01 que especifique los archivos de registro
de datos y de transacciones (código T-SQL)
Nota: Para la ejecución del ejercicio se debe crear una carpeta DATA en el disco C
USE master
GO
CREATE DATABASE BdEjemplo_01
36
ON
(NAME = BdEjemplo_01_dat,
FILENAME = 'C:\DATA\Bd_01dat.mdf',
SIZE = 5,
MAXSIZE = 20,
FILEGROWTH = 5 )
LOG ON
(NAME = BdEjemplo_01_log,
FILENAME = 'C:\DATA\Bd_01log.ldf',
SIZE = 2MB,
MAXSIZE = 15MB,
FILEGROWTH = 2 MB)
GO
El ejemplo anterior crea una base de datos llamada BdEjemplo_01. Debido a que no se
utiliza la palabra clave PRIMARY, el primer archivo (BdEjemplo_01_dat) se convierte, de
forma predeterminada, en el archivo principal. Como no se especifican MB ni KB en el
parámetro SIZE del archivo BdEjemplo_01_dat, de forma predeterminada, dicho parámetro
indica MB y el tamaño se asigna en megabytes. El tamaño del archivo BdEjemplo_01_log
se asigna en megabytes porque se ha indicado explícitamente el sufijo MB en el parámetro
SIZE.
USE master
GO
CREATE DATABASE BdEjemplo_02
ON
PRIMARY ( NAME = Logi1,
FILENAME = 'C:\DATA\logidat1.mdf',
SIZE = 5MB,
MAXSIZE = 10,
37
FILEGROWTH = 1),
( NAME = Arch2,
FILENAME = 'C:\DATA\logidat2.ndf',
SIZE = 5MB,
MAXSIZE = 10,
FILEGROWTH = 1),
( NAME = Arch3,
FILENAME ='C:\DATA\logidat3.ndf',
SIZE = 5MB,
MAXSIZE = 10,
FILEGROWTH = 1)
LOG ON
( NAME = Logilog1,
FILENAME = 'C:\DATA\logilog1.ldf',
SIZE = 5MB,
MAXSIZE = 10,
FILEGROWTH = 1),
( NAME = Archlog2,
FILENAME = 'C:\DATA\logilog2.ldf',
SIZE = 5MB,
MAXSIZE = 10,
FILEGROWTH = 1)
GO
Cada base de datos tiene un grupo de archivos principal. Este grupo de archivos contiene el
archivo de datos principal y cualquier otro archivo secundario que no se encuentre en otro
grupo de archivos. Se pueden crear grupos de archivos definidos por el usuario para
agrupar archivos con fines administrativos y de asignación y ubicación de datos.
Por ejemplo, pueden crearse tres archivos, Datos1.ndf, Datos2.ndf y Datos3.ndf, en tres
unidades de disco respectivamente para asignarlos posteriormente al grupo de archivos
38
grArchivos1. A continuación, se puede crear una tabla específicamente para el grupo de
archivos grArchivos1. Las consultas de datos de la tabla se distribuirán por los tres discos,
con lo que mejorará el rendimiento. Puede obtenerse la misma mejora del rendimiento con
un solo archivo creado en un conjunto de bandas RAID (matriz redundante de discos
independientes). No obstante, los archivos y grupos de archivos permiten agregar
fácilmente nuevos archivos a discos nuevos.
Todos los archivos de datos se almacenan en los grupos de archivos que se indican en la
tabla siguiente.
Grupo de
archivos Descripción
Principal Grupo de archivos que contiene el archivo principal. Todas las tablas
del sistema se asignan al grupo de archivos principal.
Cuando se crean objetos en la base de datos sin especificar a qué grupo de archivos
pertenecen, se asignan al grupo de archivos predeterminado. Siempre existe un grupo de
archivos designado como predeterminado. Los archivos del grupo de archivos
predeterminado deben ser lo suficientemente grandes como para dar cabida a todos los
objetos nuevos no asignados a otros grupos de archivos.
Se pueden crear grupos de archivos cuando se crea la base de datos, o bien posteriormente
cuando se agregan archivos a la misma. Sin embargo, después de agregar archivos a la base
de datos, no es posible moverlos a otro grupo de archivos.
39
En cada base de datos pueden crearse hasta 32.767 grupos de archivos. Los grupos de
archivos sólo pueden contener archivos de datos. Los archivos del registro de transacciones
no pueden formar parte de un grupo de archivos.
Para agregar un grupo de archivos al crear una base de datos utilizar:
Un archivo o un grupo de archivos no puede ser utilizado por más de una base
de datos.
Un archivo puede pertenecer únicamente a un grupo de archivos.
Los archivos del registro de transacciones nunca pueden formar parte de un
grupo de archivos.
Ejercicio 17
En el ejemplo siguiente se crea la base de datos BDEjemplo03, que tiene los siguientes
grupos de archivos:
USE master
GO
CREATE DATABASE BDEjemplo03
ON PRIMARY
( NAME = APri1_dat,
FILENAME = 'C:\DATA\APri1dat.mdf',
40
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 15% ),
( NAME = APri2_dat,
FILENAME = 'C:\DATA\APri2dat.ndf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 15% ),
FILEGROUP VentasGrupo1
( NAME = AGrp1Fi1_dat,
FILENAME = 'C:\DATA\AGrp1Fi1dat.ndf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = Arch_log,
FILENAME = 'C:\DATA\Archlog.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )
GO
41
La instrucción ALTER DATABASE
La instrucción ALTER DATABASE permite realizar cambios a una base de datos. Permite
agregar o quitar archivos y grupos de archivos de una base de datos. También se puede usar
para modificar los atributos de los archivos o grupos de archivos, por ejemplo para cambiar
el nombre o el tamaño de un archivo.
Ejercicio 18: El siguiente ejemplo modifica la base de datos BdEjemplo_01 para agregarle
un archivo de datos de 5 MB.
ALTER DATABASE BdEjemplo_01
ADD FILE
NAME = Test1dat2,
FILENAME = 'C:\DATA\t1dat2.ndf',
SIZE = 5MB,
MAXSIZE = 10MB,
FILEGROWTH = 5MB
GO
Ejercicio 19
USE master
GO
GO
42
ALTER DATABASE BdEjemplo_01
ADD FILE
( NAME = test1dat3,
FILENAME = 'C:\DATA\t1dat3.ndf',
SIZE = 5MB,
MAXSIZE = 10MB,
FILEGROWTH = 5MB),
( NAME = test1dat4,
FILENAME = 'C:\DATA\t1dat4.ndf',
SIZE = 5MB,
MAXSIZE = 10MB,
FILEGROWTH = 5MB)
TO FILEGROUP Bd_Ejemplo04FG1
GO
GO
Puede expandir la base de datos añadiéndole archivos adicionales, los archivos de datos
crecerán automáticamente hasta que se acabe el espacio en el disco. Recuerde que los datos
que están guardados a través de varios archivos en una base de datos dividirán
automáticamente la información de esos archivos.
43
Ejercicio 20: El ejemplo siguiente aumenta el tamaño al archivo test1dat3 agregado a la
base de datos BdEjemplo_01.Observe que se utiliza el nombre lógico del archivo.
USE master
GO
MODIFY FILE
(NAME = test1dat3,
SIZE = 20MB)
GO
Ahora puede ejecutar el procedimiento almacenado de sistema sp_heldb para verificar que
se haya agrandado satisfactoriamente la base de datos:
DBCC SHRINKDATABASE.
44
DBCC SHRINKDATABASE
( database_name | database_id | 0
[ , target_percent ]
[ , { NOTRUNCATE | TRUNCATEONLY } ]
)
[ WITH NO_INFOMSGS ]
DBCC SHRINKFILE
Reduce el tamaño del archivo de datos o de registro para la base de datos actual, o vacía un
archivo moviendo los datos del archivo especificado a otros archivos del mismo grupo de
archivos, permitiendo quitar el archivo de la base de datos. Puede reducir un archivo a un
tamaño menor que el tamaño especificado cuando se creó. Así se restablece el tamaño
mínimo de archivo al valor nuevo.
Ejercicio 21: El ejemplo siguiente permite vaciar el archivo test1dat3 de la base de datos
BdEjemplo_01 y usa la opción REMOVE FILE para eliminar el archivo de la base de
datos.
USE BdEjemplo_01
GO
DBCC SHRINKFILE (test1dat3,EMPTYFILE)
GO
EXECUTE sp_helpdb BDEjemplo_01
45
Cambiar el nombre de la base de datos
Para cambiar el nombre de una base de datos se utiliza el comando ALTER DATABASE
Ejercicio 22
Quita una o varias bases de datos o instantáneas de la base de datos de una instancia de
SQL Server
46
Ejercicio 23: En este ejemplo de eliminara la base de datos BDEjemplo_11.
DROP DATABASE BDEjemplo_11
Ejercicio 24
47
--02 Crear una instantánea de la base de datos Northwind
CREATE DATABASE Northwind_SNAPSHOT
ON
(
NAME= Northwind,
FILENAME='C:\DATA\Northwind_SNAPSHOT.MDF'
)
AS SNAPSHOT OF Northwind
Creación de Esquemas
48
acceso a un esquema. Un esquema puede ser propiedad de cualquier usuario y esta
propiedad es transferible.
Sintaxis
CREATE SCHEMA schema_name_clause [ <schema_element> [ ...n ] ]
<schema_name_clause> ::=
{
schema_name
| AUTHORIZATION owner_name
| schema_name AUTHORIZATION owner_name
}
<schema_element> ::=
{
table_definition | view_definition | grant_statement |
revoke_statement | deny_statement
}
USE BdEjemplo_01
GO
-- Crear el esquema Produccion
CREATE SCHEMA Produccion
49
La base de datos AdventureWorks presenta los siguientes esquemas:
dbo
HumanResources
Person
Production
Purchasing
Sales
50
3
Creación de Tablas
Las tablas son objeto de la base de datos que contiene todos sus datos. En las tablas, los
datos se organizan con arreglo a un formato de filas y columnas, similar al de una hoja de
cálculo. Cada fila representa a un registro único, y cada columna representa a un campo
dentro de un registro. Por ejemplo, en una tabla que contenga los datos de los empleados de
una compañía puede haber una fila para cada empleado y distintas columnas en las que
figuren detalles de los empleados tales como el numero de empleado, el nombre, la
dirección, el puesto que ocupa y su número de teléfono particular.
Columnas: Cada columna representa algún atributo del objeto representado por la tabla,
por ejemplo, una tabla de Artículos tendría columnas para el IdArticulo descripción y
precio.
Filas: Cada fila representa una ocurrencia individual del objeto representado por la tabla.
Por ejemplo, la tabla de Artículos tendría una fila por cada una de los artículos
comercializados por la empresa.
51
Si deben utilizarse ( y cuando) restricciones o valores predeterminados y reglas.
Los tipos de índices necesarios, donde se necesitan y que columnas son claves
principales y claves externas.
También es posible crear una tabla básica y luego modificarla según las necesidades que se
pueden establecer posteriormente.
Como cada columna representa un atributo de un objeto, los datos de cada ocurrencia de la
columna son similares. Una de las propiedades de las columnas es su tipo de datos, que
define el tipo de datos que la columna puede almacenar. A continuación se definen los
diferentes tipos de datos que se pueden utilizar en SQL Server.
Tipos de datos
SQL Server tiene varios tipos de datos básicos, seleccionar el tipo de dato adecuado
consiste en asociar el dominio de valores que necesite almacenar con el tipo de dato
correspondiente. Al elegir tipos de datos para asignarlos a las diferentes columnas deberá
evitar desperdiciar espacio de almacenamiento y a la vez proporcionar espacio suficiente
para el rango de valores posibles en las columnas. Los tipos de datos disponibles en SQL
Server 2008 se muestra a continuación:
A continuación se presenta un listado con los tipos de datos que se utilizan en SQL Server
2008
Numéricos exactos
bigint numeric
bit smallint
decimal smallmoney
int tinyint
money
52
Numéricos aproximados
float real
Fecha y hora
date datetimeoffset
datetime2 smalldatetime
datetime time
Cadenas de caracteres
char varchar
text
ntext
Cadenas binarias
binary varbinary
image
hierarchyid uniqueidentifier
sql_variant xml
table
53
Descripción de los principales tipos de datos
Tipos de datos Numéricos exactos
Microsoft SQL Server tiene los siguientes tamaños de tipos de datos enteros:
bigint
Tiene una longitud de 8 bytes y almacena números de –2^63 (-
9.223.372.036.854.775.808) a 2^63-1 (9.223.372.036.854.775.807).
integer o int
smallint
tinyint
54
Decimal y numeric
1–9 5
10-19 9
20-28 13
29-38 17
55
Números aproximados
float y real
Los tipos de datos float y real se conocen como tipos de datos aproximados. El
comportamiento de float y real sigue la especificación IEEE 754 acerca de los tipos de
datos numéricos aproximados.
Los tipos de datos numéricos aproximados no almacenan los valores exactos especificados
para muchos números; almacenan una aproximación muy precisa del valor. Para muchas
aplicaciones, la pequeña diferencia entre el valor especificado y la aproximación
almacenada no es apreciable. Sin embargo, a veces la diferencia se hace notar. Debido a la
naturaleza aproximada de los tipos de datos float y real, no los use cuando necesite un
comportamiento numérico exacto, como, por ejemplo, en aplicaciones financieras, en
operaciones que conlleven un redondeo o en comprobaciones de igualdad. En su lugar, use
los tipos de datos enteros, decimal, money o smallmoney.
Resumen
Tipo moneda
56
Resumen
Date
Datetime
Define una fecha que se combina con una hora del día con fracciones de segundos basada
en un reloj de 24 horas.
Smalldatetime
Define una fecha que se combina con una hora del día. La hora está en un formato de día de
24 horas , con segundos siempre a cero (: 00) y sin fracciones de segundo.
Datetime2
Define una fecha que se combina con una hora de día basada en el reloj de 24 horas.
datetime2 puede considerarse una extensión del tipo datetime existente que tiene un
intervalo de fechas mayor, un valor predeterminado mayor de precisión fraccionaria y
precisión especificada por el usuario opcional.
57
Time
Define una hora de un día. La hora no distingue la zona horaria y está basada en un reloj de
24 horas.
Datetimeoffset
Define una fecha que se combina con una hora del día con reconocimiento de zona horaria
y basado en un reloj de 24 horas
Resumen
date 2007-05-08
Cadenas de caracteres
char y varchar
char [ ( n ) ]
Datos de caracteres no Unicode de longitud fija, con una longitud de n bytes. n debe
ser un valor entre 1 y 8.000. El tamaño de almacenamiento es n bytes. El sinónimo
ISO de char es el tipo character.
58
varchar [ ( n | max ) ]
nchar y nvarchar
Tipos de datos de caracteres, para datos Unicode de longitud fija, nchar, o variable,
nvarchar, y que utilizan el juego de caracteres UNICODE UCS-2.
nchar [ ( n ) ]
nvarchar [ ( n | max ) ]
59
binary [ ( n ) ]
Datos binarios de longitud fija con una longitud de n bytes, donde n es un valor que
oscila entre 1 y 8.000. El tamaño de almacenamiento es de n bytes.
varbinary [ ( n | max) ]
Datos binarios de longitud variable. n puede ser un valor que oscila entre 1 y 8.000.
max indica que el tamaño máximo de almacenamiento es de 2^31-1 bytes. El
tamaño de almacenamiento es la longitud real de los datos especificados + 2 bytes.
Los datos especificados pueden tener una longitud de 0 bytes. El sinónimo de ANSI
SQL para varbinary es binary varying.
cursor
Un tipo de datos para las variables o para los parámetros de resultado de los procedimientos
almacenados que contiene una referencia a un cursor. Las variables creadas con el tipo de
datos cursor aceptan NULL.
Las operaciones a las que pueden hacer referencia las variables y parámetros que tienen un
tipo de datos cursor son:
La función CURSOR_STATUS.
60
hierarchyid
El tipo de datos del sistema de hierarchyid es de longitud variable. Use hierarchyid para
representar la posición en una jerarquía. Una columna de tipo hierarchyid no representa
automáticamente un árbol. Dependerá de la aplicación generar y asignar los valores
hierarchyid de tal forma que la relación deseada entre las filas se refleje en los valores.
Un valor del tipo de datos hierarchyid representa una posición en una jerarquía de árbol.
uniqueidentifier
Es un GUID de 16 bytes
Una columna o una variable local de tipo de datos uniqueidentifier se puede inicializar en
un valor de las siguientes formas:
Es el tipo de datos que almacena datos de XML. Puede almacenar instancias de xml en una
columna o una variable de tipo xml.
CREATE TYPE
Crea un tipo de datos de alias o un tipo definido por el usuario en la base de datos actual.
La implementación de un tipo de datos de alias se basa en un tipo nativo del sistema de
SQL Server. Un tipo definido por el usuario se implementa a través de una clase de un
61
ensamblado de Common Language Runtime (CLR) de Microsoft .NET Framework. Para
enlazar un tipo definido por el usuario a su implementación, el ensamblado CLR que
contiene la implementación del tipo debe registrarse primero en SQL Server mediante
CREATE ASSEMBLY.
Sintaxis
FROM base_type
[ ( precision [ , scale ] ) ]
[ <table_constraint> ] [ ,...n ] )
}[;]
Argumentos:
schema_name
Es el nombre del esquema al que pertenece el tipo de datos de alias o el tipo
definido por el usuario.
type_name
Es el nombre del tipo de datos de alias o del tipo definido por el usuario. Los
nombres de tipos deben cumplir las reglas de los identificadores.
base_type
Es el tipo de datos suministrado por SQL Server en el que se basa el tipo de datos
de alias
Ejemplo:
62
Ejercicio 26: Crear le tipo de dato DNI basado en CHAR(8)
USE BdEjemplo_01
GO
USE BdEjemplo_01
GO
GO
Ejercicio 29: Crear le tipo de dato Telefono basado en CHAR(7) y que acepte NULL
DROP TYPE
Quita de la base datos actual un tipo de datos de alias o un tipo definido por el usuario de
Common Language Runtime (CLR).
63
Ejercicio 30:
USE BdEjemplo_01
GO
DROP TYPE Telefono
GO
Elimina el tipo de dato Telefono de la base de datos BDEjemplo_01
Sintáxis
CREATE TABLE
[ database_name . [ schema_name ] . | schema_name . ] table_name
( { <column_definition> | <computed_column_definition>
| <column_set_definition> }
[ <table_constraint> ] [ ,...n ] )
[ ON { partition_scheme_name ( partition_column_name ) | filegroup
| "default" } ]
[ { TEXTIMAGE_ON { filegroup | "default" } ]
[ FILESTREAM_ON { partition_scheme_name | filegroup
| "default" } ]
[ WITH ( <table_option> [ ,...n ] ) ]
[;]
Sintaxis reducida
-- TABLA PRODUCTO
USE BdEjemplo_01
GO
IF EXISTS (SELECT * FROM SysObjects WHERE Type='U' and Name='Producto')
DROP TABLE Producto
GO
64
CREATE TABLE Producto
(
IdProducto CHAR(5) NOT NULL,
Pro_Nombre VARCHAR (40) NOT NULL,
Pro_PrecioUnitario DECIMAL (10,2) NULL,
Pro_CantidadStock INT NOT NULL,
Pro_FechaCompra DATETIME NOT NULL,
Pro_Discontinuo BIT NOT NULL
)
GO
USE BDEjemplo_01
GO
SELECT table_name
FROM information_schema.tables
WHERE table_name = 'Producto'
GO
Ejercicio 33: Creación de la tabla Cliente utilizando los tipos de datos definidos por el
usuario: dirección y teléfono
-- TABLA CLIENTE
USE BdEjemplo_01
GO
65
Ejercicio 34: Creación de la tabla Empleado utilizando los tipos de datos definidos por
el usuario: dirección, teléfono y distrito
--TABLA EMPLEADO
USE BdEjemplo_01
GO
)
GO
SELECT table_name
FROM information_schema.tables
WHERE table_name = 'Cliente' OR
table_name = 'Empleado'
GO
66
Creación de tablas utilizando Microsoft SQL Server Management Studio (SSMS)
67
Ingresar: IDDistrito CHAR(3) y Nombre VARCHAR(30)
Cerrar el editor para ingresar el nombre de la tabla: Distrito
El procedimiento sp_help
Sintáxis
sp_help nombre_objeto_basedatos
68
Modificación de la definición de una tabla
En una tabla podemos añadir nuevas columnas, eliminar columnas, cambiar las propiedades
de una columna, añadir ó eliminar restricciones.
Sintáxis
nuevas_propiedades_columna
69
| ADD CONSTRAINT nombre_restricción
| DEFAULT… | CHECK…
USE BdEjemplo_01
GO
USE BdEjemplo_01
GO
USE BdEjemplo_01
GO
70
ALTER TABLE Empleado
ADD IDDistrito CHAR(3) NOT NULL
Ejercicio 39: Para el siguiente ejemplo crear una Tabla llamada Usuario.
-- TABLA USUARIO
USE BdEjemplo_01
GO
USE BdEjemplo_01
GO
Ejercicio 42: Ejecutar el procedimiento almacenado del sistema so_help para verificar
los cambios.
71
4
Integridad de datos
La integridad de los datos se refiere a la consistencia y exactitud de los datos que se
guardan en una base de datos.
Dos pasos importantes en el diseño de las tablas son la identificación de valores válidos
para una columna y la determinación de cómo forzar la integridad de los datos en la
columna.
Niveles de la integridad de datos
Integridad de entidad
Integridad de dominio
Integridad referencial
Integridad de entidad
Una tabla almacena los datos de cada una de las ocurrencias de una entidad. La entidad (o
tabla) requiere que todas sus filas sean únicas. Esto se garantiza definiendo para cada fila de
la entidad un identificador único (llave primaria). Por ejemplo, en la tabla Empleado, cada
fila de la tabla debe representar a solo un empleado; un empleado no puede aparecer
registrado en dos filas de la tabla.
72
Restricciones PRIMARY KEY
Restricciones UNIQUE
La propiedad IDENTITY).
Para crear la restricción de clave primaria de una tabla se utiliza el comando ALTER
TABLE o al momento de crear la tabla.
Sintáxis
73
columnaX, columnaP, es la columna ó combinación de columnas que se define como
clave primaria. Las columnas involucradas no deben permitir valores nulos, y además,
no deben tener valores duplicados. En el caso de una combinación de columnas, la
combinación vista como una unidad no debe tener valores duplicados.
Ejercicio 43: Creación de la clave primaria de la tabla Cliente
USE BDEjemplo_01
GO
GO
USE BDEjemplo_01
GO
GO
USE BDEjemplo_01
GO
GO
74
El procedimiento almacenado sp_helpconstraint
Devuelve la lista de todos los tipos de restricciones, el nombre definido por el usuario o
proporcionado por el sistema, las columnas en que se han definido y la expresión que
define la restricción (sólo para las restricciones DEFAULT y CHECK).
EXECUTE sp_helpconstraint Cliente
La Restricción UNIQUE
Puede utilizar restricciones UNIQUE para asegurar que no se escriban valores duplicados
en columnas específicas que no formen parte de una clave principal. Aunque tanto una
restricción UNIQUE como PRIMARY KEY exigen que los elementos sean únicos, es
preferible utilizar una restricción UNIQUE en vez de una restricción PRIMARY KEY
cuando desee exigir la unicidad de:
Una columna o una combinación de columnas que no sea la clave principal.
En una tabla se puede definir varias restricciones UNIQUE, pero sólo una
restricción PRIMARY KEY.
Una columna que acepte valores NULL.
75
Las restricciones UNIQUE pueden definirse en columnas que aceptan valores
NULL, mientras que las restricciones PRIMARY KEY sólo pueden definirse en
columnas que no aceptan valores NULL.
Sintáxis
USE BDEjemplo_01
GO
UNIQUE (Cli_RazonSocial);
GO
La propiedad IDENTITY
Crea una columna de identidad en una tabla. Esta propiedad se utiliza con las instrucciones
CREATE TABLE y ALTER TABLE de Transact-SQL.
76
Ejercicio 47: Creación de la tabla Categoria con el campo IDCategoria de tipo INT y
que tenga la propiedad IDENTITY.
USE BDEjemplo_01
GO
--
);
GO
Cuando ingrese valores a la tabla Categoria solo debe ingresar valores en la columna
Nombre, el sistema genera de forma automáticamente los valores en la columna
IDCategoria; esto garantiza que dichos valores no se duplican en la tabla.
Ejercicio 48:
VALUES ('Computadoras');
VALUES ('Impresoras');
VALUES ('Monitores');
Integridad de dominio
77
La integridad de dominio se define mediante reglas de validación, valores predeterminados,
conjunto de valores permitidos en la columna (llave foránea), tipo y formato de los datos.
Por ejemplo, en una tabla Empleado se puede requerir que el valor mínimo válido para la
columna sueldoBase sea 420; cualquier valor menor a éste debe ser rechazado por la base
de datos.
La integridad de dominio se puede implementar mediante:
Restricciones CHECK
Definiciones DEFAULT
Restricciones CHECK
Las restricciones CHECK exigen la integridad del dominio mediante la limitación de los
valores que se pueden asignar a una columna.
Una restricción CHECK especifica una condición de búsqueda de tipo booleano (TRUE o
FALSE) que se aplica a todos los valores que se escriben en la columna; los valores para
los que el resultado no sea TRUE se rechazan. En una misma columna se pueden
especificar varias restricciones CHECK. Como ejemplo se puede crear una restricción
CHECK que compruebe que la fecha ingresada sea igual o mayor a la fecha del sistema.
Sintáxis
CHECK( condición )
78
CK_nombre_tabla_nombre_columna es el nombre de la restricción regla de validación
ó CHECK. Se recomienda definir como nombre de la restricción, el nombre de la tabla
seguido del nombre de la columna afectada, todo con el prefijo CK_. Si no se especifica
el nombre de la restricción, SQL Server le asigna un nombre.
El IDDistrito debe tener el siguiente formato L99, empezar con la letra L y luego dos
dígitos.
--
VALUES('L28','Independencia', 'IND');
Las restricciones FOREIGN KEY identifican las relaciones entre las tablas.
Una clave externa de una tabla apunta a una clave candidata de otra tabla. Las claves
externas evitan acciones que podrían dejar filas con valores de claves externas cuando no
hay claves candidatas con ese valor.
79
Por ejemplo cuando se ingrese un valor en la columna IDDistrito en la tabla Cliente este
valor debe existir en la tabla Distrito, en caso contrario se debe producir un error.
Creación de clave foránea
Sintáxis
REFERENCES tabla_referenciada
Ejercicio 50:
Nota: Antes de crear la clave foránea de la tabla Cliente se debe crear la clave primaria de
la tabla Distrito
80
Ejercicio 51: Creación de la clave foránea en la tabla Cliente que referencia a la tabla
Distrito.
La columna IDDistrito de la tabla Cliente establece la relación de esta tabla con la tabla
Distrito. La clave foránea en IDDistrito de Cliente apunta a la clave primaria en IDDistrito
de la tabla Distrito.
Nota: Antes de crear la clave foránea de la tabla Producto se debe añadir la columna
IDCategoria a la tabla Producto.
GO
81
Definiciones DEFAULT
Constante
Función integrada
Expresión matemática
Sintáxis
82
Ejercicio 53: Creación de restricción DEFAULT para la columna Discontinuo en la
tabla Producto
Para cada producto, el valor para la columna Discontinuo es 0.
GO
Integridad referencial
La integridad referencial garantiza que la relación entre la llave primaria (en la tabla
referenciada) y la llave foránea (en la tabla de referencia) siempre se mantiene. Una fila en
una tabla referenciada no puede anularse, ni cambiar su valor de la llave primaria, si una
llave foránea se refiere a la fila. Por ejemplo, si tenemos las tablas Dependencia y
Empleado, cada empleado debe pertenecer a solo una dependencia; es decir, cada fila de la
tabla Empleado debe estar relacionada con una fila de la tabla Dependencia, pero una fila
de la tabla Dependencia puede estar relacionada con muchas filas de la tabla Empleado ya
que una dependencia puede tener muchos empleados.
83
Resumen
PRIMARY KEY Garantiza que cada fila ó registro en una tabla es único(a). La columna ó
(clave primaria) combinación de columnas definida como clave primaria no permite valores
duplicados.
UNIQUE Garantiza que cada valor en una columna es único. Permite valores únicos
(valor no duplicado)
DEFAULT Establece el valor predeterminado para una columna cuando al insertar una
(valor fila no se especifica el valor para dicha columna.
predeterminado)
CHECK Establece la regla que debe cumplir un valor para que sea un valor aceptable
(regla de validación) en una columna.
84
5
Modificación de datos
Cuando se termine de crear las tablas y restricciones es necesario ingresar los datos,
modificar los datos existentes o quizás eliminar algunos datos, para lograr estos objetivos
SQL Server proporciona un conjunto de sentencias que forman lo que se denomina el
Lenguaje de manipulación de datos (DML).
El Lenguaje de manipulación de datos (DML) se utiliza para seleccionar, insertar,
actualizar y eliminar datos en los objetos definidos mediante sentencias de definición de
datos (DDL).
Las sentencias utilizadas son:
SELECT
INSERT
UPDATE
DELETE
El proceso de inserción de filas consiste en añadir a una tabla una o más filas y en cada fila
todos o parte de sus campos.
Sintaxis
VALUES( lista_de_valores )
85
lista_de_columnas es la relación de columnas en las que se almacenarán los valores
especificados en lista_de_valores.
lista_de_valores es la relación de los valores a almacenar en la fila a insertar.
Los elementos de ambas listas van separados por comas
Ejercicio 54: Inserción de una fila con lista de valores completa a la tabla Cliente
La tabla Categoria tiene la columna IDCategoria con la propiedad IDENTITY por lo tanto
no se debe incluir en la lista de campos y tampoco proporcionar un valor.
86
Cambiar datos
Una vez que se han creado las tablas y se han agregado los datos, cambiar o actualizar los
datos de las tablas se convierte en uno de los procesos diarios de mantenimiento de una
base de datos. Microsoft® SQL Server™ proporciona la instrucción UPDATE para
cambiar los datos de una tabla existente
Actualización de datos (la instrucción UPDATE)
Sintáxis
UPDATE nombre_tabla
[ WHERE condición_de_las_filas_a_actualizar ]
87
3245657 6341223
UPDATE Cliente
SET Cli_RazonSocial='Av. San Borja Norte 1345',
Cli_Telefono='6341223'
WHERE IdCliente='C001'
Sintáxis
[ WHERE condición_de_las_filas_a_eliminar ]
USE BDEjemplo_01
GO
DELETE FROM Cliente
WHERE IdCliente='C001'
88
6
Consultas
Una consulta es una petición de datos almacenados en Microsoft® SQL Server. Aunque las
consultas tienen varias formas de interactuar con un usuario, todas realizan la misma tarea:
presentan al usuario el conjunto de resultados de una instrucción SELECT. La instrucción
SELECT recupera los datos de SQL Server y los presenta de nuevo al usuario en uno o más
conjuntos de resultados. Un conjunto de resultados es una organización tabular de los datos
obtenidos de SELECT. Al igual que una tabla de SQL, el conjunto de resultados está
formado por columnas y filas.
La instrucción SELECT
Sintáxis básica
SELECT * | lista_columnas
FROM nombre_tabla
[ WHERE condición_filas ]
89
lista_columnas es la lista de columnas a mostrar en el resultado de la consulta. Si se
especifica * se mostrarán todas las columnas de la tabla.
condición_filas es una expresión lógica que indica que las filas a mostrar son aquellas
para las que el valor de la expresión es verdadero.
El siguiente diagrama muestra el modelo de la base de datos Northwind que se usará en los
ejemplos.
Orders Employees
Customers EmployeeID
OrderID
CustomerID
CustomerID LastName
CompanyName
EmployeeID FirstName
ContactName
OrderDate Title
ContactTitle
RequiredDate TitleOfCourtesy
Address
ShippedDate BirthDate
City
ShipVia HireDate
Region
Freight Address
PostalCode
ShipName City
Country
ShipAddress Region
Phone
ShipCity PostalCode
Fax
ShipRegion Country
ShipPostalCode HomePhone
ShipCountry Extension
Shippers
Photo
ShipperID
Notes
CompanyName
ReportsTo
Phone
PhotoPath
Order Details
OrderID
ProductID Suppliers
Products SupplierID
UnitPrice
ProductID
Quantity CompanyName
ProductName
ContactName
Discount SupplierID
ContactTitle
CategoryID
Address
QuantityPerUnit
City
UnitPrice
Region
UnitsInStock
Categories PostalCode
UnitsOnOrder
CategoryID Country
ReorderLevel
CategoryName Phone
Discontinued
Description Fax
Picture HomePage
Ejercicio 58: Lectura de todos los datos de la tabla Customers. Utilizar el carácter *
para indicar que se solicitan todas las columnas.
90
GO
-- Consultar la tabla Clientes
SELECT * FROM Customers
-- Consultar la tabla Productos
SELECT * FROM Products
Ejercicio 59: Lectura de todos los datos de la tabla Customers mostrando las
columnas ProductID,ProductName UnitPrice
SELECT ProductID ,ProductName,UnitPrice
FROM Products
Ejemplo: Utilizando un alias para las cabeceras de columnas
-- Utilizar un alias
91
SELECT ProductID AS 'Codigo',ProductName AS 'Producto',
UnitPrice AS 'Precio'
FROM Products
SELECT OrderID,ProductID,UnitPrice,Quantity,Discount,
UnitPrice*Quantity AS 'SubTotal'
FROM [Order Details]
92
Definición de filtros de fila en SELECT
93
Ejercicio 63: Uso del operador mayor que >
-- Listado de productos con precio mayor a 20
SELECT * FROM Products
WHERE UnitPrice> 20
Sintáxis
SELECT * | lista_columnas
FROM nombre_tabla
BETWEEN indica que el valor en columna debe encontrarse en el rango definido por
valor_inicial y valor_final.
valor_inicial, valor_final, establecen los límites del rango de valores en el que se basa la
búsqueda.
94
Ejercicio 64: Uso del operador BETWEEN
95
Sintáxis
SELECT * | lista_columnas
FROM nombre_tabla
IN indica que el valor en columna debe encontrarse (IN), ó no debe encontrarse (NOT IN)
en el conjunto definido por conjunto_de_valores.
-- Listado de las ordenes emitidas por los clientes ANTON y VINET y que fueron atendidos
por los empleados con código 1 y 5
96
Consultas a cadenas de caracteres. El operador LIKE
Determina si una cadena de caracteres dada coincide o no con un determinado modelo. Un
modelo puede incluir caracteres normales y caracteres comodín. Durante la coincidencia de
patrones, los caracteres regulares deben coincidir exactamente con los caracteres
especificados en la cadena de caracteres. Sin embargo, los caracteres comodín pueden
coincidir con fragmentos arbitrarios de la cadena de caracteres. Con los caracteres comodín
el operador LIKE es más flexible que los operadores de comparación de cadenas = y !=. Si
alguno de los argumentos no es del tipo de datos de cadena de caracteres, Microsoft® SQL
Server™ lo convierte al tipo de datos de cadena de caracteres, si es posible.
Sintáxis
SELECT * | lista_columnas
FROM nombre_tabla
WHERE columna LIKE expresión_cadena_a_buscar
columna, es la columna en la que se busca la cadena de caracteres.
El siguiente cuadro muestra los comodines que puede utilizar con el operador LIKE.
Comodín Descripción
97
[a-b] Establece el rango de caracteres válidos en la posición del comodín.
98
Ejercicio 74: Uso del comodín ^
Listado de clientes que no tengan la letra a,b,c,d como primer carácter en el nombre
SELECT * FROM Customers
WHERE CompanyName LIKE '[^abcd]%'
Ejercicio 75: Uso del comodín [a-c]
Son funciones que permiten efectuar una operación aritmética que resume los valores de
una columna de toda la tabla, o que resume los valores de la columna agrupados según
determinado criterio. La función produce un solo valor que es el resumen de la tabla, o de
cada uno de los grupos.
99
Puede usar las funciones de agregación con la declaración SELECT o en combinación con
la cláusula GROUP BY.
Con excepción de la función COUNT(*), todas las funciones de resumen retornan NULL si
ninguna fila satisface la cláusula WHERE. La función COUNT (*) retorna un valor de cero
si ninguna fila satisface la cláusula WHERE.
Las funciones de agregación son: AVG (), COUNT (), MAX (), MIN () y SUM ()
Función Descripción
Sintáxis
Ejercicio 80: Obtener el precio unitario promedio de todos los productos en la tabla
Products de la base de datos Northwind.
100
SELECT AVG(UnitPrice) AS 'Precio promedio'
FROM Products
Ejercicio 81: Obtener el precio unitario máximo de todos los productos en la tabla Products
de la base de datos Northwind.
Ejercicio 82: Obtener el stock valorado en la tabla Products de la base de datos Northwind.
Sintáxis
COUNT( * )
DISTINCT indica que debe eliminarse los valores duplicados de expresión antes de
evaluar la función.
101
Ejercicio 83: Obtener el precio unitario máximo, mínimo, promedio de todos los productos
en la tabla Products de la base de datos Northwind. Además mostrar el número de
productos.
SELECT MAX(UnitPrice) AS 'Precio mayor',
MIN(UnitPrice) AS 'Precio menor',
AVG(UnitPrice) AS 'Precio promedio',
COUNT(*) AS 'numero de productos'
FROM Products
La cláusula GROUP BY
La cláusula GROUP BY se utiliza para agrupar las filas en base a determinado criterio, y
luego ejecutar una operación que resume un atributo para cada uno de los grupos así
formados. Por ejemplo, puede utilizar GROUP BY para agrupar todas las facturas por
cliente, y luego calcular el monto total facturado de cada cliente.
102
Sintáxis
función_agregación(columna), ...
FROM nombre_tabla
[ WHERE condición_filas ]
GROUP BY lista_columnas
[ HAVING condición_grupos ]
Una consulta GROUP BY solo entrega una fila por cada grupo generado. Esta fila
muestra el resultado de la función_agregación aplicada sobre el grupo. No muestra el
contenido del grupo.
Cuando se utiliza GROUP BY sobre una columna que contiene valores NULL, éstos se
procesan como un grupo.
Mostrar un listado que muestre el código del Cliente y el numero de pedidos que
realizo cada cliente.
103
SELECT CustomerID , COUNT(OrderID) AS 'nro Pedidos'
FROM Orders
GROUP BY CustomerID
ORDER BY 2 DESC
Ejercicio 85: Mostrar un listado que muestre el código del Empleado y el número de
pedidos que atendió cada empleado.
104
Ejercicio 87: Mostrar un listado que muestre el código de categoria y el promedio de
precios por categoría.
SELECT CategoryID, AVG(UnitPrice) AS 'promedio de precios'
FROM Products
GROUP BY CategoryID
El siguiente cuadro muestra una lista de las funciones para manipular fechas.
Función Descripción
105
datediff(parte_fecha, fecha1, Entrega la diferencia entre fecha1 y fecha2 en las
fecha2) unidades indicadas en parte_fecha.
El siguiente cuadro muestra las parte_fecha que podemos especificar en las funciones de
fecha listadas arriba.
106
weekday dw Día de la semana de la fecha
107
USE Northwind
GO
SELECT * FROM Orders
WHERE DATEPART(YEAR,OrderDate)= 1996
GO
Ejercicio 97: Listado de ordenes emitidas en el mes de febrero del año 1997
SELECT * FROM Orders
WHERE DATEPART(YEAR,OrderDate)= 1997 AND
DATEPART(MONTH,OrderDate)= 2
Ejercicio 98: Listado de ordenes emitidas el segundo trimestre del año 1996
SELECT * FROM Orders
WHERE DATEPART(YEAR,OrderDate)= 1996 AND
DATEPART(QUARTER,OrderDate)=2
GO
Ejercicio 99: Listado de ordenes emitidas en la primera quincena del mes de Agosto del
año 1996
SELECT * FROM Orders
WHERE DATEPART(YEAR,OrderDate)= 1996 AND
DATEPART(MONTH,OrderDate)=8 AND
(DATEPART(DAY,OrderDate) BETWEEN 1 AND 15)
108
Ejemplos de uso de la función DATENAME()
Ejercicio 100: Mostrar el nombre del mes correspondiente a la fecha del sistema.
SET LANGUAGE Spanish
PRINT DATENAME(MONTH,GETDATE())
Se cambió la configuración de idioma a Español.
Agosto
Ejercicio 101: Mostrar el nombre del día de la semana correspondiente a la fecha del
sistema.
PRINT DATENAME(WEEKDAY,GETDATE())
En la mayoría de los casos, la recuperación de los datos que los usuarios necesitan para
trabajar implica la lectura de muchas tablas para que la información así obtenida sea de
utilidad para ellos. En este capítulo veremos el diseño de las instrucciones SELECT que
nos permiten recuperar datos de varias tablas en un solo conjunto de resultados.
Consultas correlacionadas
109
filas de las tablas ó conjuntos de filas se combinan relacionando valores comunes,
típicamente valores de clave primaria y clave foránea.
Sintáxis general
SELECT lista_columnas
FROM tabla1
condición_del_join es una expresión que indica en base a qué columnas de cada una de
las tablas se establece la relación entre ellas.
INNER JOIN
OUTER JOIN
CROSS JOIN
INNER JOIN
110
Un INNER JOIN es la consulta correlacionada que combina todas las filas que están
relacionadas de las dos tablas ó conjuntos de filas.
Ejercicio 103: Generar un listado que presente los siguientes campos: OrderID,
CompanyName y OrderDate. La información requerida proviene de dos tablas Orders y
Customers.
FROM Orders
ON Orders.CustomerID=Customers.CustomerID
Ejercicio 104: Generar un listado que presente los siguientes campos: OrderID, Nombre
del empleado y OrderDate. La información requerida proviene de dos tablas Orders y
Employees.
SELECT Orders.OrderID, Employees. FirstName + ' ' +
FROM Orders
ON Orders.EmployeeID=Employees.EmployeeID
Ejercicio 105: Generar un listado que presente los siguientes campos: ProductName,
CategoryName, UnitPrice. La información requerida proviene de dos tablas Products y
Categories.
SELECT Products.ProductName, Categories. CategoryName,
Products.UnitPrice
FROM Products
111
INNER JOIN Categories
ON Products.CategoryID=Categories.CategoryID
Ejercicio 107: Generar un listado que presente los siguientes campos: ProductName y
CompanyName. La información requerida proviene de dos tablas Products y Suppliers.
SELECT Products.ProductName, Suppliers.CompanyName
FROM Products
N Products.SupplierID=Suppliers.SupplierID
Ejercicio 108: Generar un listado que presente los siguientes campos: CategoryName, y
el promedio de precios por categoría. La información requerida proviene de dos tablas
Categories y Products.
SELECT Categories.CategoryName,AVG(Products.UnitPrice) AS 'Promedio'
FROM Categories
ON Categories.CategoryID=Products.CategoryID
GROUP BY Categories.CategoryName
Ejercicio 109: Consulta a tres tablas. Generar un listado que presente los siguientes
campos: ProductName, CategoryName, CompanyName y UnitPrice. La información
requerida proviene de tres tablas Products, Categories y Supplies.
SELECT Products.ProductName, Categories.CategoryName,
Suppliers.CompanyName, Products.UnitPrice
FROM Products
ON Products.CategoryID =Categories.CategoryID
ON Products.SupplierID=Suppliers.SupplierID
112
OUTER JOIN
Un OUTER JOIN es la consulta correlacionada que entrega todas las filas que están
relacionadas, y además:
las filas no relacionadas de la tabla izquierda (LEFT OUTER JOIN), ó
las filas no relacionadas de la tabla derecha (RIGHT OUTER JOIN), ó
las filas no relacionadas de ambas tablas (FULL OUTER JOIN)
Se considera como la tabla izquierda, a aquella que se menciona primero en la cláusula
FROM.
Ejercicio 110: Uso de LEFT OUTER JOIN
SELECT Orders.OrderID,Customers.CompanyName
FROM Orders
ON Orders.CustomerID=Customers.CustomerID—830 Filas
SELECT Orders.OrderID,Customers.CompanyName
FROM Orders
ON Orders.CustomerID=Customers.CustomerID—832 filas
SELECT Orders.OrderID,Customers.CompanyName
FROM Orders
ON Orders.CustomerID=Customers.CustomerID—832 filas
113
CROSS JOIN
Un CROSS JOIN es la consulta correlacionada que combina cada una de las filas de una de
las tablas con todas las filas de la otra tabla.
No es necesario que exista una columna común para ejecutar cross join. Esta consulta
también se conoce como el producto cartesiano de dos tablas.
SELECT Orders.OrderID,Customers.CompanyName
FROM Orders
Subconsultas
114
Ejercicio 105: Genere un listado que muestre el nombre y el precio de los productos
con precio igual al producto más caro.
USE Northwind
GO
FROM Products
FROM Products
10 Ikura 31,00
Ejercicio 107: Genere la lista de los clientes que no se han registrado una orden.
Mostrar el código y el nombre del Cliente.
FROM Customers
FROM Orders
WHERE Customers.CustomerID=Orders.CustomerID)
El usuario accede a la data importante o apropiada para él. Limita el acceso a datos
sensibles.
Oculta la complejidad del modelo de datos. Un join de múltiples tablas se convierte en
un simple SELECT para el usuario.
Desde el punto de vista del usuario, una vista es una "tabla" pues puede ejecutar en ella
todas las operaciones de datos: SELECT, INSERT, UPDATE y DELETE.
Debido a que una vista es un objeto de la base de datos, puede asignarle permisos de
usuario. Esto es mucho más eficiente que colocar los mismos permisos sobre columnas
individuales en una tabla.
Sintaxis
116
CREATE VIEW [ < database_name > . ] [ < owner > . ] view_name [ ( column [ ,...n ] ) ]
[ WITH < view_attribute > [ ,...n ] ]
AS
select_statement
[ WITH CHECK OPTION ]
Ejemplos de vistas
USE pubs
GO
AS
FROM titles
GO
Utilizar la vista
Ejercicio 109: Crear una vista que muestre la categoria y el promedio de precios de la
tabla Titles
USE pubs
GO
AS
FROM titles
GROUP BY type
117
Ejercicio 110: Crear una vista que muestreun reporte del producto más vendido por cada
categoria
AS
SELECT C.CategoryName,P.ProductName,
ON OD.ProductID=P.ProductID
ON P.CategoryID=C.CategoryID
GROUP BY C.CategoryNAme,P.ProductName
GO
Ejercicio 111: Consulta que para cada categoria extrae el producto con más ventas desde
la vista.
SELECT CAtegories.CategoryNAme,
WHERE CAtegories.CategoryNAme=v_VentasCategoriaProducto.CategoryNAme
WHERE CAtegories.CategoryNAme=v_VentasCategoriaProducto.CategoryNAme
FROM Categories
118