Está en la página 1de 45

BASE DE DATOS

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.

1. COMPONENTES DEL SQL

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:

Existen dos tipos de comandos SQL:

- 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

5.3.2 Operadores de Comparació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.

2. APRENDIENDO A CREAR UNA BASE DE DATOS

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.

3. CREACION DE UNA BASE DE DATOS

Antes de crear una base de datos, considere lo siguiente:

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:

Damos clic en OK, y listo, nuestra base de datos está creada.

4
3.2 COMO CREAR UNA BASE DE DATOS (USANDO EL EDITOR DE CONSULTAS)

La instrucción CREATE DATABASE

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/ % ] )

 ON PRIMARY : define las propiedades del archivo primario.


 LOG ON: define las propiedades del archivo de registro de transacciones.

a) CREAR UNA BASE DE DATOS SIN ESPECIFICAR LOS ARCHIVOS

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.

2. En el Code Editor, digite las siguientes instrucciones:

CREATE DATABASE bd_ejemplo


go

3. Ejecute las instrucciones. Si no hay errores recibimos el mensaje


Comand (s) completed successfully.

4. En el Object Explorer, expanda la carpeta Databases. Se debe mostrar la base de datos


recién creada bd_ejemplo.

b) CREAR UNA BASE DE DATOS INDIVIDUAL.

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.

CREATE DATABASE Ventas


ON
(NAME = venta_dat,
FILENAME = ‘C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\venta.mdf’,
SIZE = 4,
MAXSIZE = 10,
FILEGROWTH = 1 )
GO

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.

CREATE DATABASE Ventas2


ON
(NAME = venta2_dat,
FILENAME = ‘C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\venta2.mdf’)

d) CREAR LA BASE DE DATOS MEDIANTE LA ESPECIFICACIÓN DE MÚLTIPLES ARCHIVOS DE


REGISTRO DE DATOS Y DE TRANSACCIONES.

1. En el Code Editor, digite y ejecute las siguientes instrucciones SQL:

CREATE DATABASE Multiples_a


ON
PRIMARY (NAME = Logi1,
FILENAME = ‘C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\logidat1.mdf’,
SIZE = 5MB,
MAXSIZE = 10,
FILEGROWTH = 10),
( NAME = Arch2,
FILENAME = ‘C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\logidat2.ndf’,
SIZE = 5MB,
MAXSIZE = 10,
FILEGROWTH = 10),

( 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.

Responde: ¿que información muestra al ejecutar el procedimiento almacenado sp_helpfile?

4. ADMINISTRACION DE LOS ARCHIVOS DE UNA BASE DE DATOS

CAMBIAR EL TAMAÑO DE LA BASE DE DATOS

Si desea cambiar el tamaño de la base de datos puede usar la instrucción ALTER DATABASE o utilizar
administrador SQL Server.

4.1. ALTER DATABASE (T-SQL)

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.

ALTER DATABASE Ventas


ADD FILE
(
NAME = venta_dat,
FILENAME = ‘d:\sql200\grupo1\Bd_ven1dat.ndf’,
SIZE = 5 MB,
MAXSIZE = 10MB,
FILEGROWTH = 5MB
)
GO

4.2. EXPANSION DE LA BASE DE DATOS


Puede expandir la base de datos añadiéndole archivos adicionales, los archivos de datos
crecerán automáticamente hasta que se acabe el espacio en disco.

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.

- Ingresar a la base de datos Ventas.

7
- Ejecutar el siguiente procedimiento almacenado sp_helpdb Ventas.
- Escribir las siguientes sentencias:

ALTER DATABASE Ventas


MODIFY FILE
( NAME = venta_dat,
SIZE = 18MB )

Ahora ejecute el procedimiento almacenado de sistema sp_helpdb para verificar que se haya
agrandado satisfactoriamente la base de datos:

EXEC SP_HELPDB Ventas

4.3. ELIMINAR UN ARCHIVO DE UNA BASE DE DATOS

Para eliminar un archivo de la base de datos ventas.


ALTER DATABASE Ventas
REMOVE FILE venta_dat –es archivo principal no se puede eliminar
GO
NOTA: la eliminación de un archivo de la base de datos solo se puede ejecutar cuando el
archivo está vacío.

5. REDUCCION DEL TAMAÑO DE UNA BASE DE DATOS

a) La instrucción DBCC SHRINKFILE, reduce el tamaño de un archivo de base de datos activa.

Sintaxis:

DBCC SHRINKFILE (nombre_lógico_archivo,tamaño_final_enMB)

Ejemplo: para reducir el tamaño del archivo primario de la base de datos bd_ejemplo hasta 3 MB:

Use bd_ejemplo
Go

DBCC SHRINKFILE ( Test1dat,3)


Go

b) La instrucción DBCC SHRINKDATABASE, reduce el tamaño de los archivos de datos de la base


de datosespecificada.

Sintaxis:

DBCC SHRINKDATABASE (nombre_basedatos,porcentaje_espacio_libre_después_reducción)

Ejemplo: para reducir toda la base de dato bd_ejemplo hasta que quede solo 50% de espacio libre:

DBCC SHRINKDATABASE (bd_ejemplo,50)


go

6. ELIMINAR UNA BASE DE DATOS

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

Ejemplo: en este ejemplo se eliminará la base de datos bd_ejemplo.

DROP DATABASE bd_ejemplo


