Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SQL2005
SQL2005
1
CREACIÓN DE BASES DE DATOS SQL SERVER 2005
TEMA:
En esta sesión se verá el proceso de creación de una base de datos, qué es el registro de transacciones, la
configuración de una base de datos, la administración de las propiedades de una base de datos, y que son
las instantáneas de base de datos y cómo se crean. Esta sesión nos será de gran utilidad para el desarrollo
de las siguientes sesiones o laboratorios.
OBJETIVOS ESPECIFICOS:
Utilizar los procedimientos necesarios para crear una Base de Datos utilizando la herramienta SQL Server
Management Studio.
CONTENIDO:
Componentes del SQL
Conociendo el SQL Server Management Studio.
Conociendo el editor Consultas: SQL Server Query.
El lenguaje SQL está compuesto por comandos, cláusulas, operadores y funciones de agregado. Estos
elementos se combinan en las instrucciones para crear, actualizar y manipular las bases de datos.
Comandos:
- Los DDL que permiten crear y definir nuevas base de datos, campos e índices
- Los DML que permiten generar consultas para ordenar, filtrar y extraer datos de las base de
datos.
Comandos DDL:
Comando Descripción
CREATE Utilizado para crear nuevas tablas, campos e índices
DROP Empleado para eliminar tablas e índices
ALTER Utilizado para modificar las tablas agregando campos o
cambiando la definición de los campos
Comandos DML:
Comando Descripción
SELECT Utilizado para consultar registros de la base de datos que satisfagan
un criterio determinado
INSERT Utilizado para cargar lotes de datos en la base de datos en una única
operación
UPDATE Utilizado para modificar los valores de los campos y registros
especificados
DELETE Utilizado para eliminar registros de una tabla de una base de datos
Cláusulas
Las cláusulas son condiciones de modificación utilizadas para definir los datos que desea seleccionar o
manipular.
Cláusula Descripción
FROM Utilizada para especificar la tabla de la cual se van a seleccionar
los registros
WHERE Utilizada para especificar las condiciones que deben reunir los
registros que se van a seleccionar
GROUP BY Utilizada para separar los registros seleccionados en grupos
específicos
HAVING Utilizada para expresar la condición que debe satisfacer cada
grupo.
ORDER BY Utilizada para ordenar los registros seleccionados de acuerdo
con un orden especifico
2
OPERADORES
Operadores Lógicos
Operador Uso
AND Es el “y” lógico. Evalúa dos condiciones y devuelve un valor de
verdad sólo si ambas son ciertas
OR Es el “o” lógico. Evalúa dos condiciones y devuelve un valor de
verdad si alguna de las dos es cierta
NOT Negación lógica. Devuelve el valor contrario de la expresión
Operador Uso
< Menor que
> Mayor que
<> Distinto de
<= Menor ó Igual que
>= Mayor ó igual que
= Igual que
BETWEEN Utilizado para especificar un intervalo de valores
LIKE Utilizado en la comparación de un modelo
In Utilizado para especificar registros de una base de datos
FUNCIONES DE AGREGADO
Las funciones de agregado se usan dentro de una cláusula SELECT en grupos de registros para
devolver un único valor que se aplica a un grupo de registros.
Funcion Descripción
AVG Utilizada para calcular el promedio de los valores de un campo determinado
COUNT Utilizada para devolver el número de registros de la selección
SUM Utilizada para devolver la suma de todos los valores de un campo determinado
MAX Utilizada para devolver el valor más alto de un campo especificado
MIN Utilizada para devolver el valor más bajo de un campo especificado
Nota: durante las demás sesiones se explicarán detalladamente como utilizar las instrucciones que
acabamos de mostrar.
Para crear una base de datos, determine el nombre de la base de datos, su tamaño y los archivos y grupos
de archivos utilizados para almacenarla.
Una base de datos SQL Server 2005 está formado por tres tipos de archivos para almacenar una base de
datos:
ARCHIVOS PRINCIPALES
Estos archivos contienen la información de inicio para la base de datos. Este archivo se utiliza
también para almacenar datos. Almacena las tablas del sistema de la base de datos, y puede
también almacenar las tablas de usuario y otros objetos de la base de datos. Cada base de datos
tiene un único archivo principal, siendo .mdf la extensión del archivo.
ARCHIVOS SECUNDARIOS
Estos archivos contienen todos los datos que no caben en el archivo de datos principal. No es
necesario que las bases de datos tengan archivos de datos secundarios si el archivo principal es lo
suficientemente grande como para contener todos los datos.
Algunas base de datos pueden ser muy grandes y necesitar varios archivos de datos secundarios o
utilizar archivos secundarios en unidades de disco distintas, de modo que los datos estén
distribuidos en varios discos.la extensión de los archivos secundarios es .ndf.
3
REGISTRO DE TRANSACCIONES(transaction log)
Estos archivos contienen la información de registros que se utiliza para recuperar la base de datos.
Debe haber al menos un archivo de registro de transacciones para cada base de datos, aunque
pueda haber más de uno. La extensión del archivo es .ldf
IMPORTANTE:
Es recomendable especificar el tamaño máximo de crecimiento del archivo. De ese modo se evita que se
agote el espacio disponible en el disco al agregar datos. Para especificar un tamaño máximo para el archivo,
utilice el parámetro MAXSIZE de la instrucción CREATE DATABASE o bien la opción limitar crecimiento de
archivo a (MB) cuando utilice el cuadro de dialogo propiedades del administrador de SQL Server para crear
la base de datos.
Después de crear una base de datos, se recomienda crear una copia de seguridad de la base de datos
master.
a) Sólo pueden crear base de datos las cuentas de inicio de sesión que pertencen a los roles fijos
de servidor Sysadmin y dbcreator, aunque el permiso se puede conceder a otras cuentas.
b) El usuario que crea la base de datos se convierte en el propietario(dbo) de la base de datos.
c) Defina el nombre y tamaño de la base de datos, los archivos (y sus propiedades) en los que
residirá la base de datos.
3.1 COMO CREAR UNA BASE DE DATOS (Usando SQL Server Management Studio)
1. Con el botón derecho (o el botón secundario), pulsa en Bases de datos y del menú selecciona
Nueva base de datos, tal como se muestra en la figura:
Entonces se abrirá una ventana en la cual daremos los datos correspondientes para crear nuestra base de
datos, el nombre que le di es MiDB:
4
3.2 COMO CREAR UNA BASE DE DATOS (USANDO EL EDITOR DE CONSULTAS)
Sintaxis:
CREATE DATABASE nombre_basedatos
ON [PRIMARY] (
NAME = nombre_lógico_data,
FILENAME = ‘Ubicación_y_nombre_archivo_data’,.mdf
SIZE = tamaño [ KB/ MB/GB/TB/ UNLIMITED ],
MAXSIZE = tamaño_máximo [ KB/ MB/GB/TB/ UNLIMITED ],
FILEGROWTH= incremento_crecimiento [ KB/ MB/ % ] )
[registro de transacciones]
LOG ON(
NAME = nombre_lógico_log,
FILENAME = ‘Ubicación_y_nombre_archivo_log’,.ldf
SIZE = tamaño [ KB/ MB/GB/TB ],
MAXSIZE = tamaño_máximo [ KB/ MB/GB/TB/ UNLIMITED ],
FILEGROWTH= incremento_crecimiento [ KB/ MB/ % ] )
1. En SQL Server Management Studio, en el menú File ejecute New, New SQL Server
Query. Luego, seleccione el servidor SQL al que desea conectarse
Ejemplo 01: Este ejemplo crea una base de datos llamada bd_ejemplo y crea los archivos principal
y de registro de transacciones correspondientes. Debido a que la instrucción no tiene elementos
<filespec>, el archivo principal de la base de datos tiene el tamaño del archivo principal de la base
de datos model. El registro de transacciones tiene el tamaño del archivo del registro de
transacciones de la base de datos model. Como no se ha especificado MAXSIZE, los archivos
pueden crecer hasta llenar todo el espacio disponible en el disco.
Ejemplo 02: En este ejemplo se crea una base de datos llamada VENTAS y se especifica un único
archivo. El archivo especificado se convierte en el archivo principal y se crea automáticamente un
archivo de registro de transacciones de 1 MB. Como no se especifican MB ni KB en el parámetro
SIZE del archivo principal, se asigna en Megabytes. Ya que no existe < filespec> para el archivo de
registro de transacciones, éste no tiene MAXSIZE y puede crecer hasta llenar todo el espacio
disponible en el disco.
5
c) CREAR UNA BASE DE DATOS SIN ESPECIFICAR SIZE
Ejemplo 03 : Este Ejemplo Crea una Base De Datos llamada Ventas2. El archivo venta2_dat se
convierte en el archivo principal, con un tamaño igual al tamaño del archivo principal de la base de
datos model. El archivo de registro de transacciones se crea automáticamente y es un 25 por ciento
del tamaño del archivo principal, o 512 KB, el que sea mayor. Como no se ha especificado
MAXSIZE, los archivos pueden crecer hasta llenar todo el espacio disponible en el disco.
( NAME = Arch3,
FILENAME = ‘C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\logidat3.ndf’,
SIZE = 5MB,
MAXSIZE = 10,
FILEGROWTH = 10)
LOG ON
( NAME = Logilog1,
FILENAME = ‘C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\logilog1.ldf’,
SIZE = 5MB,
MAXSIZE = 10,
FILEGROWTH = 10),
( NAME = Archlog2,
FILENAME = ‘C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\logilog2.ldf’,
SIZE = 5MB,
MAXSIZE = 10,
FILEGROWTH = 10)
El ejemplo crea una base de datos llamada Multiples_a con tres archivos de datos de 5 MB y dos archivos
de registro de transacciones de 5 MB. El archivo principal es el primer archivo de la lista y se especifica
explícitamente con la palabra clave PRIMARY. Los archivos de registro de transacciones se especifican a
continuación de las palabras clave LOG ON. Observe las extensiones que se emplean para los archivos de
la opción FILENAME: .mdf se utiliza para los archivos principales, .ndf para los archivos secundarios y .ldf
para los archivos de registros de transacciones. Ejecute el procedimiento almacenado sp_helpfile y observe
los resultados
Nota: Cuando se crea una base de datos se añade una entrada con el nombre de la base de datos, en la
tabla del sistema sysdatabases de la base de datos del sistema master.
2. Para revisar la tabla sysdatabases, digite y ejecute el siguiente procedimiento almacenado del
sistema:
EXEC sp_helpdb
El procedimiento sp_helpdb, entrega información acerca de todas las bases de datos del servidor, ó o de
una base de datos específica.
6
Sintaxis:
Sp_helpdb [ nombre_basedatos]
Otro procedimiento:
USE Multiples_a
GO
EXEC sp_helpfile.
Si desea cambiar el tamaño de la base de datos puede usar la instrucción ALTER DATABASE o utilizar
administrador SQL Server.
La instrucción ALTER DATABASE permite realizar cambios a una base de datos. Permite agregar o
eliminar archivos de una base de datos. También se puede usar para modificar los atributos de los
archivos, tales como el nombre o el tamaño de un archivo. También se puede usar para cambiar el
nombre de una base de datos.
Sintaxis:
ALTER DATABASE nombre_basedatos
ADD FILE especificación_archivo, …
ADD LOG FILE especificación_archivo
REMOVE FILE nombre_lógico_archivo
MODIFY FILE especificación_archivo
MODIFY FILE nuevo_nombre_basedatos
especificación_archivo, son los tributos del archivo de la base de datos, tal como se definieron en
el comando CREATE DATABASE
Ejemplo : el siguiente ejemplo modifica la base de datos ventas para agregarle un archivo de datos
de 5MB.
Ejemplo: el ejemplo siguiente aumenta el tamaño de uno de los archivos agregados a la base
de datos Ventas.
1. Primero averiguamos que tamaño tienen los archivos de la base de datos Ventas.
7
- Ejecutar el siguiente procedimiento almacenado sp_helpdb Ventas.
- Escribir las siguientes sentencias:
Ahora ejecute el procedimiento almacenado de sistema sp_helpdb para verificar que se haya
agrandado satisfactoriamente la base de datos:
Sintaxis:
Ejemplo: para reducir el tamaño del archivo primario de la base de datos bd_ejemplo hasta 3 MB:
Use bd_ejemplo
Go
Sintaxis:
Ejemplo: para reducir toda la base de dato bd_ejemplo hasta que quede solo 50% de espacio libre:
Hay veces en que es necesario eliminar una base de datos del sistema. Quizás ya no lo necesite o esta se
haya corrompido y tiene que reconstruirlo. En cualquier caso eliminar una base de datos es una tarea
relativamente directa, esta operación se puede hacer a través del SQL Server Management Studio o por
medio de Transact-SQL
8
Una instantánea de base de datos es una vista de la base de datos, estática y de sólo lectura, hasta un
instante de tiempo determinado. Se pueden crear varias instantáneas de una base de datos, y cada una de
ellas es consistente hasta el momento en que se creó la instantánea.
Como una instantánea de base de datos contiene la data hasta el momento de creación de la instantánea,
se puede utilizar para la creación de reportes con data hasta el momento específico en el tiempo.
Para crear una instantánea de base de datos hacemos uso de la instrucción CREATE DATABASE con
la siguiente sintaxis:
Sintaxis:
CREATE DATABASE nombre_instantánea_basedatos
ON (
NAME = nombre_lógico_archivo_basedatos_origen
FILENAME = nombre_físico_archivo_instantánea )
AS SNAPSHOT OF nombre_basedatos_origen
Ejemplo: el siguiente ejemplo crea una instantánea de la base de datos Ventas. Observe que el nombre se
ha especificado de modo que indica que representa una instantánea, e informa acerca del momento en que
se creó la instantánea.
AS SNAPSHOT OF Ventas
Go
PARA RECORDAR
Recuerde siempre que una base de datos es una colección de objetos, como tablas, vistas y procedimientos
almacenados. Cada base de datos tiene su propio registro de las transacciones y una base de datos se
mantiene coherente lógicamente en términos de restricciones de integridad entre los objetos de la misma. Si
deseamos crear una base de datos podemos hacerla de dos maneras, una usando SQL Server Management
Studio y la otra usando el editor de consultas.
TRABAJO:
9
CREACIÓN DE TABLAS E INTEGRIDAD DE RELACIÓN
CONTENIDO:
Los tipos de datos SQL Server 2005
Creación de tablas CREATE TABLE
Modificación de la definición de una tabla ALTER TABLE
Integridad de datos Las restricciones CONSTRAINTS.
PRIMARY KEY, FOREIGN KEY, UNIQUE, DEFAULT, CHECK, IDENTITY
TEMA:
Los sistemas de gestión de base de datos organizan y estructuran los datos de tal modo que puedan ser
recuperados y manipulados por usuarios y programas de aplicación. La estructura más importante de una
base de datos relacional son las tablas. En esta sesión aprenderemos a creerlas y relacionarlas de la
manera ideal.
OBJETIVOS ESPECIFICOS:
- Crear tablas desarrollando algún caso pequeño de manera que el alumno pueda comprender el uso
de las relaciones entre ellas.
Una tabla es una colección de datos sobre una entidad (Persona, lugar, cosa) especifica,
que tiene un número discreto de atributos designados ( por ejemplo cantidad o tipo). Las
tablas están en el corazón de SQL Server y del modelo relacional en general. Las tablas
son fáciles de entender ya que son prácticamente iguales a las listas que utiliza de manera
cotidiana. En SQL Server una tabla suele denominarse tabla de base, para hacer énfasis
sobre donde se almacenan los datos. La utilización de <<Tabla de base>>, también
distingue la tabla de una vista (View), una tabla virtual que es una consulta interna de una
tabla base.
Los atributos de los datos de una tabla (como tamaño, color, cantidad, fecha, etc) toman la
forma de columnas con nombre en la tabla.
Las columnas de la tabla recién creada se define en el cuerpo de las sentencias CREATE
TABLE . La definición de columnas aparecen en una lista separada por comas e incluida
entre paréntesis. La definición de la columna determina el orden de izquierda a derecha de
la columna en la tabla.
a. Nombre de columna:
Pueden ser iguales a los nombres de las columnas de otras tablas
b. Tipo de datos
Identifica la clase de datos que la columna almacenará.
c. Si la columna contiene datos requeridos
La cláusula NOT NULL impide que aparezcan valores NULL en la columna o en
caso contrario admite valores NULL
Las tablas suelen estar relacionadas con otras tablas.
Un tipo de dato es un atributo que especifica el tipo de dato (carácter, entero, binario, etc.)
10
que puede ser almacenado en una columna, parámetro o variable. SQL Server provee de
un conjunto de tipos de dato, aún cuando se pueden crear tipos de dato definidos por el
usuario que se crean sobre la base de tipos de dato provisto por el SQL Server. Los tipos
de dato provistos por el sistema definen todos los tipos de dato que se pueden usar en
SQL Server. Los tipos de dato pueden ser utilizados para asegurar la integridad de los
datos porque los datos ingresados o modificados deben cumplir con el tipo de dato
especificado para el objeto correspondiente. Por ejemplo, no se puede almacenar el
nombre de alguien en una columna con un tipo de dato datetime, ya que esta columna solo
aceptará valores válidos de fecha y hora.
Fecha y hora Datetime Datos de fecha y hora comprendidos entre el 1 de enero de 1753 y
el 31 de diciembre de 9999
Varchar(n|max) Cadena de longitud variable (n puede ser de1 a 8 000 bytes). Max
Cadena
indica la longitud máxima que es 2^31-1 bytes
11
ntext Cadena UNICODE de longitud variable con un máximo de 2^30 -1
caracteres
Binary(n) Los datos deben tener la misma longitud fija (n puede ser de 1
Binario hasta 8 000 bytes)
Varbinary(n|max) Datos binarios de longitud variable(n puede ser con una longitud
maxima de 8000 bytes) Max indica la longitud máxima que es
2^31-1 bytes
Generación
automática timestamp Generación automática de números binarios de modo que son
únicos dentro de una base de datos
* p es la precisión y determina el número máximo de dígitos tanto a la izquierda como a la derecha del punto
decimal. S es la escala y determina el número máximo de dígitos a la derecha del punto decimal.
Como recomendación podemos probar con estos consejos al escoger tipos de datos:
Si se necesita almacenar datos enteros desde 0 hasta 255, usar el tipo de dato tinyint.
Las columnas con tipos de datos tinyint usan solamente 1 byte para almacenar sus valores, en
comparación con 2 bytes, 4 bytes y 8 bytes usados para guardar las columnas con smallint, int y
bigint respectivamente.
Si se necesita guardar datos enteros desde -32,7658 hasta 32,767, usar smallint.
Las columnas con tipo de dato smallint usan solamente 2 bytes para almacenar sus valores, a
diferencia de los 4 bytes y 8 bytes de los tipos de datos int y bigint respectivamente.
Si se necesita almacenar datos enteros desde -2,147,483,648 hasta 2,147,483,647, usar int.
Las columnas con tipo de dato int usan solamente 4 bytes para guardar sus valores, mientras que
los bigint usan 8 bytes. Se puede utilizar si es que por ejemplo se necesita catalogar una biblioteca
con más de 32,767 libros.
Usar smallmoney en vez de money, si se necesita guardar valores monetarios desde -
214,748.3648 hasta 214,748.3647.
Las columnas con tipo de dato smallmoney usan solamente 4 bytes para guardar sus valores, en
comparación con los 8 bytes que son usados cuando las columnas tienen tipo de dato money. Por
ejemplo si necesitas almacenar los sueldos mensuales de los empleados.
Usar smalldatetime en vez de datetime, si se necesita guardar la fecha y hora desde Enero 1
de 1900 hasta Junio 6 del 2079, con exactitud al minuto.
Las columnas con smalldatetime usan solamente 4 bytes para guardar sus valores, en comparación
con los 8 bytes usados para guardar valores de las columnas con datetime. Si necesitas almacenar
la fecha de ingreso de un empleado a la compañía utiliza este tipo de dato.
Usar columnas varchar/nvarchar en vez de text/ntext cuando sea posible.
Porque SQLServer almacena las columnas text/ntext en las páginas de tipo Text/Image separado
del resto de datos que están en las páginas de Datos, esto hace que tome más tiempo obtener los
valores text/ntext.
Establecer las normas de integridad es un proceso tan importante como el modelamiento, pues si
bien el primero se encarga de encontrar el modelo que optimice más los recursos del servidor de
base de datos, las normas de integridad determinarán la forma más segura de controlar la
confiabilidad, veracidad e integridad de la información.
Se debe analizar cada uno de los atributos para determinar qué norma de integridad puede afectarlo
para lograr los objetivos de la seguridad.
LAS RESTRICCIONES(constrains):
Las restricciones son un método declarativo de definición de la integridad de datos ya que ellas se
definen al momento de crear la tabla (con la sentencia CREATE TABLE), o al momento de modificar
la definición de la tabla (con la sentencia ALTER TABLE).
En otras palabras, una restricción forma parte de la definición de la tabla. Las restricciones son el
método preferido para dar fuerza a la integridad de los datos.
12
TIPOS DE RESTRICCIONES:
Las restricciones son un método estándar ANSI para forzar la integridad de los datos.
Garantizan que los datos ingresados en las columnas sean valores válidos y que se mantengan las
relaciones entre las tablas.
Indica el atributo o atributos que almacenaran el dato que los relacionará con otra entidad. Este
atributo en la otra entidad debe ser un PK para poder establecer una adecuada relación.
Cuando se define la restricción FK sobre un (o unos) atributo(s) de una entidad se obliga a:
- el dato que se desea almacenar en el atributo FK, debe haber sido previamente registrado
en la entidad que contiene el PK.
- Al tratar de eliminar el dato en la entidad que contiene el atributo PK, previamente se debe
eliminar el dato en la entidad que contiene el FK.
UNIQUE(UN)
Garantiza que cada valor en una columna es único. Permite valores únicos.
Cuando se definen la restricción UN sobre un (o unos) atributo(s) de una entidad se obliga a:
- no repetir los valores definidos como únicos
IDENTITY ( ID)
Indica que un atributo de la entidad será un correlativo automático que facilitará el control de algún
tipo de codificación o contador instantáneo.
CHECK (CK)
Indica que algunos atributos pueden ser validados dentro de un rango de valores.
Cuando se define la restricción CK sobre un (o unos) atributo(s) de una entidad se le obliga a:
- El valor que vaya a tener dicho atributo debe encontrarse en el conjunto de valores válidos
que se le ha indicado.
Por ejemplo: el atributo sexo de una entidad de clientes solo puede ser M o F
DEFAULTS
Un DEFAULTS es un valor por defecto que se puede asignar en un campo cuando el valor de
este campo no es insertado en el registro.
Las definiciones DEFAULT se pueden:
Crear cuando se crea la tabla, durante el proceso de definición de la misma.
Agregar a una tabla ya existente. Cada columna de una tabla puede contener una sola
definición DEFAULT
Modificar o eliminar, si ya existen definiciones DEFAULT.por ejemplo, puede modificar
el valor que se inserta en una columna cuando no se escribe ningún valor.
13
RESTRICCIONES (CONSTRAINTS)
Las restricciones permiten definir el modo en que SQL Server automáticamente fuerza la integridad
de la base de datos. Las restricciones definen reglas indicando los valores permitidos en las
columnas y son el mecanismo estándar para asegurar integridad. Usar restricciones es preferible a
usar desencadenadores, reglas o valores por defecto.
2) Implementamos las tablas, las llaves primarias, las llaves foráneas y las relaciones en una
forma directa
A continuación detallaremos ambos caso.:
EJERCICIO1 : crear una base de datos llamada Ventas en una carpeta llamada base de datos, tamaño
máximo de 50MB y con un porcentaje de crecimiento del 5%.
CREACIÓN DE TABLAS
USE VENTAS
EL PROCEDIMIENTO sp_help
Genera un reporte con información a cerca de la definición de un objeto de la base de datos activa. Todo los
usuarios de la base de datos pueden ejecutar este procedimiento.
14
Sintaxis:
sp_help nombre_objeto_basedatos
sp_help cliente
.
.
.
ejercicio 02: crear las siguientes tablas PRODUCTO, UNIDAD, FACTURA, DETALLE FACTURA
ALTER TABLE
SINTAXIS:
.
.
.
15
ALTER TABLE CLIENTE
ADD CONSTRAINT FK_CODDISTRITO
FOREIGN KEY (Cod_dist)
REFERENCES DISTRITO (Cod_dist)
.
.
.
2) Implementamos las tablas, las llaves primarias, las llaves foráneas y las relaciones en una
forma directa
EJERCICIO PROPUESTO
Se desea crear la base de datos de una institución que brinda cursos de extensión profesional. Los
interesados en los cursos se pueden matricular sin ninguna restricción, y además tienen facilidades para
pagar el costo de los cursos.
A continuación se presenta el modelo físico SQL Server de la base de datos a crear.:
16
1- Crear una base de datos llamada Extensión_profesional en la unidad D, carpeta
Trabajo_Encargado
2- Implemente paso a paso la base de datos, para lo cual:
2.1. Cree las tablas
2.2. Agregue las llaves primarias
2.3. agregue las llaves foráneas y relaciones
2.4. Realice algunas preguntas para cada una de las tablas y desarrolle las restricciones check,
unique , default, para las tablas creadas
PARA RECORDAR:
Recuerde siempre que las tablas son el corazón de las bases de datos relacionales en general y de SQL
Server en particular. Las restricciones de integridad aseguran que la clave primaria identifique unívocamente
a cada entidad representada de la base de datos y además aseguran que las relaciones entre entidades de
la base de datos se preserven durante las actualizaciones.
TEMA:
Esta sesión muestra como se puede utilizar SQL para añadir nuevos registros en una tabla, suprimir
registros en una tabla y modificar registros en una tabla ya existente.
OBJETIVOS ESPECIFICOS:
- Describir las tres sentencias SQL que se emplean para modificar los CONTENIDOS de una base
de datos.
CONTENIDO:
INSERT
DELETE
UPDATE
1.- INSERT
La sentencia de INSERT se utiliza para añadir registros a las tablas de la base de datos. En un
tratamiento simplificado, el comando INSERT toma la siguiente forma:
Sintaxis:
INSERT [INTO] Nombre_tabla (nombre_columna1,..) VALUES (exp,…)
Nombre_tabla es únicamente el nombre de la tabla donde se desea ingresar los nuevos datos.
Nombre_columna es una lista opcional de nombres de campo en los que se insertarán valores en
el mismo número y orden que se especificarán en la Cláusula VALUES. Si no se especifica la lista
de columnas(nombre_comumna1,…), los valores de expr en la cláusula VALUES deben ser tantos
como campos tenga la tabla y en el mismo orden que se definieron al crear la tabla.
Si solo se indica una lista parcial de columnas, el resto de las columnas recibirán un valor nulo o el
valor configurado por defecto para esa columna, en caso que lo tenga.
Además, no se deben asignar valores a los siguientes tipos de columnas, dado que SQL Server
genera automáticamente este valor.
17
Exp es una lista de expresiones o valores constantes, separados por comas, para dar valor a los
distintos campos del registro que se añadirá a la tabla. Las cadenas de caracteres deberán estar
encerradas entre comillas simples.
NOTA
La palabra clave INTO en un comando INSERT es opcional y solo se utiliza para clarificar el
código.
Los valores ingresados deben coincidir con la lista de columnas. La cantidad de valores
provistos debe ser igual a la cantidad de columnas indicadas en la lista de columnas, y el tipo
de dato, precisión, y escala de cada valor debe coincidir con los de las columnas
correspondientes.
Cuando se define un comando INSERT, se puede usar la cláusula VALUES para especificar
los valores de los datos para una fila o usar una subconsulta SELECT para especificar los
valores para una o más columnas.
Nota: Una vez creadas las tablas de la base de datos se debe cargar la data, para ello copiar la base de
datos ControlInventario de una tienda de abarrotes.
Cuando la lista de valores está incompleta es obligatorio establecer en que columna va cada valor de la lista,
por lo que la lista de columnas es obligatoria en la instrucción INSERT.
18
INSERT proveedor ( Nombre , Representante , Direccion )
VALUES('GOLOSINAS Y ANTOJOS','ZAVALA ZEGARRA, CLAUDIA',
'AV. CIRCUNVALACION 755 ZONA INDUSTRIAL')
En este comando, los valores han sido definidos para la columnas Nombre, Representante Y Direccion
Sin embargo, no es necesario incluir la columna IdProveedor en el comando INSERT, dado que la columna
IdProveedor se define con la propiedad IDENTITY, porque los valores para esa columna se generan
automáticamente.
Cada sentencia INSERT añade un único registro a la tabla. En el ejemplo sólo se han especificado 3 campos
con sus respectivos valores, el resto de campos quedarán a nulo. Un valor Nulo NULL no significa blancos o
ceros sino simplemente que el campo nunca ha tenido un valor.
La función getdate() entrega la fecha y hora del sistema. La puede utilizar para insertar la fecha y hora del
sistema en una columna de tipo fecha_hora.
VALUES(1, getdate())
--VALUES(1, 28/25/10)
19
INSERT orden VALUES(2, getdate(), getdate() )
Para enviar un dato fecha al servidor, la fecha se envía como una cadena con formato de fecha. Por lo
general, cuando la conexión es a un servidor SQL, no sabemos cuál es el formato de fecha predeterminado
que está utilizando el servidor, por lo que en ocasiones podemos tener problemas con la manipulación de
las fechas.
EJERCICIO:
1.4.1 Cree una tabla PRUEBA_FECHAS, con un campo Fecha de tipo Datetime que no permita
valores nulos, para hacer algunas pruebas con las fechas.
1.4.2 Ahora, inserte la fecha 20 de junio de 1998
go
1.4.3 Ahora inserte la fecha 3 de enero de 1979 (‘03/01/1979’) e inserte otro registro con la fecha :
(‘11/26/1980’)
Cuando se envía fechas al servidor se recomienda informar al servidor en qué formato se le está enviando
las fechas para que las lea correctamente
Go
Además existe la posibilidad de agregar múltiples registros con ayuda del comando SELECT .
20
Se puede usar una subconsulta SELECT dentro de un comando INSERT para agregar datos a una
tabla desde otra u otras tablas o vistas. Una subconsulta permite agregar más de una fila a la vez.
NOTA: Una subconsulta SELECT en un comando INSERT se utiliza para agregar subconjuntos de
datos existentes a una tabla, mientras que la cláusula VALUES se usa para guardar datos nuevos
en una tabla.
Ejemplo :
Como podemos observar es posible combinar nuestro comando INSERT con consultas de
selección, para agregar datos específicos sin tener la necesidad de realizarlo uno por uno
2. UPDATE
La sentencia UPDATE se utiliza para cambiar el contenido de los registros de una tabla de la
base de datos. Su formato es:
Nombre_tabla es únicamente el nombre de la tabla donde se desea ingresar los nuevos datos
21
Nombre_columna es el nombre de columna o campo cuyo valor se desea cambiar. En una misma
sentencia UPDATE pueden actualizarse varios campos de cada registro de la tabla.
Expr es el nuevo valor que se desea asignar al campo que le precede. La expresión puede ser un valor
constante o una subconsulta. Las cadenas de caracteres deberán estar encerradas entre comillas. Las
subconsultas entre paréntesis.
SP_HELP PRODUCTO
select * from PROVEEDOR
select * from dbo.PRODUCTO
select * from dbo.CATEGORIA
UPDATE PRODUCTO
SET PrecioProveedor = PrecioProveedor*1.5
WHERE IdCategoria = 1
Ejemplo 02:fijar el campo FechaEntrada de Orden (en la tabla ORDEN) de todos aquellas órdenes
realizadas que tienen vacía (NULL)a la fecha de hoy, se pondría:
UPDATE dbo.ORDEN
SET FechaEntrada = GETDATE()
WHERE FechaEntrada is NULL
1. Un ejemplo mas simple podría ser fijando un precio único para todos los productos, sin utilizar la
cláusula WHERE.
UPDATE PRODUCTO
SET PrecioProveedor = 200
3. DELETE
DELETE es especialmente útil cuando se desea eliminar varios registros. En una instrucción
DELETE con múltiple tablas, debe incluir el nombre de tabla (tabla*). Si se especifica más de una
tabla para eliminar registros, todas deben tener una relación de muchos a uno. Si se desea eliminar
todos los registros de una tabla, eliminar la propia tabla es más eficiente que ejecutar una consulta
de borrado.
EL FORMATO DE LA SENTENCIA ES:
22
DELETE FROM Nombre_tabla
[WHERE {condición}]
Cada sentencia DELETE borra los registros que cumplen la condición impuesta o todos si no se indica
la cláusula WHERE
EJEMPLO 1:El ejemplo siguiente elimina todos los registros de la tabla ORDEN
DELETE ORDEN
EJEMPLO 1:El ejemplo siguiente elimina todos los registros de la tabla CATEGORIA
DELETE CATEGORIA
4. TRUNCATE TABLE
A diferencia de la instrucción DELETE, TRUNCATE TABLE no devuelve un mensaje acerca de la
cantidad de las filas afectadas. Tanto TRUNCATE TABLE como DELETE quitan todas las filas de la
tabla, pero TRUNCATE TABLE es más rápida y utiliza menos recursos de los registros de transacciones
y del sistema.
EJEMPLO 01:
Elimine todos los registros de la tabla PRODUCTO
EJERCICIOS PROPUESTOS;
2. Realice una inserción de múltiples registros de la tabla producto, y que solo inserte los registros a la
nueva tabla creada, los productos cuyo PrecioProveedor sean mayores a 20 soles y menores que
30.
RE TIP_VEN = ‘1’
3. Actualice el campo FechaOrden y coloque la fecha actual del sistema de la tabla ORDEN.
4. Crear 2 preguntas para realizar actualizaciones o cambios a una de las tablas de la bd.
6. Eliminar los registros con la descripción del campo ciudad igual a ‘Lima’ de la tabla PROVEDOR.
PARA RECORDAR:
La sentencia INSERT de una fila añade una fila de datos a una tabla. Los valores para la nueva
fila se especifican en la sentencia como constantes.
23
UPDATE es especialmente útil cuando se desea cambiar un gran número de registros o
cuando éstos se encuentran en múltiples tablas. Puede cambiar varios campos a la vez. Las
filas a actualizar son especificadas mediante una condición de búsqueda.
La sentencia DELETE suprime cero o mas filas de datos de una tabla. Las filas a suprimir son
especificadas mediante una condición de búsqueda.
A diferencia de la sentencia SELECT, que puede operar sobre múltiples tablas, las sentencias
INSERT, DELETE y UPDATE funcionan solamente sobre una única tabla cada vez.
OBJETIVOS ESPECIFICOS:
Utilizar los comandos SQL de manera que nos permita recuperar la información de alguna base de datos.
CONTENIDO
Introducción a las consultas
Uso del SELECT, FROM, WHERE, ORDER BY.
Las consultas de selección se utilizan para indicar al motor de datos que devuelva la información de las
bases de datos, esta información es devuelta en forma de conjunto de registros que se pueden almacenar en
objeto recordset. Este conjunto de registros es modificable.
2. LA INSTRUCCIÓN SELECT
La cláusula SELECT lista los datos a recuperar por la sentencia SELECT. Los elementos o datos a
seleccionar pueden ser columnas de la base de datos o columnas a calcular por SQL cuando efectúa la
consulta o también el asterisco(*) para recuperar todos los campos de un fichero o tabla.
FROM
La cláusula FROM lista las tablas o ficheros que contienen los datos a recuperar por la consulta. El formato
de esta cláusula es:
a. SINTAXIS BÁSICA:
SELECT * / ListaColumnas
FROM origenTabla
[WHERE condiciónBúsqueda]
b. SINTAXIS COMPLETA:
24
SELECT [ALL|DISTINCT] [ TOP n [ PERCENT] [WITH TIES] ListaColumnas
[INTO nuevaTabla]
FROM origenTabla
[WHERE condiciónBúsqueda]
[GROUP BY [ALL]expresiónAgruparPor]
[WITH CUBE | ROLLUP ]
[HAVING condiciónBúsqueda]
[ORDER BY expresiónOrden [ASC / DESC] ]
[COMPUTE AVG | COUNT | MAX | MIN |SUM (expresión)]
USE ControlInventario
GO
Un alias define títulos alternativos para los nombres de columna. Si el Alias es una
frase(contiene espacios) debe escribirse entrecomillada.
Ejemplo3:
Una columna computada es una columna que se muestra en el resultado de una consulta,
pero no existe físicamente como tal en la tabla. La columna computada muestra el resultado
de ejecutar alguna operación con las columnas de la tabla.
25
precioProveedor AS 'Precio Unitario',
precioProveedor*0.90 as 'Precio con Descuento'
FROM producto
GO
WHERE
La cláusula WHERE dice a SQL que incluya sólo ciertas filas o registros de datos en los
resultados de la consulta, es decir, que tiene que cumplir los registros que se desean ver. La
cláusula WHERE contiene condiciones en la forma:
select IdProveedor,Nombre,Representante,Ciudad
from PROVEEDOR
where ciudad='callao'
Ejemplo6:
select IdProveedor,Nombre,Representante,Ciudad
from PROVEEDOR
where ciudad='callao' or ciudad='Arequipa'
Ejemplo8:
La siguiente sentencia nos muestra la cantidad de órdenes de productos pedidos con
posterioridad al mes de mayo
SELECT COUNT(*)
FROM ORDEN
WHERE MONTH(FechaOrden)>05
Ejercicio04: mostrar una lista de los campos idproducto y Nombre de la tabla producto
cuyo nombre se encuentra antes o en la posición del producto de nombre ‘cepillo
master adulto’.
INTO
Crea una nueva tabla e inserta en ella las filas resultantes de la consulta.
Para crear una tabla temporal, el nombre de la tabla debe comenzar con un signo numérico
(#)
Ejemplo 9:
El siguiente ejemplo crea la tabla temporal #MICOPIA e inserta todas las columnas y
filas de la tabla Proveedor
26
ORDER BY
La cláusula ORDER BY ordena los resultados de la consulta en base a los datos de una o
más columnas. Si se omite, los resultados saldrán ordenados por el primer campo que sea
clave en el índice q haya utilizado.
Por tanto, indica como deben clasificarse los registros que se seleccionen. Tiene la forma:
Para obtener un listado de proveedores por su lugar ordenado por ciudades y dentro de cada
ciudad ordenados por departamentos se utilizaría:
Donde los números son la pocisión actual de los campos mostrados en la cláusula SELECT
TOP:
Devuelve un cierto número de registros que entran entre el principio o el final de un rango
especificado por una cláusula ORDER BY.
Sino se incluye la cláusula ORDER BY, la consulta devolverá un conjunto arbitrario de 5 registros de
la tabla empleados Se puede utilizar la palabra reservada PERCENT para devolver un cierto
porcentaje de registros que caen al principio o al final de un rango especificado por la cláusula
ORDER BY.
27
ORDER BY Departamento
DISTINCT:
Omite los registros que contiene datos duplicados en los campos seleccionados. Para que los valores
de cada campo listado en la instrucción SELECT se incluyan en la consulta deben ser únicos.
Con otras palabras el predicado DISTINCT devuelve aquellos registros cuyos campos indicados en la
cláusula SELECT posean un contenido diferente.
CONSULTAS CONDICIONALES
TEMA:
Las consultas más sencillas para recuperar datos son las que nos ayudarán a entender las siguientes
sesiones. En esta sesión aprenderemos a recuperar algunas filas y a recuperar algunas columnas en base a
una sola tabla
OBJETIVOS ESPECIFICOS:
Recuperar datos de múltiples formas sencillas, haciendo uso de algunas condiciones de comparación.
CONTENIDO
AND, <,>, = ,<>, …
IF EXISTS
BETWEEN, IN, AND, OR, NOT
LIKE
Antes de comenzar el desarrollo de esta sesión, hay que recalcar 2 detalles de vital importancia el primero
de ellos es que cada vez que se desee establecer una condición referida a un campo de texto la condición
de búsqueda debe ir cerrada entre comillas simples; la segunda hace referencia a las fechas. Las fechas se
deben escribir siempre según el formato de configuración de su sistema.
OPERADOR USO
AND Es el “y” lógico. Evalúa dos condiciones y devuelve un valor de
verdad sólo si ambas son ciertas
OR Es el “o” lógico. Evalúa dos condiciones y devuelve un valor de
verdad si alguna de las dos es cierta
NOT Negación Lógica. Devuelve el contrario de la expresión
28
La palabra clave OR se utiliza para combinar de dos condiciones de búsqueda, cuando una a la otra
(o ambas) deberán ser ciertas.
La palabra clave AND la usamos para combinar dos condiciones de búsqueda que deban ser
ciertas simultáneamente.
La palabra clave NOT nos sirve para seleccionar filas en donde la condición de búsqueda sea falsa.
Dos o más condiciones pueden ser combinadas para formar expresiones más complejas con distintos
criterios. Cunado existen dos o más condiciones deberán estar unidas por AND o OR.
EJEMPLO 01: El siguiente ejemplo retorna todas las columnas de la tabla de productos que se
encuentran en la base de datos ControlInventario. El ejemplo sólo retorna las filas de los productos
con idproveedor igual a 10 y además tenga como IDCATEGORIA igual a 5.
SELECT *
FROM PRODUCTO
WHERE IdProveedor=10 AND IdCategoria=5
EJEMPLO 02:Mostrar los datos del proveedor que sea representante igual a GORDILLO BARRIGA,
SANCHO
EJEMPLO 03:Mostrar los datos de ORDEN_DETALLE cuyo Idorden sea igual a 5 y idproducto sea
diferente de 2
EJEMPLO 05: Mostrar las columnas nombre, apellidos y el año de la tabla Empleado, si la fecha de
nacimiento es igual 1980 o nombre del empleado es igual a Juana.
EJEMPLO 06: Mostrar el nombre, apellidos, fecha de nacimiento y edades de la tabla Empleados si la
edad comprende entre 25-50 años
OPERADOR SIGNIFICADO
+ Suma
- Resta
* Multiplicación
/ División
** ó ^ Exponenciación
EJEMPLO 07:Mostrar los datos de un producto, (sólo campos importantes y con nombres
adecuados), además el IGV a un 18% y el Importe de cada producto(precio total).
29
4. OPERADORES DE CARACTERES:
EJEMPLO 08: Mostrar el nombre y apellido del empleado en una solo columna, fecha de nacimiento.
EJEMPLO 09: Mostrar la Ciudad y Departamento en una solo columna, cuyo nombre de la nueva
columna es Ubicación, de la tabla PROVEEDOR.
5. OPERADORES DE COMPARACION
Los operadores de comparación comprueban si dos expresiones son o no las mismas. Se pueden utilizar en
todas la expresiones excepto en las de los tipos text, ntext o image.
OPERADOR USO
< Menor que
> Mayor que
<> Distinto de
<= Menor ó igual que
>= Mayor ó igual que
= Igual que
BETWEEN Utilizado para especificar un intervalo de valores
LIKE Utilizado en la comparación de un modelo
IN Utilizado para especificar registros de una base de datos
EJEMPLO 11: Mostrar todos los datos de los empleados que hayan nacido antes del
mes de junio.
6. BETWEEN
Para indicar que deseamos recuperar los registros según el intervalo de valores de un campo emplearemos
el operador Between cuya sintaxis es:
30
En este caso la consulta devolvería los registros que contengan en “campo” un valor incluido en el intervalo
Valor1, Valor2 (ambos imclusive). Si anteponemos la condición NOT devolverá aquellos valores no incluidos
en el intervalo.
EJEMPLO 12:El siguiente ejemplo retorna todas las columnas de la tabla productos. El ejemplo solo
retorna las filas de los productos que tengan un precio comprendido entre 12 y 20 soles
SELECT *
FROM PRODUCTo
WHERE PrecioProveedor >=12 AND PrecioProveedor<=20
EJEMPLO 13: El siguiente ejemplo es similar al anterior. Se utiliza BETWEEN que especifica el
intervalo inclusivo que se va a probar.
EJEMPLO 14:El siguiente ejemplo retorna las columnas de la tabla producto. El ejemplo solo retorna
las filas de los productos de los precios que no estén comprendidos entre 10 y 50 soles
7. IN
Este operador devuelve aquellos registros cuyo campo indicado coincide con alguno de una lista. Su sintaxis
es:
Ejemplo15: El siguiente ejemplo retorna todas las columnas de la tabla productos. EL ejemplo solo
retorna las filas de los productos que pertenezcan a las categorías 1,3 o 5
SELECT *
FROM PRODUCTO
WHERE IdCategoria =1 OR IdCategoria =3 OR IdCategoria =5
EJEMPLO16:El siguiente ejemplo es similar al ejemplo 15 se utiliza IN que determina si un valor dado
coincide con algún valor de una subconsulta o lista.
SELECT *
FROM PRODUCTO
WHERE IdCategoria IN(1,3,5)
EJEMPLO 17 : Consultar todos los PROVEEDORES que vivan en las ciudades de Lima, Trujillo Y
Arequipa.
8. LIKE
Se utiliza para comparar una expresión de cadena con un modelo en una expresión SQL. Su sintaxis:
En donde expresión es una cadena modelo o campo contra el que se compara expresión. Se puede utilizar
el operador LIKE para encontrar valores en los campos que coincidan con el modelo especificado. Por
modelo también se puede especificar un valor completo, o se pueden utilizar caracteres comodín para
encontrar un rango de valores de la siguiente forma:
EJEMPLO 18 : Consultar todos los Empleados que tengan como apellido Paterno igual a Cardenas.
31
A continuación presentaremos los distintos caracteres comodín para posteriormente comprobar las
expresiones con diferentes modelos.
Carácter Descripción
Comodín
% Cualquier cadena de cero o más caracteres
El - Cualquier carácter individual operador Like se puede
(Subrayado) utilizar en una
[] Cualquier carácter individual dentro del rango expresión para
especificado comparar un valor de
[^] Cualquier carácter individual que no esté dentro del rango un campo con una
especificado expresión de cadena.
Por ejemplo, si
introduce Like c% en una consulta SQL, la consulta devuelve todos los valores de campo que comiencen por
la letra C. en una subconsulta con parámetros, puede hacer que el usuario escriba el modelo que se va
utilizar.
EJEMPLO19: Este ejemplo devuelve los nombres cuyo contenido empiece con una letra de la A a la D
seguida de cualquier cadena.
Ejemplo 20: El siguiente ejemplo retorna todas las columnas de la tabla productos. El ejemplo sólo
retorna las filas de los Productos que no empiece con F o C como carácter inicial en el nombre del
producto.
Ejemplo 21: el siguiente ejemplo retorna las columnas idProveedor, nombr, repsresentaante, ciudad y
departamento de la tabla Proveedores. El ejemplo sólo retorna las filas de los Proveedores que
tengan los caracteres a al final de la columna ciudad.
Ejemplo 22: el siguiente ejemplo retorna todas las columnas de la tabla Productos. El ejemplo sólo
retorna las filas de los Productos que tengan los caracteres Queso en la columna nombre del
producto
Ejemplo 23: El siguiente ejemplo devuelve los nombres de los empleados que comienzan la letra P
seguido de cualquier letra entre A y F y de dos caracteres cualquiera o cuyo nombre a buscar las 3
primeras letras estén dispuestas de la siguiente manera : que empiece con la letra J , el segundo
carácter cualesquiera y la tercera letra sea una a :
FUNCIONES
OBJETIVOS ESPECIFICOS:
CONTENIDO:
32
GETDATE, GETUCDATE, DATEADD, DATEDIFF, DATEPART, DATENAME…
CAST, CONVERT
SUM,AVG,COUNT,MIN,MAX,
GROUP BY, uso de GROUP BY con el operador ROLLUP
uso de GROUP BY con el operador CUBE
HAVING
COMPUTE… BY
FUNCION DESCRIPCION
getdate() Retorna la fecha y hora del sistema
Retorna la fecha y hora del Meridiano de Greenwich el
getucdate() valor se obtiene a partir de la configuración regional del
sistema.
Genera una nueva fecha a partir de fecha, añadiéndole
dateadd(parte_fecha, n, fecha)
a fecha n unidades de parte_fecha
Entrega la diferencia entre fecha1 y fecha2 en las
datediff(parte_fecha, fecha1, fecha2)
unidades indicadas en parte_fecha.
Devuelve, a partir de fecha, un valor entero con la
datepart(parte_fecha, fecha)
parte_fecha especificada.
Devuelve, a partir de fecha, una cadena con la
datename(parte_fecha,fecha)
parte_fecha especificada.
day(fecha) Devuelve un entero con la parte del día de fecha
month(fecha) Devuelve un entero con la parte del mes de fecha
year(fecha) Devuelve un entero con la parte del año de fecha
El siguiente cuadro muestra la parte_fecha que podemos especificar en las funciones de fecha listas en el
cuadro anterior:
SELECT GETDATE()
SELECT GETUTCDATE()
Ejemplo 03: El siguiente ejemplo genera una nueva fecha añadiéndole 30 días a fechaOrden
Ejemplo 04: Obtener la diferencia en semanas entre fechaOrden y la fecha del sistema.
33
FROM orden
Ejemplo 05: el siguiente ejemplo entrega el número y el nombre del mes de la fecha del sistema.
Ejemplo 06: el siguiente ejemplo entrega el día, mes y año de la fecha del sistema.
SELECT DAY(GETDATE())
SELECT MONTH(GETDATE())
SELECT YEAR(GETDATE())
Para convertir expresiones de un tipo de datos a otro tipo, o para darle formato a sus datos, utilice
las funciones CAST Y CONVERT
LA FUNCION CAST()
Sintaxis:
CAST(expresión AS tipo_dato)
Donde:
Expresión, representa el dato que se desea convertir a otro tipo de dato.
Tipo_dato, específica el tipo de dato al que se desea convertir expresión.
Ejemplo 07: En el siguiente ejemplo se obtiene el monto en nuevos soles existente en el almacén
para cada uno de los productos. El resultado lo convierte a un dato de tipo entero (int).
LA FUNCION CONVERT()
Sintaxis:
Donde:
Tipo_dato, especifica el tipo de dato al que se desea convertir expresión.
Expresión, representa el dato que se desea convertir a otro tipo de dato.
Estilo, indica el formato de presentación del dato resultante.
Utilice la función CONVERT cuando desee darle formato a la salida de los valores de tipo Money. Para ello,
convierta el valor de Money a una cadena, y luego déle formato utilizando el argumento estilo.
El siguiente cuadro muestra los valores de estilo para la función CONVERT cuando se utiliza con
datos Money ó smallmoney.
34
Ejemplo 08: el siguiente ejemplo, aplica el estilo 1, con separador de miles y 2 decimales , para la
nueva columna inventario valorizado.
Muchas peticiones de información no requieren el nivel de detalle proporcionado por las consultas descritas
en las sesiones anteriores. Ahora veremos que SQL soporta peticiones de datos sumarios mediante
funciones de columna y mediante cláusulas GROUP BY y HAVING de la sentencia SELECT.
Las funciones de agregación permiten consolidar datos numéricos. El uso de la cláusula GROUP BY nos
permitirá obtener reportes con data consolidada según distintos criterios.
FUNCIONES DE AGREGACION
Son funciones que permiten efectuar una operación aritmética que resume los valores de una columna de
toda la tabla, o 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.
1. SUM
Devuelve la suma del conjunto de valores contenido en un campo específico de una consulta.
Sintaxis :
En donde:
DISTINCT indica que debe eliminarse los valores duplicados de expresión antes de avaluar la
función.
expresión representa el nombre del campo que contiene los datos que desean sumarse o
una expresión que realice un cálculo utilizando los datos de dichos campos. Los operandos de
expresión pueden incluir el nombre de un campo de una tabla, una constante o una función.
EJEMPLO 01: El siguiente ejemplo retorna el total de unidades pedidas (la suma de todos
los valores almacenados en el campo 'cantidad' de la tabla Guia_detalle).
SELECT SUM(cantidad ) as 'Cantidad pedidos'
FROM GUIA_DETALLE
EJEMPLO 02: el siguiente ejemplo retorna el monto Total de los productos vendidos de la
tabla Guia_detalle
2. AVG:
Calcula la media aritmética de un conjunto de valores contenido en un campo especificado de
una consulta.
Sintaxis :
En donde expresión_numérica representa el campo que contiene los datos numéricos para
los que se desea calcular la media o una expresión que realiza un cálculo utilizando los datos
35
de dicho campo. La media calculada por AVG es la media aritmética(la suma de los valores
dividido por el número de valores).la función AVG no incluye ningún campo Null en el cálculo.
DISTINCT indica que debe eliminarse los valores duplicados de expresión antes de avaluar la
función.
EJEMPLO 03: Obtener el precio unitario promedio de todos los productos en la tabla productos.
EJEMPLO 04: El siguiente ejemplo retorna el promedio de unidades pedidas (la media de
todos los valores almacenados en el campo cantidad de la tabla Guia_detalle ').
3. MIN, MAX
Devuelven el mínimo o el máximo de un conjunto de valores contenido en un campo específico
de una consulta.
Sintaxis :
En donde expresión es el campo sobre el que se desea realizar el cálculo. expresión pueden
incluir el nombre de un campo de una tabla, una constante o una función.
EJEMPLO 07: El siguiente ejemplo retorna el precio más alto y más bajo de los productos
registrados en la tabla productos
EJEMPLO 08: El siguiente ejemplo retorna el pedido más pequeño y lo refleja en el campo
'minimo'.
EJEMPLO 09: El siguiente ejemplo retorna la guia de remisión más antigua
EJEMPLO 10: El siguiente ejemplo retorna el nombre del primer producto y del ultimo producto
si se ordena en base al nombre.
4. COUNT
Calcula el número de registros devueltos por una consulta.
Sintaxis:
En donde expresión contiene el nombre del campo que desea contar. Los operandos de
expresión pueden incluir el nombre de un campo de una tabla, una constante o una función.
Puede contar cualquier tipo de datos incluso texto.
36
Aunque expresión puede realizar un cálculo sobre un campo, count simplemente cuenta el
número de registros sin tener en cuenta qué valores se almacenan en los registros. La función
COUNT no cuenta los registros que tienen campos NULL a menos que expresión sea el
carácter comodín asterisco (*). Si utiliza un asterisco, COUNT calcula el número total de
registros, incluyendo aquellos que contienen campos null. COUNT(*) Es considerablemente
mas rápida que count(campo). No se debe poner el asterisco entre comillas simples (‘*’)
EJEMPLO 12 : el siguiente ejemplo retorna el total de empleados que nacieron el año 1985
Nota:
Se pueden combinar varias funciones de columna en una expresión pero no se pueden anidar funciones de
columna, es decir:
GROUP BY y HAVING
5. GROUP BY
Combina los registros con valores idénticos, en la lista de campos especificados, en un único
registro. Para cada registro se crea un valor sumario si se incluye una función SQL agregada, como
por ejemplo SUM o COUNT, en la instrucción SELECT. Su sintaxis es:
SELECT CAMPOS
FROM TABLA
WHERE CRITERIO
GROUP BY CAMPOS DEL GRUPO
GROUP BY es opcional. Los valores de resumen se omiten si no existe una función SQL agregada
en la instrucción SELECT. Los valores null en los campos GROUP BY se agrupan y no se omiten.
No obstante, los valores null no se evalúan en ninguna de las funciones SQL agregadas.
EJEMPLO 14: El siguiente ejemplo retorna la cantidad de productos registrados para cada
categoría.
EJEMPLO 15: El siguiente ejemplo retorna la cantidad de productos por proveedor para las
categorías 2 y 4.
37
EJEMPLO 15: El siguiente ejemplo retorna el idGuia, el número de artículos en cada pedido y el
monto total de cada pedido de la tabla Guia_detalle y ordenado por el código de la guia en forma
ascendente.
EJEMPLO 16: El siguiente ejemplo retorna el Monto total despachado por producto y ordenado por
el Monto total en forma descendente.
NOTA:
Ejemplo :
6. CLAUSULA HAVING:
HAVING es similar a WHERE, determina qué registros se seleccionan. Una vez que los registros se
han agrupado utilizando GROUP BY, HAVING determina cual de ellos se van a mostrar.
EJEMPLO 17: El siguiente ejemplo retorna los productos cuyo monto total despachado es mayor a
15.000 de la tabla guia_detalle.
EJEMPLO 18: Para cada pedido en que se encuentre más de 5 artículos, recuperar el número de
pedido y el número de productos pedidos o vendidos.
38
EJERCICIOS PROPUESTOS:
EJERCICIO 1: El siguiente ejercicio retorna el total de unidades de stock de productos que sea menor a
100 de la tabla productos
EJERCICIO 2: el siguiente ejercicio retorna el Importe total de la tabla Guia_detalle, el importe total es
calculado por el producto de la cantidad Y el precio de venta menos el descuento del IGV.
EJERCICIO 4: Cuenta los productos despachados a los diferentes locales de la empresa de la tabla
Guia_detalle.
EJERCICIO 5: El siguiente ejemplo Retorna el promedio de las edades de todos los empleados.
EJERCICIO 6 : Hallar el importe medio de pedidos, el importe total de pedidos y el precio medio de venta.
EJERCICIO 7 : El siguiente ejemplo retorna el pedido más grande, donde el código del
producto(IdProducto) es igual a 100 y lo refleja en el campo 'maximo'.
EJERCICIO 8: Hallar en qué fecha se realizó el primer pedido (suponiendo que en la tabla Guia tenemos
todos los pedidos realizados hasta la fecha).
**La fecha del primer pedido es la fecha más antigua de la tabla Guia.
EJERCICIO 9: Hallar cuántos pedidos hay de más de 1000 soles de la tabla Guia_detalle .
EJERCICIO 10::Retornar los campos IdCategoría, el promedio de precios y el número de artículos por
categoría de la tabla producto.
EJERCICIO 11: Para cada pedido, cuyos pedidos suman más de 30.000 Soles, hallar su importe medio de
pedidos. En el resultado indicar el número de pedido y su importe medio de pedidos.
CONSULTAS MULTITABLAS
TEMA:
Muchas consultas útiles solicitan datos procedentes de dos o más tablas en la base de datos. En esta sesión
veremos que SQL permite recuperar datos que responden a peticiones mediante consultas multitabla que
componen datos procedentes de dos o más tablas.
OBJETIVOS ESPECIFICOS:
Recuperar Datos que respondan a peticiones procedentes de consultas de dos o más tablas.
CONTENIDO:
UTILIZANDO COMBINACIONES
Las condiciones de combinación se pueden especificar en las cláusulas FROM o WHERE, aunque se
recomienda que se especifiquen en la cláusula FROM. Las cláusulas WHERE Y HAVING pueden contener
también condiciones de búsqueda para filtrar aun más las filas seleccionadas por las condiciones de
combinación.
39
Las combinaciones se pueden clasificar en:
1. COMBINCIONES INTERNAS (la operación típica, que usa algunos operadores de comparación
como = o <>). En este tipo se incluyen las combinaciones equivalentes y las combinaciones
naturales.
Las combinaciones internas usan un operador de comparación para hacer coincidir las filas de dos
tablas según los valores de las columnas comunes de cada tabla. Un ejemplo sería recuperar todas
las filas en las que el número de identificación de estudiante es el mismo en las tablas estudiantes y
cursos
Ejemplo 01: Obtener el nombre de los proveedores y los productos que estos
suministran ordenados por el nombre del proveedor.
Use Northwind
Go
SELECT SUPPLIERS.COMPANYNAME, PRODUCTS.PRODUCTNAME
FROM SUPPLIERS INNER JOIN PRODUCTS
ON SUPPLIERS.SUPPLIERID = PRODUCTS.SUPPLIERID
ORDER BY 1
USE NORTHWIND
GO
SELECT P.PRODUCTID,P.PRODUCTNAME,C.CATEGORYNAME, PV.COMPANYNAME
FROM PRODUCTS P INNER JOIN CATEGORIES C
ON P.CATEGORYID=C.CATEGORYID INNER JOIN SUPPLIERS PV
ON P.SUPPLIERID=PV.SUPPLIERID
WHERE P.SUPPLIERID=1
Ejemplo 03:
USE PUBS
SELECT DISTINCT T1.TYPE, T1.PRICE
FROM TITLES T1 INNER JOIN TITLES T2
ON T1.TYPE=T2.TYPE AND T1.PRICE < > T2.PRICE
WHERE T1.PRICE<15 AND T2.PRICE<15
2. COMBINACIONES EXTERNAS
40
Las combinaciones internas sólo devuelven filas cuando hay una fila de ambas tablas, como
mínimo, que coincide con la condición de la combinación. Las combinaciones internas eliminan las
filas que no coinciden con alguna fila de la otra tabla. Sin embargo, las combinaciones externas
devuelven todas las filas de una de las tablas o vistas mencionadas en la cláusula FROM, como
mínimo, siempre que tales filas cumplan con algunas de las condiciones de búsqueda de WHERE o
HAVING. Todas las filas se recuperarán de la tabla izquierda a la que se haya hecho referencia con
una combinación externa izquierda, y de la tabla derecha a la que se haya hecho referencia con una
combinación externa derecha. En una combinación externa completa, se devuelven todas las filas
de ambas tablas.
SQL Server 2005 utiliza las siguientes palabras clave de SQL-92 para las combinaciones externas
puede ser una combinación externa izquierda, derecha o completa especificadas en una cláusula
FROM con uno de los siguientes conjuntos de palabras clave:
2.1 LEFT JOIN O LEFT OUTER JOIN: (Utilizando combinaciones exteriores izquierdas)
El conjunto de resultados de una combinación externa izquierda incluye todas las filas de
la tabla de la izquierda especificada en la cláusula LEFT OUTER, y no sólo aquellas en
las que coincidan las columnas combinadas. Cuando una fila de la tabla de la izquierda
no tiene filas coincidentes en la tabla de la derecha, la fila asociada del conjunto de
resultados contiene valores NULL en todas las columnas de la lista de selección que
procedan de la tabla de la derecha.
Use Northwind
Go
SELECT C.CUSTOMERID,C.COMPANYNAME, O.ORDERID, O.ORDERDATE
FROM CUSTOMERS C LEFT OUTER JOIN ORDERS O
ON C.CUSTOMERID=O.CUSTOMERID
ORDER BY O.CUSTOMERID
Al ejecutar la consulta se obtiene 832 filas, observe en el gráfico anterior los valores
NULL para las dos primeras filas, esto significa que nos retorna clientes que no tienen
pedidos realizados. En lugar de LEFT OUTER JOIN utilice INNER JOIN .Esta consulta
retorna (830 filas afectadas) la diferencia es 2 que es el número de clientes que no
tienen pedidos.
EJEMPLO 06:EL siguiente ejemplo retorna todos los clientes que no realizaron
pedidos. Utilizar una combinación externa Izquierda
Use Northwind
Go
SELECT C.CUSTOMERID, C.COMPANYNAME, O.ORDERID, O.ORDERDATE
FROM CUSTOMERS C LEFT OUTER JOIN ORDERS O
ON C.CUSTOMERID=O.CUSTOMERID
WHERE O.ORDERID IS NULL
Ejemplo 07:
Para incluir todos los autores en el resultado, con independencia de que un editor se
encuentre o no en la misma ciudad, use una combinación exterior izquierda. a
41
continuación se muestra la consulta y los resultados de la combinación externa izquierda
de Transact-SQL:
USE PUBS
GO
SELECT A.AU_FNAME, A.AU_LNAME,P.PUB_NAME
FROM AUTHORS A LEFT JOIN PUBLISHERS P
ON A.CITY = P.CITY
ORDER BY P.PUB_NAME ASC, A.AU_LNAME ASC, A.AU_FNAME ASC
LEFT JOIN incluye en el resultado todas las filas de la tabla AUTHORS, tanto si hay una
coincidencia en la columna CITY de la tabla PUBISHERS como si no hay. Observe que,
en los resultados, no hay datos coincidentes con la mayor parte de los autores
enumerados, con lo que estas filas contienen valores NUL en la columna PUB_NAME
2.2 RIGHT JOIN O RIGHT OUTER JOIN (Utilizando combinaciones exteriores derecha)
INSERT Shippers
VALUES ('AERO CONDOR','(503)555-8831')
INSERT Shippers
VALUES ('AMERICAM EXPRESS','(503)555-9586')
INSERT Shippers
VALUES ('AMAZONAS S.A','(503)555-2240')
SELECT *
FROM Shippers
La consulta retorna (833 filas afectadas), como es una combinación externa derecha
retorna todas las filas de la tabla compañías de envíos. Los tres registros ingresados en
el ejercicio anterior no tienen pedidos asignados.
Para incluir todos los editores en los resultados, sin tener en cuenta si hay un editor en
la ciudad, use una combinación externa derecha. A continuación se muestra la consulta
de Transact-SQL y los resultados de la combinación externa derecha:
USE PUBS
SELECT A.AU_FNAME, A.AU_LNAME,P.PUB_NAME
42
FROM AUTHORS AS A RIGHT JOIN PUBLISHERS AS P
ON A.CITY = P.CITY
ORDER BY P.PUB_NAME ASC, A.AU_LNAME ASC, A.AU_FNAME ASC
Ejemplo 11: Una combinación externa se puede restringir aún más si se utiliza un
predicado (como comparar la combinación con una constante). En este ejemplo se
muestra la misma combinación externa derecha, pero se eliminan todos los títulos
de los que se han vendido menos de 50 copias:
USE PUBS
SELECT S.STOR_ID, S.QTY, TITLE
FROM SALES S RIGHT JOIN TITLES T
ON S.TITLE_ID=T.TITLE_ID
AND S.QTY >50
ORDER BY S.STOR_ID ASC
2.3 FULL JOIN o FULL OUTER JOIN (Utilizando combinaciones externas completas)
Una combinación externa completa devuelve todas las filas de las tablas de la izquierda
y de la derecha. Cada vez que una fila no tenga coincidencia en la otra tablas, las
columnas.
Para retener la información que no coincida al incluir las filas no coincidentes en los
resultados de una combinación, utilice una combinación externa completa. SQL Server
2000 proporciona el operador de combinación externa completa, FULL JOIN, que incluye
todas las filas de ambas tablas, con independencia de que la otra tabla tenga o no un
valor coincidente.
Ejemplo 12:
Imagine una combinación de la tabla AUTHORS Y de la tabla PUBLISHERS en sus
columnas CITY. los resultados sólo muestran los autores que viven en ciudades donde
hay algún editor(en este caso, Abraham Bennet y cheryl Carson). El operador de
combinación externa completa, FULL JOIN, indica que todas las filas de ambas tablas se
van a incluir en los resultados, con independencia de que haya datos coincidentes en las
tablas.
Para incluir todos los editores y todos los autores en el resultado, sin tener en cuenta si
una ciudad tiene un editor que se encuentra en la misma ciudad, use una combinación
externa completa. A continuación se muestra la consulta y los resultados de la
combinación externa completa de Transact-SQL:
USE PUBS
SELECT A.AU_FNAME,A.AU_LNAME,P.PUB_NAME
FROM AUTHORS A FULL JOIN PUBLISHERS P ON A.CITY =P.CITY
ORDER BY P.PUB_NAME ASC, A.AU_LNAME ASC, A.AU_FNAME ASC
Las combinaciones cruzadas devuelven todas las filas de la tabla izquierda y cada fila de la tabla
izquierda se combina con todas las filas de la tabla de la derecha. Las combinaciones cruzadas se
llaman también productos cartesianos.
USE PUBS
SELECT A.AU_FNAME, A.AU_LNAME, P.PUB_NAME
FROM AUTHORS A CROSS JOIN PUBLISHERS P
ORDER BY A.AU_LNAME DESC
43
El operador ROLLUP resulta útil para generar informes que contienen subtotales y totales. El
operador ROLLUP genera un conjunto de resultados que es similar a los conjuntos de resultados
generados por el operador CUBE.
CUBE genera un conjunto de resultados que muestra agregados para todas las combinaciones
de valores de las columnas seleccionadas.
ROLLUP genera un conjunto de resultados que muestra agregados para una jerarquía de
valores de las columnas seleccionadas.
Ejemplo 18: El ejemplo siguiente contesta a la siguiente pregunta “Muéstrame los empleados
y el número de pedidos que atendieron por cada año”
EJERCICIOS PROPUESTOS:
Ejercicio 02: El siguiente ejercicio retorna el Impedido, fechapedido y todas las columnas de
la tabla cliente. Esta consulta nos responde a la pregunta “Muéstrame todos los números de
pedidos, fecha y los datos del cliente que hizo el pedido” Ordenarlos por código cliente en
forma ascendente
Ejercicio 03. mostrar los autores y editores que vivan en la misma ciudad. N Ordenar
los resultados por apellidos del autor en forma descendente.
44
Ejercicio 06:: El ejercicio siguiente retorna las columnas IDCLIENTE, y nombre compañía, de
la tabla CLIENTES, y el ORDERID de la tabla pedidos ,utilice una combinación externa
completa (FULL OUTER JOIN)
45