Manual SQL
Manual SQL
1
CREACIN DE BASES DE DATOS SQL SERVER
TEMA:
En esta sesin se ver el proceso de creacin de una base de datos, qu es el registro de transacciones, la
configuracin de una base de datos, la administracin de las propiedades de una base de datos, y que son
las instantneas de base de datos y cmo se crean. Esta sesin 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, clusulas, 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 Descripcin
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 definicin de los campos
Comandos DML:
Comando Descripcin
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
operacin
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
Clusulas
Las clusulas son condiciones de modificacin utilizadas para definir los datos que desea seleccionar o
manipular.
Clusula Descripcin
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
especficos
HAVING Utilizada para expresar la condicin que debe satisfacer cada
grupo.
ORDER BY Utilizada para ordenar los registros seleccionados de acuerdo
con un orden especifico
2
OPERADORES
Operadores Lgicos
Operador Uso
AND Es el y lgico. Evala dos condiciones y devuelve un valor de
verdad slo si ambas son ciertas
OR Es el o lgico. Evala dos condiciones y devuelve un valor de
verdad si alguna de las dos es cierta
NOT Negacin lgica. Devuelve el valor contrario de la expresin
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 comparacin 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 clusula SELECT en grupos de registros para
devolver un nico valor que se aplica a un grupo de registros.
Funcion Descripcin
AVG Utilizada para calcular el promedio de los valores de un campo determinado
COUNT Utilizada para devolver el nmero de registros de la seleccin
SUM Utilizada para devolver la suma de todos los valores de un campo determinado
MAX Utilizada para devolver el valor ms alto de un campo especificado
MIN Utilizada para devolver el valor ms bajo de un campo especificado
Nota: durante las dems sesiones se explicarn detalladamente como utilizar las instrucciones que
acabamos de mostrar.
Para crear una base de datos, determine el nombre de la base de datos, su tamao 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 informacin de inicio para la base de datos. Este archivo se utiliza
tambin para almacenar datos. Almacena las tablas del sistema de la base de datos, y puede
tambin 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 extensin 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 estn
distribuidos en varios discos.la extensin de los archivos secundarios es .ndf.
3
REGISTRO DE TRANSACCIONES(transaction log)
Estos archivos contienen la informacin 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 ms de uno. La extensin del archivo es .ldf
IMPORTANTE:
Es recomendable especificar el tamao mximo de crecimiento del archivo. De ese modo se evita que se
agote el espacio disponible en el disco al agregar datos. Para especificar un tamao mximo para el archivo,
utilice el parmetro MAXSIZE de la instruccin CREATE DATABASE o bien la opcin limitar crecimiento de
archivo a (MB) cuando utilice el cuadro de dialogo propiedades del administrador de SQL Server para crear
la base de datos.
Despus de crear una base de datos, se recomienda crear una copia de seguridad de la base de datos
master.
a) Slo pueden crear base de datos las cuentas de inicio de sesin 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 tamao 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 botn derecho (o el botn 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_lgico_data,
FILENAME = Ubicacin_y_nombre_archivo_data,.mdf
SIZE = tamao [ KB/ MB/GB/TB/ UNLIMITED ],
MAXSIZE = tamao_mximo [ KB/ MB/GB/TB/ UNLIMITED ],
FILEGROWTH= incremento_crecimiento [ KB/ MB/ % ] )
[registro de transacciones]
LOG ON(
NAME = nombre_lgico_log,
FILENAME = Ubicacin_y_nombre_archivo_log,.ldf
SIZE = tamao [ KB/ MB/GB/TB ],
MAXSIZE = tamao_mximo [ 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 instruccin no tiene elementos
<filespec>, el archivo principal de la base de datos tiene el tamao del archivo principal de la base
de datos model. El registro de transacciones tiene el tamao 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 automticamente un
archivo de registro de transacciones de 1 MB. Como no se especifican MB ni KB en el parmetro
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 tamao igual al tamao del archivo principal de la base de
datos model. El archivo de registro de transacciones se crea automticamente y es un 25 por ciento
del tamao 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
explcitamente con la palabra clave PRIMARY. Los archivos de registro de transacciones se especifican a
continuacin de las palabras clave LOG ON. Observe las extensiones que se emplean para los archivos de
la opcin 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 aade 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 informacin acerca de todas las bases de datos del servidor, o de
una base de datos especfica.
6
Sintaxis:
Sp_helpdb [ nombre_basedatos]
Otro procedimiento:
USE Multiples_a
GO
EXEC sp_helpfile.
Si desea cambiar el tamao de la base de datos puede usar la instruccin ALTER DATABASE o utilizar
administrador SQL Server.
La instruccin ALTER DATABASE permite realizar cambios a una base de datos. Permite agregar o
eliminar archivos de una base de datos. Tambin se puede usar para modificar los atributos de los
archivos, tales como el nombre o el tamao de un archivo. Tambin se puede usar para cambiar el
nombre de una base de datos.
Sintaxis:
ALTER DATABASE nombre_basedatos
ADD FILE especificacin_archivo,
ADD LOG FILE especificacin_archivo
REMOVE FILE nombre_lgico_archivo
MODIFY FILE especificacin_archivo
MODIFY FILE nuevo_nombre_basedatos
especificacin_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 tamao de uno de los archivos agregados a la base
de datos Ventas.
1. Primero averiguamos que tamao 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 tamao 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. Quizs 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 operacin se puede hacer a travs del SQL Server Management Studio o por
medio de Transact-SQL
8
Una instantnea de base de datos es una vista de la base de datos, esttica y de slo lectura, hasta un
instante de tiempo determinado. Se pueden crear varias instantneas de una base de datos, y cada una de
ellas es consistente hasta el momento en que se cre la instantnea.
Como una instantnea de base de datos contiene la data hasta el momento de creacin de la instantnea,
se puede utilizar para la creacin de reportes con data hasta el momento especfico en el tiempo.
Para crear una instantnea de base de datos hacemos uso de la instruccin CREATE DATABASE con
la siguiente sintaxis:
Sintaxis:
CREATE DATABASE nombre_instantnea_basedatos
ON (
NAME = nombre_lgico_archivo_basedatos_origen
FILENAME = nombre_fsico_archivo_instantnea )
AS SNAPSHOT OF nombre_basedatos_origen
Ejemplo: el siguiente ejemplo crea una instantnea de la base de datos Ventas. Observe que el nombre se
ha especificado de modo que indica que representa una instantnea, e informa acerca del momento en que
se cre la instantnea.
AS SNAPSHOT OF Ventas
Go
PARA RECORDAR
Recuerde siempre que una base de datos es una coleccin 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 lgicamente en trminos 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
CREACIN DE TABLAS E INTEGRIDAD DE RELACIN
CONTENIDO:
Los tipos de datos SQL Server 2005
Creacin de tablas CREATE TABLE
Modificacin de la definicin de una tabla ALTER TABLE
Integridad de datos Las restricciones CONSTRAINTS.
PRIMARY KEY, FOREIGN KEY, UNIQUE, DEFAULT, CHECK, IDENTITY
TEMA:
Los sistemas de gestin de base de datos organizan y estructuran los datos de tal modo que puedan ser
recuperados y manipulados por usuarios y programas de aplicacin. La estructura ms importante de una
base de datos relacional son las tablas. En esta sesin aprenderemos a creerlas y relacionarlas de la
manera ideal.
OBJETIVOS ESPECIFICOS:
- Crear tablas desarrollando algn caso pequeo de manera que el alumno pueda comprender el uso
de las relaciones entre ellas.
Una tabla es una coleccin de datos sobre una entidad (Persona, lugar, cosa) especifica,
que tiene un nmero discreto de atributos designados ( por ejemplo cantidad o tipo). Las
tablas estn en el corazn de SQL Server y del modelo relacional en general. Las tablas
son fciles de entender ya que son prcticamente 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 utilizacin de <<Tabla de base>>, tambin
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 tamao, color, cantidad, fecha, etc) toman la
forma de columnas con nombre en la tabla.
Las columnas de la tabla recin creada se define en el cuerpo de las sentencias CREATE
TABLE . La definicin de columnas aparecen en una lista separada por comas e incluida
entre parntesis. La definicin 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 clusula 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 (carcter, entero, binario, etc.)
10
que puede ser almacenado en una columna, parmetro o variable. SQL Server provee de
un conjunto de tipos de dato, an 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 vlidos de fecha y hora.
Numrico Float Nmeros con precisin de coma flotante comprendidos entre -1.79E
aproximado + 308 y 1.79E + 308
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 mxima que es 2^31-1 bytes
11
ntext Cadena UNICODE de longitud variable con un mximo 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 mxima que es 2^31-
1 bytes
Generacin
automtica timestamp Generacin automtica de nmeros binarios de modo que son
nicos dentro de una base de datos
* p es la precisin y determina el nmero mximo de dgitos tanto a la izquierda como a la derecha del
punto decimal. S es la escala y determina el nmero mximo de dgitos a la derecha del punto decimal.
Como recomendacin 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
comparacin 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 ms 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
comparacin 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 comparacin
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 compaa 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 pginas de tipo Text/Image separado
del resto de datos que estn en las pginas de Datos, esto hace que tome ms 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 ms los recursos del servidor de
base de datos, las normas de integridad determinarn la forma ms segura de controlar la
confiabilidad, veracidad e integridad de la informacin.
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 mtodo declarativo de definicin 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 definicin de la tabla (con la sentencia ALTER TABLE).
En otras palabras, una restriccin forma parte de la definicin de la tabla. Las restricciones son el
mtodo preferido para dar fuerza a la integridad de los datos.
12
TIPOS DE RESTRICCIONES:
Las restricciones son un mtodo estndar ANSI para forzar la integridad de los datos.
Garantizan que los datos ingresados en las columnas sean valores vlidos 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 relacin.
Cuando se define la restriccin 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 restriccin 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 automtico que facilitar el control de algn
tipo de codificacin o contador instantneo.
CHECK (CK)
Indica que algunos atributos pueden ser validados dentro de un rango de valores.
Cuando se define la restriccin 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 vlidos
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 definicin de la misma.
Agregar a una tabla ya existente. Cada columna de una tabla puede contener una sola
definicin 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 ningn valor.
13
RESTRICCIONES (CONSTRAINTS)
Las restricciones permiten definir el modo en que SQL Server automticamente fuerza la integridad
de la base de datos. Las restricciones definen reglas indicando los valores permitidos en las
columnas y son el mecanismo estndar para asegurar integridad. Usar restricciones es preferible a
usar desencadenadores, reglas o valores por defecto.
2) Implementamos las tablas, las llaves primarias, las llaves forneas y las relaciones en una
forma directa
A continuacin detallaremos ambos caso.:
EJERCICIO1 : crear una base de datos llamada Ventas en una carpeta llamada base de datos, tamao
mximo de 50MB y con un porcentaje de crecimiento del 5%.
CREACIN DE TABLAS
USE VENTAS
EL PROCEDIMIENTO sp_help
Genera un reporte con informacin a cerca de la definicin 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 forneas y las relaciones en una
forma directa
EJERCICIO PROPUESTO
Se desea crear la base de datos de una institucin que brinda cursos de extensin profesional. Los
interesados en los cursos se pueden matricular sin ninguna restriccin, y adems tienen facilidades para
pagar el costo de los cursos.
A continuacin se presenta el modelo fsico SQL Server de la base de datos a crear.:
16
1- Crear una base de datos llamada Extensin_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 forneas 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 corazn de las bases de datos relacionales en general y de SQL
Server en particular. Las restricciones de integridad aseguran que la clave primaria identifique unvocamente
a cada entidad representada de la base de datos y adems aseguran que las relaciones entre entidades de
la base de datos se preserven durante las actualizaciones.
TEMA:
Esta sesin muestra como se puede utilizar SQL para aadir 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 aadir 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 insertarn valores en
el mismo nmero y orden que se especificarn en la Clusula VALUES. Si no se especifica la lista
de columnas(nombre_comumna1,), los valores de expr en la clusula 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 recibirn un valor nulo o el
valor configurado por defecto para esa columna, en caso que lo tenga.
Adems, no se deben asignar valores a los siguientes tipos de columnas, dado que SQL Server
genera automticamente 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 aadir a la tabla. Las cadenas de caracteres debern estar
encerradas entre comillas simples.
NOTA
La palabra clave INTO en un comando INSERT es opcional y solo se utiliza para clarificar el
cdigo.
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, precisin, y escala de cada valor debe coincidir con los de las columnas
correspondientes.
Cuando se define un comando INSERT, se puede usar la clusula VALUES para especificar los
valores de los datos para una fila o usar una subconsulta SELECT para especificar los valores
para una o ms 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 instruccin 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
automticamente.
Cada sentencia INSERT aade un nico registro a la tabla. En el ejemplo slo se han especificado 3 campos
con sus respectivos valores, el resto de campos quedarn a nulo. Un valor Nulo NULL no significa blancos o
ceros sino simplemente que el campo nunca ha tenido un valor.
La funcin 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 enva como una cadena con formato de fecha. Por lo
general, cuando la conexin es a un servidor SQL, no sabemos cul es el formato de fecha predeterminado
que est utilizando el servidor, por lo que en ocasiones podemos tener problemas con la manipulacin 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 enva fechas al servidor se recomienda informar al servidor en qu formato se le est enviando
las fechas para que las lea correctamente
Go
Adems existe la posibilidad de agregar mltiples 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 ms 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 clusula VALUES se usa para guardar datos nuevos
en una tabla.
Ejemplo :
Como podemos observar es posible combinar nuestro comando INSERT con consultas de
seleccin, para agregar datos especficos 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 expresin puede ser un valor
constante o una subconsulta. Las cadenas de caracteres debern estar encerradas entre comillas. Las
subconsultas entre parntesis.
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 vaca (NULL)a la fecha de hoy, se pondra:
UPDATE dbo.ORDEN
SET FechaEntrada = GETDATE()
WHERE FechaEntrada is NULL
1. Un ejemplo mas simple podra ser fijando un precio nico para todos los productos, sin utilizar la
clusula WHERE.
UPDATE PRODUCTO
SET PrecioProveedor = 200
3. DELETE
DELETE es especialmente til cuando se desea eliminar varios registros. En una instruccin
DELETE con mltiple tablas, debe incluir el nombre de tabla (tabla*). Si se especifica ms de una
tabla para eliminar registros, todas deben tener una relacin de muchos a uno. Si se desea eliminar
todos los registros de una tabla, eliminar la propia tabla es ms eficiente que ejecutar una consulta
de borrado.
EL FORMATO DE LA SENTENCIA ES:
22
DELETE FROM Nombre_tabla
[WHERE {condicin}]
Cada sentencia DELETE borra los registros que cumplen la condicin impuesta o todos si no se indica
la clusula 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 instruccin 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 ms rpida 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 insercin de mltiples 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 descripcin del campo ciudad igual a Lima de la tabla PROVEDOR.
PARA RECORDAR:
La sentencia INSERT de una fila aade 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 nmero de registros o
cuando stos se encuentran en mltiples tablas. Puede cambiar varios campos a la vez. Las
filas a actualizar son especificadas mediante una condicin de bsqueda.
La sentencia DELETE suprime cero o mas filas de datos de una tabla. Las filas a suprimir son
especificadas mediante una condicin de bsqueda.
A diferencia de la sentencia SELECT, que puede operar sobre mltiples 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 informacin de alguna base de datos.
CONTENIDO
Introduccin a las consultas
Uso del SELECT, FROM, WHERE, ORDER BY.
Las consultas de seleccin se utilizan para indicar al motor de datos que devuelva la informacin de las
bases de datos, esta informacin es devuelta en forma de conjunto de registros que se pueden almacenar en
objeto recordset. Este conjunto de registros es modificable.
2. LA INSTRUCCIN SELECT
La clusula 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 efecta la
consulta o tambin el asterisco(*) para recuperar todos los campos de un fichero o tabla.
FROM
La clusula FROM lista las tablas o ficheros que contienen los datos a recuperar por la consulta. El formato
de esta clusula es:
a. SINTAXIS BSICA:
SELECT * / ListaColumnas
FROM origenTabla
[WHERE condicinBsqueda]
b. SINTAXIS COMPLETA:
24
SELECT [ALL|DISTINCT] [ TOP n [ PERCENT] [WITH TIES] ListaColumnas
[INTO nuevaTabla]
FROM origenTabla
[WHERE condicinBsqueda]
[GROUP BY [ALL]expresinAgruparPor]
[WITH CUBE | ROLLUP ]
[HAVING condicinBsqueda]
[ORDER BY expresinOrden [ASC / DESC] ]
[COMPUTE AVG | COUNT | MAX | MIN |SUM (expresin)]
USE ControlInventario
GO
Un alias define ttulos 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 fsicamente como tal en la tabla. La columna computada muestra el resultado
de ejecutar alguna operacin con las columnas de la tabla.
25
precioProveedor AS 'Precio Unitario',
precioProveedor*0.90 as 'Precio con Descuento'
FROM producto
GO
WHERE
La clusula WHERE dice a SQL que incluya slo 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
clusula 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 posicin 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 numrico
(#)
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 clusula ORDER BY ordena los resultados de la consulta en base a los datos de una o
ms columnas. Si se omite, los resultados saldrn 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 utilizara:
Donde los nmeros son la pocisin actual de los campos mostrados en la clusula SELECT
TOP:
Devuelve un cierto nmero de registros que entran entre el principio o el final de un rango
especificado por una clusula ORDER BY.
Sino se incluye la clusula 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 clusula
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 instruccin SELECT se incluyan en la consulta deben ser nicos.
Con otras palabras el predicado DISTINCT devuelve aquellos registros cuyos campos indicados en la
clusula SELECT posean un contenido diferente.
CONSULTAS CONDICIONALES
TEMA:
Las consultas ms sencillas para recuperar datos son las que nos ayudarn a entender las siguientes
sesiones. En esta sesin aprenderemos a recuperar algunas filas y a recuperar algunas columnas en base a
una sola tabla
OBJETIVOS ESPECIFICOS:
Recuperar datos de mltiples formas sencillas, haciendo uso de algunas condiciones de comparacin.
CONTENIDO
AND, <,>, = ,<>,
IF EXISTS
BETWEEN, IN, AND, OR, NOT
LIKE
Antes de comenzar el desarrollo de esta sesin, hay que recalcar 2 detalles de vital importancia el primero
de ellos es que cada vez que se desee establecer una condicin referida a un campo de texto la condicin
de bsqueda debe ir cerrada entre comillas simples; la segunda hace referencia a las fechas. Las fechas se
deben escribir siempre segn el formato de configuracin de su sistema.
OPERADOR USO
AND Es el y lgico. Evala dos condiciones y devuelve un valor de
verdad slo si ambas son ciertas
OR Es el o lgico. Evala dos condiciones y devuelve un valor de
verdad si alguna de las dos es cierta
NOT Negacin Lgica. Devuelve el contrario de la expresin
28
La palabra clave OR se utiliza para combinar de dos condiciones de bsqueda, cuando una a la otra
(o ambas) debern ser ciertas.
La palabra clave AND la usamos para combinar dos condiciones de bsqueda que deban ser
ciertas simultneamente.
La palabra clave NOT nos sirve para seleccionar filas en donde la condicin de bsqueda sea falsa.
Dos o ms condiciones pueden ser combinadas para formar expresiones ms complejas con distintos
criterios. Cunado existen dos o ms condiciones debern 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 slo retorna las filas de los productos
con idproveedor igual a 10 y adems 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 ao 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 aos
OPERADOR SIGNIFICADO
+ Suma
- Resta
* Multiplicacin
/ Divisin
** ^ Exponenciacin
EJEMPLO 07:Mostrar los datos de un producto, (slo campos importantes y con nombres
adecuados), adems 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 Ubicacin, de la tabla PROVEEDOR.
5. OPERADORES DE COMPARACION
Los operadores de comparacin 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 comparacin 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 segn el intervalo de valores de un campo emplearemos
el operador Between cuya sintaxis es:
30
En este caso la consulta devolvera los registros que contengan en campo un valor incluido en el intervalo
Valor1, Valor2 (ambos imclusive). Si anteponemos la condicin 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 estn 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 categoras 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 algn 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 expresin de cadena con un modelo en una expresin SQL. Su sintaxis:
En donde expresin es una cadena modelo o campo contra el que se compara expresin. Se puede utilizar
el operador LIKE para encontrar valores en los campos que coincidan con el modelo especificado. Por
modelo tambin se puede especificar un valor completo, o se pueden utilizar caracteres comodn 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 continuacin presentaremos los distintos caracteres comodn para posteriormente comprobar las
expresiones con diferentes modelos.
Carcter Descripcin
Comodn
% Cualquier cadena de cero o ms caracteres
El - Cualquier carcter individual operador Like se puede
(Subrayado) utilizar en una
[] Cualquier carcter individual dentro del rango expresin para
especificado comparar un valor de
[^] Cualquier carcter individual que no est dentro del rango un campo con una
especificado expresin 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 parmetros, 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 slo
retorna las filas de los Productos que no empiece con F o C como carcter 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 slo 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 slo
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 estn dispuestas de la siguiente manera : que empiece con la letra J , el segundo
carcter 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 configuracin regional del
sistema.
Genera una nueva fecha a partir de fecha, aadindole
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 da de fecha
month(fecha) Devuelve un entero con la parte del mes de fecha
year(fecha) Devuelve un entero con la parte del ao 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 aadindole 30 das 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 nmero y el nombre del mes de la fecha del sistema.
Ejemplo 06: el siguiente ejemplo entrega el da, mes y ao 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(expresin AS tipo_dato)
Donde:
Expresin, representa el dato que se desea convertir a otro tipo de dato.
Tipo_dato, especfica el tipo de dato al que se desea convertir expresin.
Ejemplo 07: En el siguiente ejemplo se obtiene el monto en nuevos soles existente en el almacn
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 expresin.
Expresin, representa el dato que se desea convertir a otro tipo de dato.
Estilo, indica el formato de presentacin del dato resultante.
Utilice la funcin 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 dle formato utilizando el argumento estilo.
El siguiente cuadro muestra los valores de estilo para la funcin 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 informacin 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 clusulas GROUP BY y HAVING de la sentencia SELECT.
Las funciones de agregacin permiten consolidar datos numricos. El uso de la clusula GROUP BY nos
permitir obtener reportes con data consolidada segn distintos criterios.
FUNCIONES DE AGREGACION
Son funciones que permiten efectuar una operacin aritmtica que resume los valores de una columna de
toda la tabla, o resume los valores de la columna agrupados segn determinado criterio la funcin 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 especfico de una consulta.
Sintaxis :
En donde:
DISTINCT indica que debe eliminarse los valores duplicados de expresin antes de avaluar la
funcin.
expresin representa el nombre del campo que contiene los datos que desean sumarse o
una expresin que realice un clculo utilizando los datos de dichos campos. Los operandos de
expresin pueden incluir el nombre de un campo de una tabla, una constante o una funcin.
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 aritmtica de un conjunto de valores contenido en un campo especificado de
una consulta.
Sintaxis :
En donde expresin_numrica representa el campo que contiene los datos numricos para
los que se desea calcular la media o una expresin que realiza un clculo utilizando los datos
35
de dicho campo. La media calculada por AVG es la media aritmtica(la suma de los valores
dividido por el nmero de valores).la funcin AVG no incluye ningn campo Null en el clculo.
DISTINCT indica que debe eliminarse los valores duplicados de expresin antes de avaluar la
funcin.
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 mnimo o el mximo de un conjunto de valores contenido en un campo especfico
de una consulta.
Sintaxis :
En donde expresin es el campo sobre el que se desea realizar el clculo. expresin pueden
incluir el nombre de un campo de una tabla, una constante o una funcin.
EJEMPLO 07: El siguiente ejemplo retorna el precio ms alto y ms bajo de los productos
registrados en la tabla productos
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 nmero de registros devueltos por una consulta.
Sintaxis:
En donde expresin contiene el nombre del campo que desea contar. Los operandos de
expresin pueden incluir el nombre de un campo de una tabla, una constante o una funcin.
Puede contar cualquier tipo de datos incluso texto.
36
Aunque expresin puede realizar un clculo sobre un campo, count simplemente cuenta el
nmero de registros sin tener en cuenta qu valores se almacenan en los registros. La funcin
COUNT no cuenta los registros que tienen campos NULL a menos que expresin sea el
carcter comodn asterisco (*). Si utiliza un asterisco, COUNT calcula el nmero total de
registros, incluyendo aquellos que contienen campos null. COUNT(*) Es considerablemente
mas rpida que count(campo). No se debe poner el asterisco entre comillas simples (*)
Nota:
Se pueden combinar varias funciones de columna en una expresin pero no se pueden anidar funciones de
columna, es decir:
GROUP BY y HAVING
5. GROUP BY
Combina los registros con valores idnticos, en la lista de campos especificados, en un nico
registro. Para cada registro se crea un valor sumario si se incluye una funcin SQL agregada, como
por ejemplo SUM o COUNT, en la instruccin 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 funcin SQL agregada
en la instruccin SELECT. Los valores null en los campos GROUP BY se agrupan y no se omiten.
No obstante, los valores null no se evalan en ninguna de las funciones SQL agregadas.
EJEMPLO 14: El siguiente ejemplo retorna la cantidad de productos registrados para cada
categora.
EJEMPLO 15: El siguiente ejemplo retorna la cantidad de productos por proveedor para las
categoras 2 y 4.
37
EJEMPLO 15: El siguiente ejemplo retorna el idGuia, el nmero de artculos en cada pedido y el
monto total de cada pedido de la tabla Guia_detalle y ordenado por el cdigo 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 ms de 5 artculos, recuperar el nmero de
pedido y el nmero 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 8: Hallar en qu fecha se realiz el primer pedido (suponiendo que en la tabla Guia tenemos
todos los pedidos realizados hasta la fecha).
EJERCICIO 10::Retornar los campos IdCategora, el promedio de precios y el nmero de artculos por
categora de la tabla producto.
EJERCICIO 11: Para cada pedido, cuyos pedidos suman ms de 30.000 Soles, hallar su importe medio de
pedidos. En el resultado indicar el nmero de pedido y su importe medio de pedidos.
CONSULTAS MULTITABLAS
TEMA:
Muchas consultas tiles solicitan datos procedentes de dos o ms tablas en la base de datos. En esta sesin
veremos que SQL permite recuperar datos que responden a peticiones mediante consultas multitabla que
componen datos procedentes de dos o ms tablas.
OBJETIVOS ESPECIFICOS:
CONTENIDO:
UTILIZANDO COMBINACIONES
Las condiciones de combinacin se pueden especificar en las clusulas FROM o WHERE, aunque se
recomienda que se especifiquen en la clusula FROM. Las clusulas WHERE Y HAVING pueden contener
tambin condiciones de bsqueda para filtrar aun ms las filas seleccionadas por las condiciones de
combinacin.
39
Las combinaciones se pueden clasificar en:
1. COMBINCIONES INTERNAS (la operacin tpica, que usa algunos operadores de comparacin
como = o <>). En este tipo se incluyen las combinaciones equivalentes y las combinaciones
naturales.
Las combinaciones internas usan un operador de comparacin para hacer coincidir las filas de dos
tablas segn los valores de las columnas comunes de cada tabla. Un ejemplo sera recuperar todas
las filas en las que el nmero de identificacin 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 slo devuelven filas cuando hay una fila de ambas tablas, como
mnimo, que coincide con la condicin de la combinacin. 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 clusula FROM, como
mnimo, siempre que tales filas cumplan con algunas de las condiciones de bsqueda de WHERE o
HAVING. Todas las filas se recuperarn de la tabla izquierda a la que se haya hecho referencia con
una combinacin externa izquierda, y de la tabla derecha a la que se haya hecho referencia con una
combinacin externa derecha. En una combinacin 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 combinacin externa izquierda, derecha o completa especificadas en una clusula
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 combinacin externa izquierda incluye todas las filas de
la tabla de la izquierda especificada en la clusula LEFT OUTER, y no slo 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 seleccin 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 grfico 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 nmero de clientes que no
tienen pedidos.
EJEMPLO 06:EL siguiente ejemplo retorna todos los clientes que no realizaron
pedidos. Utilizar una combinacin 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 combinacin exterior izquierda. a
41
continuacin se muestra la consulta y los resultados de la combinacin 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 combinacin externa derecha
retorna todas las filas de la tabla compaas de envos. 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 combinacin externa derecha. A continuacin se muestra la consulta
de Transact-SQL y los resultados de la combinacin 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
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 combinacin 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 informacin que no coincida al incluir las filas no coincidentes en los
resultados de una combinacin, utilice una combinacin externa completa. SQL Server
2000 proporciona el operador de combinacin 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 combinacin de la tabla AUTHORS Y de la tabla PUBLISHERS en sus
columnas CITY. los resultados slo muestran los autores que viven en ciudades donde
hay algn editor(en este caso, Abraham Bennet y cheryl Carson). El operador de
combinacin 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 combinacin
externa completa. A continuacin se muestra la consulta y los resultados de la
combinacin 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 tambin 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 jerarqua de
valores de las columnas seleccionadas.
Ejemplo 18: El ejemplo siguiente contesta a la siguiente pregunta Mustrame los empleados
y el nmero de pedidos que atendieron por cada ao
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 Mustrame todos los nmeros de
pedidos, fecha y los datos del cliente que hizo el pedido Ordenarlos por cdigo 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 compaa, de
la tabla CLIENTES, y el ORDERID de la tabla pedidos ,utilice una combinacin externa
completa (FULL OUTER JOIN)
45