7. INSTANTÁNEAS DE UNA BASE DE DATOS

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.

CREATE DATABASE Ventas_instante_26_abril2010_12h


ON (
NAME = ventas_data,
FILENAME = ‘d: \SQL Server2005\INSTANTANEAS\ventas_instante_01.ss’ )

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:

DESARROLLE LOS SIGUIENTES CONCEPTOS Y/O DEFINICIONES:

1:- SQL Server 2014, características, Ventajas.


2.- Tecnologías o componentes del SQL Server 2014.
3.- Ediciones SQL Server 2014.
4.- Requerimientos de hardware y del sistema operativo.
5.- desarrolle de manera resumida las ventanas de SQL Server Management Studio.(Explorador de objetos)

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.

1.- APRENDIENDO A CREAR TABLAS:

1.1 ¿QUE ES UNA TABLA?

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.

Conforme se utiliza la base de datos con frecuencia se encontrará conveniente definir


tablas propias para almacenar datos personales o datos extraídos de otras tablas.

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.

1.2 CREACIÓN DE TABLAS.

Cuando se crea una tabla se debe especificar el nombre de la tabla, el nombre de la


columna, el tipo de dato de la columna y las restricciones de la columna.
Los nombres de las columnas deben ser únicos en una tabla específica, pero se puede
usar el mismo nombre de la columna en tablas diferentes dentro de la misma base de
datos.

1.3 TIPOS DE DATO

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.

Categoria TIPO DE DATOS DESCRIPCION

Bigint Datos enteros de 8 bytes

Int Datos enteros de 4 bytes

Entero Smallint Datos enteros de 2 bytes

tinyint Datos enteros comprendidos entre 0 y 255 (entero de 1 byte)

Bit Datos enteros con valor 1, 0 ó NULL

Decimal (p,s) * P es la precisión, y va de 1 a 38, siendo 18 el valor


Numérico predeterminado. S es la escala y va desde o hasta p
exacto
Numeric (p,s) * Funcionalmente equivalente a decimal

Money Valor monetario de 8 bytes


moneda
Smallmoney Valor monetario de 4 bytes

Numérico Float Números con precisión de coma flotante comprendidos entre -


aproximado 1.79E + 308 y 1.79E + 308

Real Números con precisión de coma flotante comprendidos entre-


1.18E-38,0 y 1.18E -38 a 3.40E + 38

Fecha y hora Datetime Datos de fecha y hora comprendidos entre el 1 de enero de 1753 y
el 31 de diciembre de 9999

Smalldatetime Datos de fecha y hora comprendidos entre el 1 de enero de 1900 y


el 06 de junio de 2079

Char(n) Cadena de longitud Fija (n puede ser de1 a 8 000 caracteres)

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

Text Cadena de longitud variable con un máximo de 2^31 -1 caracteres

Datos nchar(n) Datos Unicode de longitud fija de n caracteres ( n puede ser de 1 a


unicode 4000 caracteres)

nvarchar(n|max) Cadena de longitud variable ,los datos pueden variar en el número


de  caracteres (hasta 4000 caracteres Unicode) Max 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.

2 DISEÑO DE LA INTEGRIDAD DE LA BASE DE DATOS

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.

PRIMARY KEY (PK)


Garantiza que cada fila o registro en una tabla es único(a). la columna o combinación de columnas
definida como clave primaria no permite valores duplicados.
Cuando se define la restricción PK sobre un (o unos) atributo(s) de una entidad se obliga a:
- No duplicar el contenido de dicho atributo en la entidad
- No permite valores nulos (NULL)
- Se sugiere usar el tipo de datos Integer (int, smallint o tynint), numeric o
decimal

FOREIGN KEY (FK)

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

NOT NULL: (NU)


Indica que, a pesar que el motor de la base de datos obliga a registrar todos los valores de una
entidad, podríamos causar excepciones, para dejar atributos vacíos.
Cuando se define la restricción NU sobre un (o unos) atributo(s) de una entidad se le obliga a:
- No causar un error de excepción cuando se deje dicho atributo en blanco
- Los Primary Key y Foreign key, no pueden tener esta restricción.

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.

Cuando se define la restricción ID sobre un (o unos) atributo(s) de una entidad se le obliga a:


- Sólo un atributo de la entidad puede poseer esta restricción.
- El valor de este atributo será autogenerado, por ningún motivo puede ser editado.
- Se debe registrar dos parámetros : el valor inicial (seed:semilla), y el incremento.

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.

DIAGRAMA ENTIDAD – RELACION de la base de datos ventas

1) implementación paso a paso. Con ayuda de ALTER TABLE


1.1) Creamos las tablas.
Agregamos algunas restricciones:
1.2) Agregamos restricción DEFAULT, CHECK, UNIQUE..
1.3) Agregamos las llaves primarias (ADD PRIMARY KEY)
1.4) Agregamos Las Llaves Foráneas Y Relaciones (ADD FOREIGN KEY-REFERENCES)

2) Implementamos las tablas, las llaves primarias, las llaves foráneas y las relaciones en una
forma directa
A continuación detallaremos ambos caso.:

1) Implementación paso a paso utilizando el Analizador de consultas

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

LA INSTRUCCION CREATE TABLE


Sisntaxis:
CREATE TABLE nombre_tabla (
Nombre _columna1 tipo_dato1[ NULL| NOT NULL] ,
Nombre _columna1 tipo_dato1[ NULL| NOT NULL] ,
Nombre _columna1 tipo_dato1[ NULL| NOT NULL] ,
…)

USE VENTAS

CREATE TABLE CLIENTE (


Cod_cliente int ,
ApePat CHAR(50),
ApeMat char (50),
Nombre char (50),
Ruc char(11),
Direccion char (70),
Cod_dist char(5))

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

ejecute la siguiente instrucción:

sp_help cliente

CREATE TABLE DISTRITO (


Cod_dist CHAR(5) NOT NULL,
Descripción_dist CHAR(15))

.
.
.
ejercicio 02: crear las siguientes tablas PRODUCTO, UNIDAD, FACTURA, DETALLE FACTURA

MODIFICACIÓN DE LA DEFINICION DE UNA TABLA


En una tabla podemos añadir nuevas columnas, eliminar columnas, cambiar las propiedades de una
columna, añadir o eliminar restricciones.

ALTER TABLE

Permite modificar las definiciones de una tabla.

SINTAXIS:

ALTER TABLE nombre tabla


ADD nombre_columna propieddes columna
DROP COLUMN columna_nombre
ALTER COLUMN nombre_columna
Nuevas_propiedades_columna
ADD CONSTRAINT nombre_restriccion
PRIMARY KEY …. | UNIQUE…| FOREIGN KEY… |
|DEFAULT…| CHECK…
DROP CONSTRAINT nombre_restricción

AGREGANDO LAS LLAVES PRIMARIAS A TODAS LAS TABLAS:

ALTER TABLE CLIENTE


ADD CONSTRAINT PK_CODCLIENTE
PRIMARY KEY (Cod_cliente)

ALTER TABLE DETALLE_FACTURA


ADD CONSTRAINT PK_DETALLEFACT
PRIMARY KEY (Num_fact, Cod_producto)

.
.
.

AGREGANDO LLAVES FORÁNEAS Y RELACIONANDO TABLAS

Agregando referencia a la tabla distrito

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

CREATE DATABASE VENTAS_PROD1


USE VENTAS_PROD1

CREATE TABLE DISTRITO(


Cod_dist CHAR(5)NOT NULL PRIMARY KEY,
DESCRIPCION_DIST CHAR(15))

CREATE TABLE CLIENTE(


Cod_cliente int identity (100,1) NOT NULL PRIMARY KEY,
ApePat CHAR(50),
ApeMat char (50),
Nombre char (50),
Ruc char(11),
Direccion char (70),
Cod_dist char(5) references DISTRITO)
.
.

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.

OPERACIONES DE MANTENIMIENTO DE DATOS


INGRESO, MODIFICACIÓN Y ELIMINACIÓN DE DATOS

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.

 Columnas con la propiedad IDENTITY

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.

1.1 INSERTAR REGISTROS CON VALORES INCOMPLETOS

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.

Utilizar la base de datos ControlInventario creada anteriormente.

EJEMPLO 01: Añadir un registro a la tabla proveedor

18
INSERT proveedor ( Nombre , Representante , Direccion )
VALUES('GOLOSINAS Y ANTOJOS','ZAVALA ZEGARRA, CLAUDIA',
'AV. CIRCUNVALACION 755 ZONA INDUSTRIAL')

INSERT proveedor ( Nombre , Representante , Direccion )


VALUES('EL DULZON','PRADO PRADO, MIGUEL', 'AV. BRASIL CDA 5 NRO 526')

INSERT proveedor ( Nombre , Representante , Direccion )


VALUES('LACTEOS DEL CENTRO','JUAN PEREZ, WALTER','LIBERTAD 345 URB. EL PINO')

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.

1.2 INSERTAR REGISTROS CON VALORES COMPLETOS

Añadir un registro a la tabla PRODUCTO

INSERT producto (IdCategoria,IdProveedor,Nombre,UnidadMedida,PrecioProveedor,


StockActual,StockMinimo,Descontinuado )
VALUES(1,1,'CARAMELOS BASTON ARCOR','PAQUETE 454 GR',1.50,200,50,0)

INSERT producto VALUES(1,2,'CARAMELOS SURTIDO DE FRUTAS','PAQUETE 450 GR',1.00,300,50,0)

INSERT producto VALUES(2,3,'YOGURT GLORIA FRESA','ENVASE 1 LT',2.00,450,240,0)

INSERT producto VALUES(3,4,'JAMONADA LAIVE','KILOGRAMO',12.50,80,75,0)

Añadir un registro a la tabla CATEGORIA


º
INSERT categoria (Categoria, Descripcion)
VALUES('GOLOSINAS','GALLETAS,CHOCOLATES,CARAMELOS,TOFFES')

INSERT categoria VALUES('LACTEOS','LECHES,YOGURES,QUESOS,MANTEQUILLAS')

INSERT categoria VALUES('EMBUTIDOS','JAMONADAS,JAMONES,SALCHICHAS,CHORIZOS')

Ejercicio01. Llenar 1 registro más a la tabla PROVEEDOR, PRODUCTO Y CATEGORIA

1.3 INSERCIÓN DE LA FECHA DEL SISTEMA

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.

Añadir un registro a la tabla ORDEN

INSERT orden (IdOrden,FechaOrden)

VALUES(1, getdate())

--INSERT orden (IdOrden,FechaOrden)

--VALUES(1, 28/25/10)

19
INSERT orden VALUES(2, getdate(), getdate() )

INSERT orden VALUES(3, getdate() - 10, getdate() - 8)

Realizar consulta la tabla Orden:

SELECT * FROM ORDEN

1.4 INSERCIÓN DE UN VALOR DE FECHA ESPECIFICO

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

INSERT INTO PRUEBA_FECHAS

VALUES(’20 Jun 1998’)

go

SELECT * FROM PRUEBA_FECHAS

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’)

NOTA: observe si la fechas se registró correctamente

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

1.4.4 Infórmale al servidor acerca del formato de sus fechas:

SET DATEFORMAT dmy


go

SET DATEFORMAT mdy


go

SET DATEFORMAT ymd

Go

Ahora inserte nuevamente la fecha usando el formato acostumbrado para nosotros(dmy)

1.2 INSERTAR MÚLTIPLES REGISTROS:

Además existe la posibilidad de agregar múltiples registros con ayuda del comando SELECT .

Usar una subconsulta SELECT para agregar datos

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 :

o Agregar a la tabla PROVEEDOR 2 registros.

Ejecutar la siguiente instrucción SQL :

SELECT * FROM proveedor (Selecciona todos los campos de la tabla PROVEEDORES)

o Crear una tabla nueva llamada COPIA_PROVEEDOR y que contenga los


mismos campos o columnas de la tabla PROVEEDOR.

CREATE TABLE COPIA_PROVEEDOR (


IdProveedor int ,
Nombre varchar(40) NOT NULL,
Representante varchar(30) NULL,
Direccion varchar(60) NULL,
Ciudad varchar(15) NULL,
Departamento varchar(15) NULL,
CodigoPostal varchar(15) NULL,
Telefono varchar(15) NULL,
Fax varchar(15) NULL )

o Ahora nuestro objeto es trasladar todos los proveedores de la tabla PROVEEDOR


que tenga el campo ciudad =’LIMA’, a nuestra nueva tabla COPIA_PROVEEDOR.

INSERT INTO COPIA_PROVEEDOR


SELECT IdProveedor ,
nombre,Representante,Direccion,Ciudad,Departamento,CodigoPostal,Telefono,Fax
FROM PROVEEDOR

WHERE Ciudad = 'lima'

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:

UPDATE Nombre_tabla SET nombre_columna = expr,…


[WHERE {condición}]

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.

La cláusula WHERE determina que registros se modificarán

EJEMPLO01: Subir el precio de los productos de la tabla producto a un 15% de aquellos


productos cuya categorìa sea igual a 1.

SP_HELP PRODUCTO
select * from PROVEEDOR
select * from dbo.PRODUCTO
select * from dbo.CATEGORIA

INSERT proveedor VALUES('ANTOJITOS','MENDIETA AZPARRENT,BERTHA',


'AV. GRAU 125','AREQUIPA','AREQUIPA',NULL,NULL,NULL)
go
INSERT proveedor VALUES('DISTRIBUIDORA DE GOLOSINAS FENIX','FELICES ARSENIO, JOSE',
'JR. RECUAY 347 BREÑA','LIMA','LIMA',NULL,NULL,NULL)
go

INSERT producto VALUES(1,9,'GALLETAS SURTIDAS BUTTER COOKIES','ENVASE 16


ONZAS',2.50,200,50,0)
go
INSERT producto VALUES(1,10,'CHOCOLATE LOVER CHIPS DELUXE','BARRA 16
ONZAS',1.30,230,100,0)
go
INSERT producto VALUES(3,5,'JAMONADA LAIVE','KILOGRAMO',12.50,80,75,0)
go

select * from dbo.PRODUCTO

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:

select * from dbo.ORDEN

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}]

Nombre_tabla es únicamente el nombre de la tabla donde se desea borrar los datos

La cláusula WHERE determina que registros se borrará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

TRUNCATE TABLE PRODUCTO

EJERCICIOS PROPUESTOS;

SEGÚN LA BASE DE DATOS Controlinverntario:

WHERE SUE_VEN >800


1. Insertar 5 registros a la tabla ORDEN_DETALLE .

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.

5. Realizar una actualización en cascada.

6. Eliminar los registros con la descripción del campo ciudad igual a ‘Lima’ de la tabla PROVEDOR.

7. Eliminar los registros de la tabla PROVEEDOR en cascada.

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.

IMPLEMENTACIÓN DE CONSULTAS BÁSICAS


TEMA:
En esta sección veremos como leer el contenido de una tabla mediante la ejecución de consultas sencillas a
través de la instrucción SELECT
.

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.

1. INTRODUCCION A LAS CONSULTAS

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:

SELECT * FROM NombreTabla

Hay 3 componentes básicos en la instrucción SELECT: SELECT, FROM Y WHERE.

a. SINTAXIS BÁSICA:

SELECT * / ListaColumnas
FROM origenTabla
[WHERE condiciónBúsqueda]

 ListaColumnas: es la lista de columnas a mostrar el resultado de la consulta.


 Si se especifica * se mostrarán todas las columnas de la tabla.
 CondiciónBúsqueda: es una expresión lógica que indica que las filas a mostrar son
aquellas para las que el valor de la expresión es verdadero.

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)]

LECTURA DE TODOS LOS DATOS DE UNA TABLA:

EJEMPLO1: el siguiente ejemplo retorna todas las columnas y filas de la tabla


PRODUCTOS que se encuentra en la base de datos ControlInventario

USE ControlInventario
GO

SELECT * FROM PRODUCTO


GO

LECTURA DE COLUMNAS SELECCIONADAS DE UNA TABLA:

Ejemplo2: El ejemplo siguiente retorna las columnas idProducto,


nombre,unidadMedida y precioProveedor de la tabla Producto.

SELECT nombre,unidadMedida , precioProveedor


FROM producto
GO

Ejercicio1: Listar los campos idProducto, precioVenta y cantidad de la tabla


GUIA_DETALLE que se encuentra en la base de datos ControlInventario

DEFINIENDO ALIAS PARA LOS NOMBRES DE COLUMNA

Un alias define títulos alternativos para los nombres de columna. Si el Alias es una
frase(contiene espacios) debe escribirse entrecomillada.

Ejemplo3:

SELECT idProducto AS Código,


Nombre AS Descripción,
unidadMedida AS Unidad,
precioProveedor AS 'Precio Unitario'
FROM producto
GO

DEFINIENDO COLUMNAS COMPUTADAS

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.

Ejemplo4: El siguiente ejemplo retorna las columnas idProducto, Nombre,


precioProveedor, y el campo calculado ‘Precio con descuento’ = precioProveedor*0.9 de
la tabla producto.

SELECT idProducto AS Código,


Nombre AS Descripción,
unidadMedida AS Unidad,

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:

WHERE Expresión1 operador Expresión2


Donde: Expresion1 y Expresión2 pueden ser nombres de campos, valores constantes o
expresiones.
Operador es un operador relacional que une dos expresiones .
Ejemplo5:

El siguiente ejemplo retorna las columnas IdProveedor,Nombre,Representante,Ciudad de


la tabla Proveedor. El ejemplo sólo retorna las filas de los proveedores que residen en
el callao

select IdProveedor,Nombre,Representante,Ciudad
from PROVEEDOR
where ciudad='callao'

Ejemplo6:

El siguiente ejemplo retorna las columnas IdProveedor,Nombre,Representante,Ciudad de


la tabla Proveedor. El ejemplo sólo retorna las filas de los proveedores que residen en
el callao o Arequipa

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

USO DEL OPERADOR MENOR O IGUAL QUE (<= )

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

SELECT * INTO #MICOPIA FROM PROVEEDOR

Para comprobar la existencia de la tabla temporal #MICOPIA. realice un select a la tabla


temporal #MICOPIA en el Analizador de consultas:

SELECT * FROM #MICOPIA

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:

SELECT * FROM TABLA


ORDER BY {Expresion_Orden [DESC/ASC]…}

Expresión_orden puede ser el nombre de un campo, expresión o el número de posición que


ocupa la expresión de columna en la cláusula SELECT. Por defecto se ordena
ascendentemente(de menor a mayor) si se deseara de mayor a menor es empleará DESC
(DESCendente).

Ejemplo10: el ejemplo muestra los nombre de los productos de la tabla productos


ordenados descendentemente

SELECT idProducto, nombre


FROM producto
ORDER BY nombre DESC

Para obtener un listado de proveedores por su lugar ordenado por ciudades y dentro de cada
ciudad ordenados por departamentos se utilizaría:

SELECT Representante, Ciudad,Departamento


FROM PROVEEDOR
ORDER BY Ciudad, Departamento DESC

O lo mismo de otra forma:

SELECT Representante, Ciudad,Departamento


FROM PROVEEDOR
ORDER BY 2, 3 DESC

Donde los números son la pocisión actual de los campos mostrados en la cláusula SELECT

3. CONSULTAS CON PREDICADO:


El predicado se incluye entre la cláusula y el primer nombre del campo a recuperar, los posibles
predicados son:

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.

Ejemplo11:Supongamos que queremos recuperar los nombres de los 5 primeros proveedores


del campo departamento

SELECT TOP 5 IdProveedor,Nombre


FROM PROVEEDOR
ORDER BY Departamento DESC

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.

SELECT TOP 5 PERCENT IdProveedor,Nombre


FROM PROVEEDOR

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.

Ejemplo12: el siguiente ejemplo retorna la columna departamento de la tabla proveedores.

SELECT DISTINCT departamento


FROM PROVEEDOR
GO

Con otras palabras el predicado DISTINCT devuelve aquellos registros cuyos campos indicados en la
cláusula SELECT posean un contenido diferente.

Trabajo para casa:

1. De la bd de datos desarrollada del lab anterior , defina 10 consultas y mostrar los


resultados, utilizando el comando select, where, order by y los predicatos top,
percent y disctint.

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

1.- CRITERIOS DE SELECCION


A lo largo de esta y la próxima sesión estudiaremos las posibilidades de filtrar los registros con el fin
de recuperar solamente aquellos que cumplan unas condiciones preestablecidas.

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.

2.- OPERADORES LOGICOS

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

AND , OR, NOT


Observe que las condiciones de búsqueda con AND, OR y NOT pueden ser ellas mismas condicionales
de búsquedas compuestas.

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.

Poseen la siguiente sintaxis:

<expresión1> operador <expresion2>


En donde expresión1 y expresión2 son las condiciones a evaluar, el resultado de la operación varía en
función del operador lógico.

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.

EJEMPLOS DE OPERADORES LOGICOS:

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 04:Mostrar el nombre, apellidos y fecha de nacimiento de la tabla Empleado, si la fecha de


nacimiento es igual 1985

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

3.- OPERADORES NUMERICOS

Para realizar operaciones numéricas se puede utilizar los operadores:

OPERADOR SIGNIFICADO
+ Suma
- Resta
* Multiplicación
/ División
** ó ^ Exponenciación

3.1 Ejemplos de operadores Numéricos

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:

Las expresiones de caracteres pueden incluir los siguientes operadores:


OPERADOR SIGNIFICADO
+ Concatenación manteniendo espacios en blanco

4.1 Ejemplos de operadores de Caracteres

EJEMPLO 08: Mostrar el nombre y apellido del empleado en una solo columna, fecha de nacimiento.

select IdEmpleado as codigo, Nombres + ApePat + ApeMat as 'Nombres y Apellidos', FechaNacimiento


from empleado

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

5.1 EJEMPLOS DE OPERADORES DE COMPARACIÓN


5.1.1 : COMPARANDO NÚMEROS
EJEMPLO 10: Mostrar todos los datos de los Empleados que tengan menos de 50
años de edad.

5.1.2 COMPARANDO FECHAS:

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:

CAMPO [NOT] BETWEEN VALOR1 AND VALOR2


(LA CONDICION NOT ES OPCIONAL)

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.

SELECT IdProducto as Codigo,Nombre as 'Descripcion',PrecioProveedor as 'Precio Unitario'


FROM PRODUCTo
WHERE PrecioProveedor BETWEEN 12 AND 20

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:

EXPRESIÓN [NOT] IN (VALOR1, VALOR2,…)

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:

EXPRESION LIKE MODELO

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.

SELECT IdEmpleado as codigo, Nombres,ApePat, ApeMat, FechaNacimiento


FROM empleado
WHERE ApePat like '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.

SELECT IdEmpleado as codigo, Nombres,ApePat, ApeMat, FechaNacimiento


FROM EMPLEADO
WHERE Nombres LIKE '[A-F]%'

DESARROLLAR LOS SIGUIENTES EJEMPLOS:

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:

 Aprender a trabajar con las funciones para la manipulación de fechas.


 Realizar conversiones de tipo de datos.
 Obtener resultados originados por la selección de uno o varios grupos, haciendo uso de las
funciones de columna.

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

FUNCIONES PARA MANIPULACIÓN DE FECHAS:

El siguiente cuadro muestra una lista de funciones para manipular fechas:

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:

parte_fecha Abreviatura Descripcion


year yy, yyyy Año de la fecha
quarter q, qq Trimestre del año de la fecha
month m, mm Mes del año de la fecha
week ww, wk Semana del año de la fecha
day d, dd Día de la fecha
dayofyear y,dy Día del año de la fecha
weekday dw Día de la semana de la fecha
hour hh Hora de la fecha
minute n, mi Minutos de la hora de la fecha
second s, ss Segundos de la hora de la fecha
millisecond ms Milisegundos de la hora de la fecha

Ejemplos del uso de funciones para manipulación de fechas:

Ejemplo 01: Entrega la fecha y hora del sistema.

SELECT GETDATE()

Ejemplo 02: Entrega la fecha y hora del Meridiano de Greenwich

SELECT GETUTCDATE()

Ejemplo 03: El siguiente ejemplo genera una nueva fecha añadiéndole 30 días a fechaOrden

SELECT idOrden, fechaOrden, DATEADD(day,30,fechaOrden) AS 'Fecha pago'


FROM orden

Ejemplo 04: Obtener la diferencia en semanas entre fechaOrden y la fecha del sistema.

SELECT idOrden, fechaOrden,


DATEDIFF(week, fechaOrden, GETDATE()) AS 'Semanas transcurridas'

33
FROM orden

Ejemplo 05: el siguiente ejemplo entrega el número y el nombre del mes de la fecha del sistema.

SELECT DATEPART(month, GETDATE())


SELECT DATENAME(month, GETDATE())

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())

FUNCIONES DE CONVERSION DE TIPOS DE DATOS

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()

Convierte expresión al tipo de dato especificado

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).

SELECT idproducto, nombre, precioProveedor,stockActual,


CAST(precioProveedor*stockActual AS int)
FROM producto

LA FUNCION CONVERT()

Convierte expresión al tipo_dato especificado, y le da el formato especificado en estilo.

Sintaxis:

CONVERT(tipo_dato, expression[, estilo])

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.

USO DE LA FUNCION CONVERT() con datos de tipo money o smallmoney.

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.

Estilo Salida Ejemplo


0(predeterminado) Sin separador de miles, y con 2 decimales 1563.25
1 Con separador de miles, y 2 decimales 1,563.25
2 Sin separador de miles, y 4 decimales 1563.25876

34
Ejemplo 08: el siguiente ejemplo, aplica el estilo 1, con separador de miles y 2 decimales , para la
nueva columna inventario valorizado.

SELECT idproducto, nombre, CONVERT(varchar(10),


precioproveedor*stockActual,1) AS 'Inventario valorizado'
FROM Producto

FUNCIONES AGRUPADAS Y BÚSQUEDA DE GRUPOS

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 :

SELECT SUM(`[DISTINCT] expresión) FROM TABLA

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.

Veamos algunos ejemplos:

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

SELECT SUM(cantidad*PrecioVenta) as 'Cantidad total pedidos'


FROM GUIA_DETALLE

2. AVG:
Calcula la media aritmética de un conjunto de valores contenido en un campo especificado de
una consulta.

Sintaxis :

SELECT AVG((`[DISTINCT] expresión_numérica) FROM TABLA

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.

SELECT AVG(PrecioProveedor) as 'PROMEDIO PRECIOS'


FROM Producto

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 ').

SELECT AVG(cantidad) as 'PROMEDIO de unidades'


FROM 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 :

SELECT MIN(expresión) FROM TABLA

SELECT MAX(expresión) FROM TABLA

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

SELECT MAX (PrecioProveedor)AS 'PRECIO MAYOR' ,


MIN(PrecioProveedor) AS 'PRECIO MENOR'
FROM PRODUCTO

EJEMPLO 08: El siguiente ejemplo retorna el pedido más pequeño y lo refleja en el campo
'minimo'.

SELECT MAX (cantidad)AS 'pedido pequeño' ,


MIN(PrecioProveedor) AS 'PRECIO MENOR'

 
EJEMPLO 09: El siguiente ejemplo retorna la guia de remisión más antigua

EJEMPLO : El siguiente ejemplo retorna la guia de remisión más reciente.

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:

SELECT COUNT[DISTINCT](expresión) FROM TABLA

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 11: El siguiente ejemplo cuenta el total de productos registrados en la base de


datos

SELECT COUNT(*) AS TOTAL_PROCUCTOS


FROM producto

EJEMPLO 12 : el siguiente ejemplo retorna el total de empleados que nacieron el año 1985

EJEMPLO13: El siguiente ejemplo retorna el total, la media, el máximo y el mínimo de


unidades pedidas, y el número de pedidos realizados.

Nota:
Se pueden combinar varias funciones de columna en una expresión pero no se pueden anidar funciones de
columna, es decir:

SELECT (AVG(ventas) * 3) + SUM(cuota) SELECT AVG(SUM(ventas))


FROM ... FROM ...
es correcto NO es correcto, no se puede incluir una
función de columna dentro de una función de
columna

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.

SELECT idCategoria, COUNT(IDPRODUCTO) AS Cantidad_productos


FROM PRODUCTO
GROUP BY idCategoria

EJEMPLO 15: El siguiente ejemplo retorna la cantidad de productos por proveedor para las
categorías 2 y 4.

SELECT idCategoria, IdProveedor, COUNT(IDPRODUCTO) AS cantidad_productos


FROM PRODUCTO
where idCategoria IN(2,4)
GROUP BY idCategoria,IdProveedor
ORDER BY idCategoria

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.

SELECT idCategoria, IdProveedor, COUNT(idGuia) AS cantidad_productos


FROM PRODUCTO
where idCategoria IN(2,4)
GROUP BY idCategoria,IdProveedor
ORDER BY idCategoria

EJEMPLO 16: El siguiente ejemplo retorna el Monto total despachado por producto y ordenado por
el Monto total en forma descendente.

NOTA:

 La columna de agrupación se puede indicar mediante un nombre de columna o cualquier


expresión válida basada en una columna pero no se pueden utilizar los alias de campo.

 Ejemplo :

SELECT importe/cant , SUM(importe) Está permitido, equivaldría a agrupar las líneas de


FROM pedidos pedido por precio unitario y sacar de cada precio
GROUP BY importe/cant unitario el importe total vendido.
SELECT importe/cant AS precio, SUM(importe)
FROM pedidos No está permitido, no se puede utilizar un alias
GROUP BY precio campo.

6. CLAUSULA HAVING:

Especifica una condición de búsqueda de un grupo o agregado. Normalmente, HAVING se utiliza


con la cláusula GROUP BY. Cuando no se utiliza GROUP BY ,HAVING se comporta como la
cláusula WHERE.

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.

Haciendo uso del HAVING :

EJEMPLO 17: El siguiente ejemplo retorna los productos cuyo monto total despachado es mayor a
15.000 de la tabla guia_detalle.

SELECT idProducto, SUM(precioVenta*cantidad) AS 'MOnto Total'


FROM GUIA_DETALLE
GROUP BY idProducto
HAVING SUM(precioVenta*cantidad)>15000
ORDER BY 'MOnto Total' DESC

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.

SELECT IdGuia, COUNT(IdProducto) AS NRO_PRODUCTOS, sum(PrecioVenta*Cantidad)as


IMPORTE
FROM dbo.GUIA_DETALLE
GROUP BY IdGuia
HAVING COUNT(IdProducto)>10
ORDER BY IMPORTE

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 3:¿Cuántos empleados tenemos?

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:

 JOIN, LEFT JOIN, RIGHT JOIN,CROSS JOIN

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

1.1 INNER JOIN


Una combinación interna es aquella en la que los valores de las columnas que se están
combinando se comparan mediante un operador de comparación.

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

Ejemplo 02: Obtener el Idproducto, nombreproducto, EL nombrecategoria y el


nombre de la compañía donde ID_PROVEEDOR es igual a 1. Utilice una
combinación de las tablas productos, categorías y proveedores.(combinación de
tres tablas)

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

1.1.1 COMBINACIONES CON EL OPERADOR NO IGUAL


La combinación no igual (< >) se usa con poca frecuencia. Como regla general, las
combinaciones no igual sólo tienen sentido cuando se usan con una auto combinación. Por
ejemplo, la combinación no igual de Transact-SQL y la auto combinación siguientes se
usan para buscar categorías de dos o más libros baratos (menos de 15 dólares) de
distintos precios:

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

Ejemplo 04:En el siguiente ejemplo de Transact- SQL se usa una combinación no


igual que se combina con una auto combinación para buscar todas las filas de la
tabla TITLEAUTHOR en la que dos o más filas tengan el mismo TITLE_ID pero
distintos números de AU_ID(es decir, libros con más de un autor):

SELECT DISTINCT T1.AU_ID,T1.TITLE_ID


FROM TITLEAUTHOR T1 INNER JOIN TITLEAUTHOR T2 ON T1.TITLE_ID =
T2.TITLE_ID
WHERE T1.AU_ID < > T2.AU_ID
ORDER BY T1.AU_ID

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:

LEFT OUTER JOIN o LEFT JOIN


RIGHT OUTER JOIN o RIGHT JOIN
FULL OUTER JOIN o FULL JOIN

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.

EJEMPLO 05:EL siguiente ejemplo retorna las columnas ID_cliente, nombre


compañia, de la tabla clientes utilizando una combinación externa izquierda (LEFT
JOIN) con la tabla pedidos. De esta tabla obtiene las columnas Idpedido y Fecha
pedido.

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:

Imagine una combinación de la tabla AUTHORS Y de la tabla PUBLISHERS en sus


columnas CITY de la base de datos PUBS.los resultados sólo muestran los autores que
viven en ciudades donde hay algún editor(en este caso, Abraham Bennet y cheryl
Carson)

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)

Una combinación externa derecha es el inverso de una combinación externa izquierda.


Se devuelven todas las filas de la tabla de la derecha. Cada vez que una fila de la tabla
de la derecha no tenga correspondencia en la tabla de la izquierda, se devuelven valores
NULL para la tabla de la izquierda.

Ejemplo 08: El ejemplo siguiente inserta 3 registros a la tabla compañias de


envíos(SHIPPERS) en la BD Northwind. Éstos datos de ejemplo son necesarios
para crear los ejercicios siguientes:

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

EJEMPLO 09:El ejemplo siguiente retorna las columnas IDPEDIDO de la tabla


pedidos y nombre compañía, de la tabla compañías de envíos utilizando una
combinación externa derecha (RIGHT OUTER JOIN)
SELECT O.ORDERID, CE.COMPANYNAME
FROM ORDERS AS O
RIGHT OUTER JOIN SHIPPERS AS CE
ON O.ShipVia=CE.ShipperID
ORDER BY 2

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.

Ejemplo 10: Imagine una combinación de la tabla AUTHORS Y de la tabla


PUBLISHERS(editores) 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 exterior derecha, RIGHT
JOIN, indica que todas las filas de la segunda tabla se deben incluir en los
resultados, con independencia si hay datos coincidentes en la primera tabla.

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

3. COMBINACIONES CRUZADAS CROSS JOIN

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.

Ejemplo 16:A continuación se muestra un ejemplo de una combinación cruzada

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

USO DEL OPERADOR ROLLUP

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.

Las diferencias entre CUBE Y ROLLUP son:

 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 17: El ejemplo siguiente contesta a la siguiente pregunta “Muéstrame los


empleados y cuenta el número de pedidos que atendieron por año”

SELECT E.FirstName, COUNT(P.OrderID) AS 'NRO DE PEDIDOS', YEAR(P.OrderDate) AS


'AÑOS'
FROM Orders AS P INNER JOIN EMPLOYEES AS E
ON (P.EMPLOYEEID = E.EMPLOYEEID)
GROUP BY E.FIRSTNAME, YEAR(ORDERDATE) WITH ROLLUP

USO DEL OPERADOR CUBE

El operador CUBE genera un conjunto de resultados que es un cubo multidimensional. Un cubo


multidimensional es una expansión de datos de hechos o datos que registran sucesos individuales.
La expansión se basa en columnas que el usuario desea analizar, estas columnas se llaman
dimensiones. CUBE EXPLOTA LOS DATOS para generar un conjunto de resultados que contienen
un súper conjunto de grupos, con una tabulación cruzada de cada columna con el valor de todas las
demás columnas, además de un valor súper agregado especial que puede entenderse como
TODOS LOS VALORES.

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”

SELECT E.FirstName, COUNT(P.OrderID) AS 'NRO DE PEDIDOS', YEAR(P.OrderDate) AS


'AÑOS'
FROM Orders AS P INNER JOIN EMPLOYEES AS E
ON (P.EMPLOYEEID = E.EMPLOYEEID)
GROUP BY E.FIRSTNAME, YEAR(ORDERDATE) WITH CUBE

EJERCICIOS PROPUESTOS:

Ejercicio 01: Obtener el Idproducto, nombreproducto y nombrecategoria. Utilice una


combinación de las tablas productos y categorías

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.

Ejercicio 04: El siguiente ejercicio contesta la siguiente pregunta “Muéstrame cuantos


pedidos realizó el cliente HILARION-Abastos”

Ejercicio 05: El siguiente ejercicio contesta la siguiente pregunta “Muéstrame cuantos


productos existen por categoría”

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

También podría gustarte