Está en la página 1de 182

UNIVERSIDAD NACIONAL DE CAJAMARCA

FACULTAD DE INGENIERÍA

ESCUELA ACADÉMICO PROFESIONAL DE


INGENIERÍA DE SISTEMAS

Manual de SQL Server 2008


CONCEPTOS Y EJERCICIOS EN SQL
Estrada Aguilar, Karen Johana

Cajamarca, 2012
Manual de SQL Server 2008 2012

INTRODUCCIÓN............................................................................................................................. - 5 -
CAPÍTULO I .................................................................................................................................... - 6 -
CONCEPTOS BÁSICOS DE SQL .........................................................................................................- 6 -
1.1. LENGUAJE ESTRUCTURADO DE CONSULTAS ........................................................... - 6 -
1.1.1. REQUERIMIENTOS Y CARACTERÍSTICAS........................................................................... - 6 -
1.2. INICIANDO SQL SERVER 2008 ......................................................................................... - 7 -
1.3. CREAR UNA NUEVA TABLA: ........................................................................................... - 12 -
1.4. HACER CONSULTAS ......................................................................................................... - 16 -

CAPITULO II ........................................................................................................................................ - 18 -

COMANDOS BÁSICOS DE SQL .........................................................................................................- 18 -


2.1. INSTRUCCIONES DE SQL SERVER 2008 .................................................................... - 18 -
2.1.1. SELECT ....................................................................................................................................... - 18 -
2.1.2. FROM ........................................................................................................................................... - 19 -
A. MODIFICADORES .......................................................................................................................... - 20 -
 Distinct y All: ............................................................................................................................. - 20 -
 TOP n: ......................................................................................................................................... - 21 -
B. FUNCIONES DE AGREGACIÓN ................................................................................................. - 21 -
C. USO DE ALIAS: .............................................................................................................................. - 23 -
2.1.3. WHERE ........................................................................................................................................ - 24 -
 OPERADORES LÓGICOS ............................................................................................................ - 24 -
 OPERADORES DE COMPARACIÓN .......................................................................................... - 24 -
 CONCATENACIÓN DE CADENAS ............................................................................................. - 26 -
 IN ....................................................................................................................................................... - 27 -
 BETWEEN........................................................................................................................................ - 29 -
 NULL ................................................................................................................................................. - 31 -
 LIKE .................................................................................................................................................. - 32 -
 YEAR MONTH DAY ....................................................................................................................... - 33 -
2.1.4. ORDER BY .................................................................................................................................. - 34 -
 TOP ................................................................................................................................................... - 35 -
 WITH TIES ....................................................................................................................................... - 36 -

EJERCICIOS ....................................................................................................................................... - 37 -

CAPÍTULO III ....................................................................................................................................... - 48 -

COMBINACIÓN DE TABLAS Y AGRUPACIÓN DE DATOS ..............- 48 -


3.1. JOIN ....................................................................................................................................... - 48 -
INNER JOIN: .................................................................................................................................................. - 48 -
LEFT JOIN: ..................................................................................................................................................... - 48 -
RIGTH JOIN: .................................................................................................................................................. - 48 -
UNION: ............................................................................................................................................................ - 48 -
3.2. GROUP BY ........................................................................................................................... - 49 -

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


-3-
Manual de SQL Server 2008 2012
3.3. HAVING ................................................................................................................................. - 50 -
EJERCICIOS ....................................................................................................................................... - 54 -

CAPÍTULO IV ...................................................................................................................................... - 73 -

MANIPULACIÓN DE TABLAS ..............................................................................................................- 73 -


4.1. INSERT INTO ....................................................................................................................... - 73 -
4.2. UPDATE ................................................................................................................................ - 75 -
4.3. DELETE FROM .................................................................................................................... - 78 -
4.4. SUBCONSULTAS................................................................................................................ - 79 -
4.5. PROCEDIMIENTOS ALMACENADOS (STORE PROCEDURE) ................................ - 80 -

EJERCICIOS ....................................................................................................................................... - 85 -

CAPÍTULO V ....................................................................................................................................... - 96 -

OTRAS SENTENCIAS ..........................................................................................................................- 96 -


5.1. SUBSTRING FUNCION ...................................................................................................... - 96 -
5.2. TRIM FUNCION ................................................................................................................... - 96 -
5.3. SENTENCIA CAST .............................................................................................................. - 97 -

EJEMPLOS .......................................................................................................................................... - 98 -

CAPÍTULO VI .................................................................................................................................... - 100 -

REPORTING SERVICE ......................................................................................................................- 100 -


6.1. INGRESANDO A SQL SERVER BUSINESS INTELLIGENCE DEVELOPMENT
STUDIO ............................................................................................................................................ - 100 -
6.2. CREAR UN NUEVO PROYECTO DE REPORTES ..................................................... - 102 -
6.3. DATA SOURCE (ORIGEN DE DATOS COMPARTIDO) ............................................ - 104 -
6.4. CREAR UN INFORME PARA HACER REPORTES .................................................... - 106 -
6.5. DATA SET........................................................................................................................... - 107 -
EJERCICIOS ................................................................................................................................... - 114 -
PRÁCTICA ....................................................................................................................................... - 123 -
AGRUPAR EN REPORTING SERVICE ...................................................................................... - 138 -
ENLACES DE INFORMES ............................................................................................................ - 141 -
IMPLEMENTACIÓN DE REPORTING SERVICE EN IIS ......................................................... - 144 -
INFORMES INTEGRADOS ........................................................................................................... - 146 -
EJERCICIOS: .................................................................................................................................. - 148 -
PRACTICA CALIFICADA DE REPORTING SERVICES SQL SERVER 2008 ...................... - 154 -
ADMINISTRACIÓN DE USUARIOS ............................................................................................ - 163 -
CREACIÓN DE VISTAS ................................................................................................................ - 165 -
CREACIÓN DE UN GRUPO DE INICIOS DE SESIÓN EN UN STORE PROCEDURE ..... - 168 -
CREACIÓN DE UN GRUPO DE USUARIOS EN UN STORE PROCEDURE ...................... - 170 -
FUNCIONES .................................................................................................................................... - 172 -
RESTRICCIONES .......................................................................................................................... - 176 -
PROPUESTOS: .............................................................................................................................. - 178 -
TRIGRESS ....................................................................................................................................... - 182 -

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


-4-
Manual de SQL Server 2008 2012

El presente manual de SQL Server 2008 trata principalmente del manejo de datos a
través de las diferentes sentencias que tiene SQL. En este se considera a las tablas como
contenedores de datos organizados en filas y en columnas. Aquí es posible seleccionar
datos que pertenezcan a diferentes tablas y también es permitido establecer reglas o
condiciones que tengan que cumplir dichos datos para poder ser considerados como
registros resultantes.

La primera encarnación de SQL apareció en 1974, cuando un grupo de IBM desarrolló el


primer prototipo de una base de datos relacional. Relational Software (luego se convirtió
en Oracle) quien lanzó la primera base de datos relacional comercial.

El mayor mérito de SQL está en su posibilidad de combinar las diferentes tablas de una
base de datos en un solo conjunto resultante y por ello ha sido considerado en la mayoría
de los programas administradores de Base de Datos tales como Oracle, Access o FoxPro.

En este manual de SQL se enumera los comandos SQL normalmente utilizados, y se


divide en las siguientes secciones:

 Conceptos básicos de SQL: Que tratará de definir a SQL, cómo iniciar el


programa, creación de tablas, hacer consultas.

 Comandos Básicos de SQL: Las instrucciones SQL básicas para


almacenamiento, recuperación y manipulación de datos en una base de datos
relacional.

 Manipulación de Tabla: Cómo se utilizan las instrucciones SQL para administrar


las tablas dentro de una base de datos.

Para cada comando; primero se definirá, luego se presentará y explicará la sintaxis SQL,
seguida por algún o algunos ejemplos.

Finalmente después de cada capítulo se mostrará los ejercicios desarrollados en la clase


de Base de Datos II.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


-5-
Manual de SQL Server 2008 2012

CONCEPTOS BÁSICOS DE SQL

1.1. LENGUAJE ESTRUCTURADO DE CONSULTAS

El Lenguaje de Consulta Estructurado (SQLStructured Query Language) es un


lenguaje de base de datos normalizado, que se basa en el modelo relacional. Sql
está compuesto por comandos, clausulas, operadores y funciones de agregado.
Estos elementos se combinan en las instrucciones para crear, actualizar y
manipular las bases de datos.

1.1.1. REQUERIMIENTOS Y CARACTERÍSTICAS

 SQL Server tiene reservadas determinadas palabras clave para su uso


exclusivo. Por ejemplo, si se usan las palabras clave DUMP o BACKUP
en una sesión de osql o del Analizador de consultas de SQL, se estará
indicando a SQL Server que debe realizar una copia de seguridad total o
parcial de la base de datos, o una copia de seguridad del registro.

 Debe evitar usar una palabra clave reservada como nombre de un


objeto. Si el nombre de un objeto coincide con una palabra clave, cada
vez que se haga referencia al objeto debe aparecer entre identificadores
delimitadores, como dobles comillas (“ ”) o corchetes ([ ]).

 Para hacer un comentario en una línea se puede poner dos guiones


antes de éste (--). Ejm.:-- SQL es un lenguaje de programación

 Para crear bloques de varias líneas de comentarios, se coloca un


carácter de comentario (/*) al comienzo del texto del comentario, escriba
sus anotaciones y, después, se concluye el comentario con un carácter
de cierre de comentario (*/).Ejm.:
/*Los comentarios son cadenas de texto que no se ejecutan,
colocadas en las instrucciones para describir la acción que
la instrucción está realizando*/

SQL Server no distingue las mayúsculas de las minúsculas

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


-6-
Manual de SQL Server 2008 2012
1.2. INICIANDO SQL SERVER 2008

Para iniciar el trabajo con SQL Server 2008y poder realizar ejercicios de consultas
con SQL TRANSACT primero ingresaremos al motor de la base de datos para lo
cual seguiremos los siguientes pasos:

 Buscamos el icono de SQL Server Management Studio en el escritorio y


hacemos doble clic.

 Podemos escribir la siguiente dirección en el cuadro Ejecutar: “C:\Program Files


\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe” y
pulsar ENTER.

Es la ruta que adquiere el programa de SQL Server 2008 en la instalación


estándar.

 Si no encontramos éste icono en el escritorio y no podemos ejecutar lo anterior


hacemos lo siguiente:

o Clic en el botón inicio.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


-7-
Manual de SQL Server 2008 2012
o Clic en todos los programas.

o Clic en Microsoft SQL Server 2008.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


-8-
Manual de SQL Server 2008 2012
o Y finalmente hacemos clic en SQL Server Management Studio

 Esperamos que cargue…

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


-9-
Manual de SQL Server 2008 2012
 Luego realizamos la conexión con el servidor.

Como podemos ver; tenemos la opción de elegir:

El Tipo de Servidor Nombre del Servidor (ha sido definido El tipo de Autentificación
al que debemos conectarnos al momento de la instalación)

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 10 -
Manual de SQL Server 2008 2012

 Después de elegir estos parámetros damos clic en conectar.

 Finalmente vemos que la conexión ha sido realizada.

Los objetos lo podemos ver en las carpetas como Base de Datos, cuando lo
extendemos, entre otros; como también veremos las Bases de Datos existentes
que han sido creadas al momento de la instalación una de ellas con la que
trabajaremos es la Base de Datos Notrhwind.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 11 -
Manual de SQL Server 2008 2012
1.3. CREAR UNA NUEVA TABLA:

Las tablas sirven para representar los datos o registros de una Base de
Datos.Cada tabla está compuesta por varias filas y columnas, cadacolumna tiene
un nombre único.

Ejemplo: Crearemos la tabla Alumnos.


El proceso que hay que seguir es el siguiente:

 Expandimos la carpeta Base de Datos.

 Ubicamos la Base de Datos donde vamos a crear nuestra tabla (en este caso
utilizaremos la Base de Datos Notrhwind) expandimos.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 12 -
Manual de SQL Server 2008 2012
 Hacemos anticlic (clic derecho) en la palabra Tablas y escogemos la opción
Nueva Tabla.

 Después, iremos dando el nombre a cada campo que formarán las columnas de
la tabla (Código,Paterno, Materno, Nombre, Sexo, Dirección).

 A cada una de las columnas le asignaremos un Tipo de datos predefinido (por


defecto es nchar(10) ) o bien un dominio definido por el usuario. También
podremos definir si se aceptarán valores nulos o no.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 13 -
Manual de SQL Server 2008 2012
 En la parte baja al momento de escoger Tipo de datos están las Propiedades
de columna o campo.

 Podemos elegir la Clave principal (PK) haciendo anticlic en el nombre del


campo y eligiendo la opción Establecer clave principal.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 14 -
Manual de SQL Server 2008 2012
 Decidimos qué nombre queremos poner a la tabla (Alumnos). Hacemos clic en
guardar Tabla.

 Aparece un cuadro donde pondremos el nombre Alumnos y hacemos clic en


Aceptar.

 Cerramos y en la Base de Datos Northwind, en Tablas hacemos anticlic y


elegimos actualizar; veremos ya la tabla creada en dicha lista.

Cuando se crea una tabla, hay que especificar el nombre de la tabla, los nombres
de las columnas y sus tipos de datos. Se puede utilizar el mismo nombre de
columna en tablas diferentes de la misma base de datos.
Para llenar una tabla ya veremos más adelante los comandos que se deben
utilizar.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 15 -
Manual de SQL Server 2008 2012
1.4. HACER CONSULTAS

Una consulta es una instrucción de solicitud para recuperarinformación.Las


consultas pueden involucrar información de másde una tabla. El resultado de una
consulta es otra tabla con los datos requeridos en ella.
Esta consulta encuentra todos los campos del empleado: (utilizando la Northwind)

SELECT *
FROM Employees

La consulta especifica que las filas de (from) la tabla Employees se debe


recuperar, y que se debe mostrar todos sus campos (*).

Para crear esta consulta hacemos:

 Clic derecho sobre la base de datos Northwind y seleccionamos la opción


Nueva Consulta.

 Luego escribimos la consulta:

Como podemos ver SQL nos muestra un listado de tablas que existe dentro de la
base de datos que estamos trabajando.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 16 -
Manual de SQL Server 2008 2012
 Cuando ya esté escrita la consulta damos clic en el botón ejecutar o
presionamos la tecla de función F5.

 En la parte baja podemos ver el resultado de la consulta realizada.

 Finalmente para guardar la consulta damos clic en el botón guardar, le


colocamos un nombre y damos un clic en guardar.

Cuando tenemos varios códigos de diferentes consultas en una sola ventana es


necesario seleccionar a la consulta que se desea ver y dar clic en ejecutar o
presionar F5, pues si no hacemos esto se ejecutan todas las consultas que están
dentro de una misma ventana.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 17 -
Manual de SQL Server 2008 2012

COMANDOS BÁSICOS DE SQL

2.1. INSTRUCCIONES DE SQL SERVER 2008

SQL está compuesto por comandos, clausulas, operadores y funciones de


agregado. Estos elementos se combinan en las instrucciones o consultas para
crear, actualizar y manipular las bases de datos
Las instrucciones de SQL Server 2008 permiten:

 Realizar el manejo de los datos. Es decir, consultar y actualizar los datos


de las tablas, así como eliminar y agregar registros.

 Administrar la estructura de los campos de datos. En otras palabras crear,


modificar y eliminar las tablas de datos.

Tipos de Comandos:

La escritura y ejecución de instrucciones de Transact-SQL es una de las formas en


que se puede realizar una consulta en SQL Server. Las sentencias SQL se
dividen, principalmente en las siguientes categorías:
 DDL (Instrucciones del Lenguaje de definición de datos) que permiten crear
y definir nuevas bases de datos, campos e índices.

 DCL (Instrucciones del Lenguaje de control de datos) que se utilizan para


determinar quién puede ver o modificar los datos.

 DML (Instrucciones del Lenguaje de tratamiento de datos) que permiten


generar consultas para ordenar, filtrar y extraer datos de la base de datos.
Mediante estas instrucciones puede cambiar o recuperar información.

Este manual se centra, principalmente, en el uso de instrucciones DML


para consultar datos de SQL Server.

2.1.1. SELECT
La sentencia SELECT permite seleccionar registros de una o más
tablas.Se usa para listar los campos deseados del resultado de una
consulta. Es la sentencia básica de SQL.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 18 -
Manual de SQL Server 2008 2012
2.1.2. FROM

Esta instrucción se utiliza para obtener información de la base de datos,


nos permite sacar reportes y es el principal comando. La cláusula FROM
especifica la tabla de la que se obtienen las filas y columnas. En la cláusula
FROM podemos utilizar tablas derivadas, combinaciones y alias.
Ambas sentencias SELECT y FROM se utilizan juntas y su sintaxis más
simple es la siguiente:

SINTAXIS

SELECT nombre_ campo


FROM nombre_tabla

La cual, traducida al español, significa “SELECCIONAR ciertos campos


DESDE cierta tabla”. Por esta razón es que se denominan consultas de
selección.

Por ejemplo, si se quiere «Obtener toda la información de los Productos»;


se podría escribir cualquiera de las siguientes instrucciones:

 Abreviando, pues se desea obtener todos los campos de la Tabla


Products.
SELECT *
FROM Products

El * después de SELECT indicaque queremos ver todos los campos que aparecen
en la tabla.

 Listando los campos separados por comas:

Select
ProductID,ProductName,SupplierID,CategoryID,QuantityP
erUnit,UnitPrice,UnitsInStock,UnitsOnOrder,ReorderLev
el,Discontinued
From Products

 Haciendo explícita, en la lista de campos, la referencia a la tabla:


SELECT Products.*
FROM Products

Es conveniente en muchos casos utilizar necesariamente la referencia explícita a


la tabla desde la cual se desea tomar las columnas en la lista de campos cuando
se extraen datos de más de una tabla.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 19 -
Manual de SQL Server 2008 2012
Al ejecutar cualquiera de las instrucciones anteriores se muestra la
siguiente tabla resultante de la consulta:

A. MODIFICADORES

 Distinct y All: Devuelve solamente filas únicas, elimina las filas


duplicadas del conjunto de resultados, es preciso poner la palabra
clave DISTINCT inmediatamente después de SELECT. También
podríamos explicitar que lo queremos todo, incluso con repeticiones,
poniendo ALL (opción por defecto) en lugar de DISTINCT.
Por ejemplo, si se quiere obtener todas las filas de la tabla
customers, pero sólo que se muestre el nombre de cada país una
vez. Se escribe la siguiente instrucción:
SELECT DISTINCT country
FROM dbo.Customers
Al ejecutar la instrucción se muestra la siguiente tabla resultante:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 20 -
Manual de SQL Server 2008 2012

 TOP n: Devuelve solamente las n primeras filas de un conjunto de


registros resultantes.
Por ejemplo, si se quiere obtener los nombres de los empleados
de las tres (3) primeras filas de la tabla employees. Se escribe la
siguiente instrucción:

Select top (3) FirstName


From dbo.Employees
Al ejecutar la instrucción se muestra la siguiente tabla resultante:

B. FUNCIONES DE AGREGACIÓN: Las funciones que calculan


promedios y sumas se llaman funciones de agregado. Cuando se
ejecuta una función de agregado, SQL Server resume los valores de
toda una tabla o de grupos de columnas de una tabla, y produce un
valor por cada conjunto de filas para las columnas especificadas.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 21 -
Manual de SQL Server 2008 2012
La sintaxis para el uso de funciones de agregación es:

SINTAXIS

SELECT "tipo de función"("nombre_columna")


FROM "nombre_tabla"

El SQL nos ofrece las siguientes funciones de agregación para


efectuar varias operaciones sobre los datos de una base de datos:

Función Descripción

COUNT Nos da el número total de filas seleccionadas de


un determinado campo incluyendo los valores
nulos

COUNT(*) Nos da el número total de filas seleccionadas de


un determinado campo no incluye los valores nulos

SUM Suma los valores de una columna

MIN Nos da el valor mínimo de una columna

MAX Nos da el valor máximo de una columna

AVG Calcula el valor medio de una columna

STDEV Desviación estadística de todos los valores

STDEVP Desviación estadística para la población

VAR Varianza estadística de todos los valores

VARP Varianza estadística de todos los valores para la


población
Por ejemplo, si se quiere obtener el total de empleados que hay de la
tabla employees. Se escribe la siguiente instrucción:
Select COUNT(*)
From Employees
Al ejecutar la instrucción se muestra la siguiente tabla resultante:

Si se quiere obtener el total de órdenes realizadas que hay de la tabla


Orders Details. Se escribe la siguiente instrucción:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 22 -
Manual de SQL Server 2008 2012

Select sum(Quantity)
From [Order Details]

Al ejecutar la instrucción se muestra la siguiente tabla resultante:

Si se quiere obtener el mayor precio de los productos de la tabla


Products. Se escribe la siguiente instrucción:

Select max(UnitPrice)
From Products

Al ejecutar la instrucción se muestra la siguiente tabla resultante:

En general, las funciones de agregación se aplican a una columna,


excepto la función de agregación COUNT, que normalmente se aplica
a todas las columnas de la tabla o tablas seleccionadas. Por lo tanto,
COUNT (*) contará todas las filas de la tabla o las tablas que cumplan
las condiciones. Si se utilizase COUNT(columna), sólo contaría los
valores que no fuesen nulos.

C. USO DE ALIAS: Hay dos tipos de alias que se utilizan con mayor
frecuencia. Alias de columna y alias de tabla.

Los alias de columna existen para ayudar en la organización del


resultado. En el ejemplo anterior, cualquiera sea el momento en que
vemos el mayor precio de los productos, se enumeran como
MAX(UnitPrice).
El segundo tipo de alias es el alias de tabla. Esto se alcanza al colocar
un alias directamente luego del nombre de tabla en la cláusula FROM.
Esto es conveniente cuando desea obtener información de dos tablas
separadas. La ventaja de utiliza un alias de tablas cuando realizamos
uniones es rápidamente aparente cuando hablamos de uniones.

La sintaxis tanto para el alias de columna como de tabla es:

SINTAXIS

SELECT "alias_tabla"."nombre1_columna" "alias_columna"


FROM "nombre_tabla" "alias_tabla"

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 23 -
Manual de SQL Server 2008 2012
Brevemente, ambos tipos de alias se colocan directamente después
del elemento por el cual generan el alias, separados por un espacio en
blanco.
Por ejemplo, si se quiere obtener el mínimo precio de los productos
de la tabla Products, utilizando alias. Se escribe la siguiente
instrucción:

Select min(p.UnitPrice) as precio_Minimo


From Products as p

Al ejecutar la instrucción se muestra la siguiente tabla resultante:

2.1.3. WHERE

La sentencia WHERE sirve para filtrar registros lo que no lo hace el


SELECT ni el FROM. Éste permite establecer condiciones que deban
cumplir los registros para ser considerandos dentro del conjunto resultante.
Después de Cláusula WHERE (donde) irá la(s) condición(es) que deben
cumplir los registros. La sintaxis de SQL considerando esta sintaxis es:

SINTAXIS

SELECT "nombre_campo"
FROM "nombre_tabla"
WHERE "Condición_Filtro"

Para definir las condiciones en la cláusula WHERE, podemos utilizar


alguno de los operadores de los que dispone el SQL, que son los
siguientes:

 OPERADORES DE COMPARACIÓN  OPERADORES LÓGICOS


= Igual NOT Para la negación de
< Menor condiciones
> Mayor AND Para la conjunción de
<= Menor o igual condiciones
>= Mayor o igual OR Para la disyunción de
<> Diferente condiciones

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 24 -
Manual de SQL Server 2008 2012
Por ejemplo, “Mostrar los productos de la categoría 2”
La instrucción sería de la siguiente manera; utilizando el operador de
comparación igual (=):
select*
fromProducts
whereCategoryID=2
Resultado de la consulta:

Al comparar valores de tipo INT estos se escriben normalmente, pero al comparar


con valores de tipo texto, éste debe estar entre comillas simples (‘’)
Así como para saber la categoría 5; cambiamos:
select*
fromProducts
whereCategoryID=5
o
select*
from[Order Details]
whereOrderID=10260

Para unir dos condiciones unimos con cualquier operador Lógico:


And/OrSINTAXIS

SELECT "nombre_campo"
FROM "nombre_tabla"
WHERE "condición " {[AND|OR] "condición "}

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 25 -
Manual de SQL Server 2008 2012
Ejemplo: Mostrar los Productos de la Categoría 4 y 6.
select*
fromProducts
whereCategoryID=4 orCategoryID=6
Resultado de la consulta:

 CONCATENACIÓN DE CADENAS

El operador de concatenación de cadenas (+) concatena valores de


cadena. El resto de las operaciones con cadenas se controla mediante
las funciones de cadena.
Por ejemplo, queremos mostrar el nombre completo de los empleados
en una sola columna o campo:

select FirstName+(' ')+LastName as nombre_completo


from dbo.Employees

Se mostrará la siguiente tabla como resultado:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 26 -
Manual de SQL Server 2008 2012
 IN

Verifica que una determinada expresión se encuentre dentro de una lista


de valores la cual puede ser escrita elemento por elemento o puede ser
el resultado de otra consulta; las reglas que todas las condiciones deben
estar unidas con el OR, deben ser del mismo campo y los operadores
sean “=” .

La sintaxis de esta instrucción es:

SINTAXIS

SELECT "nombre_campo"
FROM "nombre_tabla"
WHERE "nombre_campo" IN ('valor1', 'valor2', ...)

Ejemplo:Selecciona todos los campos de la tabla Productscuyos


campos sea de las Categorías 4 o 6 o 8 o 2

SELECT*
FROMProducts
WHERECategoryIDin(4,6,8,2)

El resultado es el siguiente:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 27 -
Manual de SQL Server 2008 2012
Ejemplo: Obtener todos los productos de los proveedores con número
3, 5, 8.

SELECT*
FROMProducts
WHERESupplierIDin(3,5,8)

Resultado de la consulta:

Ejemplos:

o Mostrar el nombre del producto, unidad, código; cuyo precio es mayor que 100.

SELECTProductID,ProductID,UnitPrice
FROMProducts
WHEREUnitPrice>100

o Mostrar el nombre del producto, unidad, código; además los productos que
están entre 30 y 60.

selectProductID,ProductName,UnitPrice
fromProducts
WhereUnitPrice>30 ANDUnitPrice<60

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 28 -
Manual de SQL Server 2008 2012

 BETWEEN

Verifica que el resultado de una expresión se encuentre entre otros dos


valores. Debe haber un rango que el campo sea el mismo y además un
operador sea >= y el otro <=.
La sintaxis de este predicado es:

SINTAXIS

SELECT "nombre_campo"
FROM "nombre_tabla"
WHERE "nombre_campo" BETWEEN 'valor_mínimo' AND 'valor_máximo'

o Ejemplo: Mostrar el nombre del producto, unidad, código; además los


productos que están entre 30 y 60.

selectProductID,ProductName,UnitPrice
fromProducts
WhereUnitPricebetween 30 and 60

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 29 -
Manual de SQL Server 2008 2012

o Mostrar el nombre del producto, unidad de precio, código, stock y la


categoría, solo de aquellos que tienen un stock entre 0 y 10.
selectProductID,ProductName,UnitPrice,UnitsInStock,Cate
goryID
fromProducts
WhereUnitsInStockbetween 0 AND 10

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 30 -
Manual de SQL Server 2008 2012
o Mostrar el nombre del producto y su código, donde el nombre del producto
sea Chang.
selectProductID,ProductName
fromProducts
WhereProductName='chang'

 NULL

o Una columna tiene un valor NULL cuando no se ha especificado


ningún valor para ella durante la entrada de datos y no tiene definido
un valor predeterminado. Un valor NULL no es lo mismo que cero
(que es un valor numérico) o blanco (que es un valor de carácter).

o Puede utilizar la condición de búsqueda IS NOT NULL para obtener


las filas con valores conocidos en las columnas especificadas.
Por ejemplo, mostrar a los nombres de las compañías existentes de los
proveedores.

select ContactName
from dbo.Suppliers
where ContactName is not null
Al ejecutar esta consulta da la siguiente tabla como resultado:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 31 -
Manual de SQL Server 2008 2012
 LIKE

LIKE es otra palabra clave que se utiliza en la cláusula WHERE.


Básicamente, LIKE le permite hacer una búsqueda basada en un patrón
en vez de especificar exactamente lo que se desea (como en IN) o
determinar un rango (como en BETWEEN). La sintaxis es la siguiente:

SINTAXIS

SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "nombre_columna" LIKE {patrón}

Ejemplos de uso de caracteres comodín


La tabla siguiente contiene ejemplos de uso de comodines con la
condición de búsqueda LIKE.

Expresión Devuelve
LIKE 'BR%' Todos los nombres que comiencen por las letras BR.
LIKE '%een' Todos los nombres que terminen con las letras een.
LIKE '%en%' Todos los nombres que contengan las letras en.
LIKE '_en' Todos los nombres de tres letras que terminen con las
letras en.
LIKE '[CK]%' Todos los nombres que comiencen por C o por K.
LIKE '[S-V]ing' Todos los nombres de cuatro letras que terminen con
las letras ing y comiencen por cualquier letra
comprendida entre S y V.
LIKE 'M[^c]%' Todos los nombres que comiencen por la letra M y
cuya segunda letra no sea c.

Ejemplo
En este ejemplo se obtienen las compañías de la tabla customers que
contengan la palabra "restaurant" en su nombre.
SELECT companyname
FROM customers
WHERE companyname LIKE '%Restaurant%'
Al ejecutar la instrucción se nos presenta la siguiente tabla resultante:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 32 -
Manual de SQL Server 2008 2012
Ejemplo
En este ejemplo se obtienen los nombres de los productos de la tabla
products que contengan terminen en "s" en su nombre.
selectProductID,ProductName
fromProducts
WhereProductNamelike'%s'

Al ejecutar la instrucción se nos presenta la siguiente tabla resultante

 YEAR MONTH DAY

Estas tres sentencias sirven para trabajar con fechas cómodamente, si


queremos saber los empleados que nacieron en el 1963 sería:

SELECT *
FROM Employees
WHERE YEAR(BirthDate)=1963

Para mes sería Month y para día DAY. Recordar que "fecha" debe ser
un campo de tipo Date, y que el comparador es un entero (no poner
entre comillas)

Resultado de la consulta:

También se puede utilizar la cláusula DATEPART(YYYY,Campo) o


DATEPART(MM,Campo) o DATEPART(DD,Campo)
Para saber las ordenes realizadas en el año de 1996 hacemos:

SELECT *
FROM dbo.Orders
WHERE Datepart(yyyy,OrderDate)='1996'

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 33 -
Manual de SQL Server 2008 2012

2.1.4. ORDER BY

Es posible ordenar los registros devueltos por la sentencia SELECT


añadiendo a la instrucción la cláusula ORDER BY, por defecto sale
ordenado en forma ascendente. La sintaxis en este caso es el siguiente:

SINTAXIS

SELECT "nombre_campo"
FROM "nombre_tabla"
WHERE "condición"
ORDER BY "nombre_campo" [ASC, DESC]

o Mostrar el nombre del producto, unidad de precio, código, stock y la


categoría, solo de aquellos que tienen un stock entre 0 y 10. Ordenado por
el precio en forma descendente.
selectProductID,ProductName,UnitPrice,UnitsInStock,Cat
egoryID
fromProducts
WhereUnitsInStockbetween 0 AND 10
OrderbyCategoryIDDESC

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 34 -
Manual de SQL Server 2008 2012

El campo por el que queremos ordenar debe estar en el SELECT. La palabra ASC
o DESC se pone al final de las columnas de ordenamiento.

 TOP

Devuelve un determinado número de registros. Esta sentencia se guía


por la ordenación.

SINTAXIS

Select top n * from tabla

Donde “n” es la cantidad de registros que se requiere


select top 3*
from Products

o Obtener los 15 primeros registros de detalle de la orden q tengan mayor


cantidad vendida:

Selecttop 15 OrderId,ProductID,Quantity
from[Order Details]
orderbyQuantitydesc

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 35 -
Manual de SQL Server 2008 2012

 WITH TIES

Devuelve las filas iguales si se utiliza


SELECT TOP 5 WITH TIES orderid, productid, quantity
FROM [order details]
ORDER BY quantity DESC
Resultado de la consulta:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 36 -
Manual de SQL Server 2008 2012

EJERCICIOS
Base de Datos II (20011-1)
Ing. De Sistemas – FI- UNC
EJERCICIOS básicos de SQL TRANSACT
(Microsoft SQL SERVER 2008)

Usando la Base de Datos Northwind, realizar las siguientes consultas:


1. Seleccionar todos los campos de la tabla Clientes, ordenado por nombre del
Contacto de la compañía, alfabéticamente.

select *
from dbo.Customers
order by ContactName

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 37 -
Manual de SQL Server 2008 2012
2. Seleccionar todos los campos de la tabla Órdenes, ordenados por fecha de la orden,
Descendentemente.

select *
from dbo.Orders
order by OrderDate Desc

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 38 -
Manual de SQL Server 2008 2012
3. Seleccionar todos los campos de la tabla Detalle de la Orden, ordenada por
Cantidad Pedida, Ascendentemente.

select *
from [Order Details]
order by Quantity

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 39 -
Manual de SQL Server 2008 2012
4. Obtener todos los productos, cuyo nombre comiencen con la letra P y tienen un
precio unitario comprendido entre 10 y 120.

select *
from Products
where ProductName like 'P%' AND UnitPrice between 10 AND 120

5. Obtener todos los clientes de los Países de: USA, Francia y UK.

select *
from dbo.Customers
where Country in ('usa','francia','uk')

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 40 -
Manual de SQL Server 2008 2012
6. Obtener todos los productos descontinuados y sin stock, que pertenecen a las
categorías 1, 3, 4 y 7.

select *
from dbo.Products
where (CategoryID in (1,3,4,7)) AND (Discontinued='true'AND
UnitsInStock='0')

7. Obtener todas las órdenes hechas por el empleado con código: 2, 5 y 7 en el año
1996.

select *
from dbo.Orders
where EmployeeID in (2,5,7) AND YEAR(OrderDate)='1996'

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 41 -
Manual de SQL Server 2008 2012
8. Seleccionar todos los clientes que cuentan con FAX.

select *
from dbo.Customers
where Fax is not null

9. Seleccionar todos los clientes que no cuentan con FAX, del País de USA.

select *
from dbo.Customers
where Fax is null AND Country='usa'

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 42 -
Manual de SQL Server 2008 2012
10. Seleccionar todos los empleados que cuentan con un jefe.

select*
from dbo.Employees
where ReportsTo is not null

11. Seleccionar todos los campos del cliente, cuya compañía empiecen con la letra de A
hasta la D y pertenezcan al país de USA, ordenarlos por la dirección.

select *
from dbo.Customers
where CompanyName like '[a-d]%' and Country='usa'
order by Address

12. Seleccionar todos los campos del proveedor, cuya compañía no comience con las
letras de la B a la G, y pertenezcan al país de UK, ordenarlos por nombre de la
compañía.

select *
from dbo.Suppliers
where (CompanyName like 'a%' or CompanyName like '[f-z]%') and
Country='uk'
order by CompanyName

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 43 -
Manual de SQL Server 2008 2012

13. Seleccionar los productos vigentes cuyos precios unitarios están entre 35 y 250, sin
stock en almacén, pertenecientes a las categorías 1, 3, 4, 7 y 8, que son distribuidos
por los proveedores 2, 4, 6, 7 y 9.

select *
from Products
where Discontinued='false' AND UnitPrice between 35 AND 250 AND
UnitsInStock='0' AND CategoryID in (1,3,4,7,8) AND SupplierID in
(2,4,6,7,9)

14. Seleccionar todos los campos de los productos descontinuados, que pertenezcan a
los proveedores con códigos: 1, 3, 7, 8 y 9, que tengan stock en almacén, y al
mismo tiempo que sus precios unitarios estén entre 39 y 190, ordenados por código
de proveedor y precio unitario de manera ascendente.

select *
from Products
where Discontinued='true' AND SupplierID in (1,3,7,8,9) AND
UnitsInStock!='0' AND UnitPrice between 39 AND 190
order by SupplierID,UnitPrice

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 44 -
Manual de SQL Server 2008 2012
15. Seleccionar los 7 productos con precios más caros, que cuenten con Stock en
almacén.

select top 7 *
from dbo.Products
where UnitsInStock!=0
order by UnitPrice desc

16. Seleccionar los 9 productos, con menos stock en almacén, que pertenezcan a la
categoría 3, 5 y 8.

select top 9 *
from dbo.Products
where CategoryID in (3,5,8)
order by UnitsInStock

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 45 -
Manual de SQL Server 2008 2012
17. Seleccionar las órdenes de compra, realizadas por el empleado con código entre 2 y
el 5, además de los clientes con códigos que comienzan con las letras de la A hasta
la G, del 31 de Julio de cualquier año.

select *
from dbo.Orders
where EmployeeID between 2 AND 5 AND CustomerID like '[a-g]%' AND
DATEPART(MM,OrderDate)='07' AND DATEPART(dd,OrderDate)='31'

18. Seleccionar las órdenes de compra, realizadas por el empleado con código 3, de
cualquier año pero sólo de los últimos 5 meses (Agosto - Diciembre).
19.

select *
from Orders
where EmployeeID=3 and month(OrderDate)in (8,9,10,11,12)

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 46 -
Manual de SQL Server 2008 2012
20. Seleccionar los detalles de las órdenes de compra, que tengan un monto de
cantidad pedida entre 10 y 250.

select *
from [Order Details]
where Quantity between 10 AND 250

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 47 -
Manual de SQL Server 2008 2012

COMBINACIÓN DE TABLAS Y
AGRUPACIÓN DE DATOS
3.1. JOIN

Para realizar uniones en SQL se requieren mucho de los elementos que ya hemos
visto. SQL también proporciona varios mecanismos para reunir relaciones,
incluyendo reuniones condicionales y reuniones naturales, así como varias formas
de reunión externa. Estas operaciones adicionales se usan a menudo como
subconsultas dentro de la cláusula from.

 Selección de columnas específicas de varias tablas

 La palabra clave JOIN especifica qué tablas se van a combinar y cómo

 La palabra clave ON especifica la condición de combinación

 Consultas de dos o más tablas para producir un conjunto de resultados

 Use claves principales y externas como condiciones de combinación

 Para combinar tablas, utilice columnas comunes a las tablas especificadas

INNER JOIN: Devuelve solo los registros de la combinación de ambas tablas de


en los hay coincidencia de acuerdo a la expresión vinculante.

LEFT JOIN: Devuelve los registros de la combinación de ambas tablas en los


cuales hay coincidencia de acuerdo a la expresión vinculante e incluye además a
todos los registros de la primera tabla que no tengan “pareja” en la segunda.

RIGTH JOIN: Devuelve los registros de la combinación de ambas tablas en los


cuales hay coincidencia de acuerdo a la expresión vinculante e incluye además a
todos los registros de la segunda tabla que no tengan “pareja” en la primera.

UNION: Use el operador UNION para crear un conjunto de resultados único a


partir de varias consultas

 Cada consulta debe tener:

 Tipos de datos similares

 El mismo número de columnas

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 48 -
Manual de SQL Server 2008 2012
 El mismo orden de columnas en la lista de selección

Por ejemplo:

Queremos saber el total de órdenes realizadas por cada empleado escribimos la


siguiente sentencia:

select COUNT(*) as total, e.LastName


from dbo.Orders as o
inner join dbo.Employees as e on
o.EmployeeID=e.EmployeeID
group by LastName
Al ejecutar lo anterior tenemos:

3.2. GROUP BY
Genera valores de resumen para una sola columna, para esto se utiliza funciones
de agregado con la cláusula GROUP BY. Utilice la cláusula HAVING con la
cláusula GROUP BY para restringir los grupos de filas devueltas en el conjunto de
resultados.

El uso de la cláusula GROUP BY no garantiza que se vaya a usar ningún criterio


de ordenación. Si desea que los resultados se ordenen, debe incluir la cláusula
ORDER BY.

SINTAXIS

SELECT "nombre_columna 1",


SUM("nombre_columna 2")
FROM "nombre_tabla"
GROUP BY "nombre_columna 1"

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 49 -
Manual de SQL Server 2008 2012
3.3. HAVING

Esta sentencia se utiliza de similar manera que la sentencia WHERE para filtrar
instrucciones en SQL que incluyen agrupaciones de registros se empleará esta
cláusula HAVING.
Su sintaxis es:
SINTAXIS

SELECT "nombre_columna 1",


SUM("nombre_columna 2")
FROM "nombre_tabla"
GROUP BY "nombre_columna 1"
HAVING (condición de función aritmética)

Utilice la cláusula HAVING en columnas o expresiones para establecer


condiciones en los grupos incluidos en un conjunto de resultados. La cláusula
HAVING establece condiciones en la cláusula GROUP BY de una forma muy
similar a como interactúa la cláusula WHERE con la instrucción SELECT.

 Cuando utilice la cláusula HAVING, considere los hechos e instrucciones


siguientes:
 Utilice la cláusula HAVING sólo con la cláusula GROUP BY para restringir
los agrupamientos. El uso de la cláusula HAVING sin la cláusula GROUP
BY no tiene sentido.
 En una cláusula HAVING puede haber hasta 128 condiciones. Cuando
utilice varias condiciones, tiene que combinarlas con operadores lógicos
(AND, OR o NOT).
 Puede hacer referencia a cualquiera de las columnas que aparezcan en la
lista de selección.
 No utilice la palabra clave ALL con la cláusula HAVING, porque la cláusula
HAVING pasa por alto la palabra clave ALL y sólo devuelve los grupos que
cumplen la cláusula HAVING.

Por ejemplo:
Mostrar la cantidad de órdenes hechas por cada empleado pero que sean mayores
que 100.
Se escribirá la siguiente instrucción:
Select COUNT(*) as total,e.FirstName,e.LastName
from dbo.Orders as o
inner join dbo.Employees as e on o.EmployeeID=e.EmployeeID
groupby e.FirstName,e.LastName
having COUNT(*)>100
orderby FirstName,LastName

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 50 -
Manual de SQL Server 2008 2012

Ejercicio 1
selectCOUNT(*)astotal,e.EmployeeID,e.LastName
fromdbo.Ordersaso
innerjoindbo.Employeesaseono.EmployeeID=e.EmployeeID
groupbye.EmployeeID,e.LastName

Ejercicio 2
selectCOUNT(*)astotal,e.FirstName,e.LastName
fromdbo.Ordersaso
innerjoindbo.Employeesaseono.EmployeeID=e.EmployeeID
groupbye.FirstName,e.LastName
havingCOUNT(*)>100
orderbyFirstName,LastName

Ejercicio 3
selectsum(od.Quantity)astotal,c.CompanyName
fromOrdersaso
innerjoin[Order Details]asodono.OrderID=od.OrderID
innerjoinCustomersasconc.CustomerID=o.CustomerID
groupbyc.CompanyName
orderbyc.CompanyName

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 51 -
Manual de SQL Server 2008 2012

Ejercicio 4
selectsum(Quantity*UnitPrice*2.82)astotal,o.OrderID
from[Order Details]asodinnerjoinOrdersasoono.OrderID=od.OrderID
whereyear(o.OrderDate)=1996 andMONTH(o.OrderDate)=12
groupbyo.OrderID

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 52 -
Manual de SQL Server 2008 2012
Ejercicio 5
selectcount(*)astotal,s.CompanyName
fromdbo.Productsaspinnerjoindbo.Suppliersass
onp.SupplierID=s.SupplierID
whereUnitsInStock!='0'andDiscontinued='0'
groupbys.CompanyName

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 53 -
Manual de SQL Server 2008 2012

EJERCICIOS
21. Mostrar el código de categoría, nombre de categoría, código del producto, nombre del
producto y precio.

select
dbo.Categories.CategoryID,dbo.Categories.CategoryName,dbo.Products.Pro
ductID,dbo.Products.ProductName,dbo.Products.UnitPrice
from dbo.Categories
inner join dbo.Products on
dbo.Categories.CategoryID=dbo.Products.CategoryID

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 54 -
Manual de SQL Server 2008 2012
22. Mostrar el número de la orden fecha de la orden, código del producto, cantidad del precio y
flete de la orden.

select o.OrderID,o.OrderDate,od. ProductID,od.Quantity,o.Freight


from [Order Details]as od
inner join Orders as o on od.OrderID=o.OrderID

23. Mostrar: código, nombre, ciudad y país del proveedor. Código, nombre, precio, stock del
producto.

select s.SupplierID,s.CompanyName,s.City,s.Country,p.ProductID,
p.ProductName,p.UnitPrice,p.UnitsInStock
from Suppliers as s
inner join Products as p on s.SupplierID=p.SupplierID

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 55 -
Manual de SQL Server 2008 2012

24. Código y nombre de la categoría, código, nombre, precio y stock de los productos, código,
nombre de los proveedores.

select c.CategoryID,c.CategoryName,p.ProductID,p.ProductName,
p.UnitPrice,p.UnitsInStock,s.SupplierID,s.CompanyName
from dbo.Categories as c
inner join dbo.Products as p on c.CategoryID=p.CategoryID
inner join dbo.Suppliers as s on p.SupplierID=s.SupplierID

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 56 -
Manual de SQL Server 2008 2012

25. Mostrar número de la orden, fecha, nombre del producto, nombre de la categoría, nombre
del producto.

select od.OrderID,o.OrderDate,p.ProductName,c.CategoryName,s.CompanyName
from Orders as o
inner join [Order Details] as od on od.OrderID=o.OrderID
inner join dbo.Products as p on od.ProductID=p.ProductID
inner join dbo.Categories as c on c.CategoryID=p.CategoryID
inner join dbo.Suppliers as s on s.SupplierID=p.SupplierID

26. Mostrar número de la orden, fecha, nombre y dirección del cliente, nombre y apellido del
empleado, nombre del producto comprado y nombre del proveedor.

select
od.OrderID,o.OrderDate,c.CompanyName,c.Address,e.LastName,e.LastName,
p.ProductName,s.CompanyName
from [Order Details]as od
inner join Orders as o on od.OrderID=o.OrderID
inner join Products as p on od.ProductID=p.ProductID
inner join Customers as c on c.CustomerID=o.CustomerID
inner join Employees as e on e.EmployeeID=o.EmployeeID
inner join Suppliers as s on s.SupplierID=p.SupplierID

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 57 -
Manual de SQL Server 2008 2012

27. Modificar el ejercicio 1: sólo los productos de las categorías 2, 4, 5 y 7.

select c.CategoryID,c.CategoryName,p.ProductID,p.ProductName,
p.UnitPrice
from Categories as c
inner join dbo.Products as p on c.CategoryID=p.CategoryID
where c.CategoryID in (2,4,5,7)

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 58 -
Manual de SQL Server 2008 2012

28. Modificar el ejercicio 2: sólo las órdenes del mes de enero de 1997.

select o.OrderID,o.OrderDate,od. ProductID,od.Quantity,o.Freight


from [Order Details]as od
inner join Orders as o on od.OrderID=o.OrderID
where month(o.OrderDate)='01' and year(o.OrderDate)='1997'

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 59 -
Manual de SQL Server 2008 2012
29. Modificar el ejercicio 3: sólo los productos con stock 0.

select s.SupplierID,s.CompanyName,s.City,s.Country,p.ProductID,
p.ProductName,p.UnitPrice,p.UnitsInStock
from Suppliers as s
inner join Products as p on s.SupplierID=p.SupplierID
where p.UnitsInStock='0'

30. Modificar el ejercicio 4: sólo con precios entre 50 y 100.

select c.CategoryID,c.CategoryName,p.ProductID,p.ProductName,
p.UnitPrice,p.UnitsInStock,s.SupplierID,s.CompanyName
from dbo.Categories as c
inner join dbo.Products as p on c.CategoryID=p.CategoryID
inner join dbo.Suppliers as s on p.SupplierID=s.SupplierID
where p.UnitPrice between 50 AND 100

31. Modificar el ejercicio 5: sólo del primer trimestre del año 1996.

select od.OrderID,o.OrderDate,p.ProductName,c.CategoryName,s.CompanyName
from Orders as o
inner join [Order Details] as od on od.OrderID=o.OrderID
inner join dbo.Products as p on od.ProductID=p.ProductID
inner join dbo.Categories as c on c.CategoryID=p.CategoryID
inner join dbo.Suppliers as s on s.SupplierID=p.SupplierID
where (month(o.OrderDate)='1' or month(o.OrderDate)='1'or
month(o.OrderDate)='2'or month(o.OrderDate)='3') AND
YEAR(o.OrderDate)='1996'

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 60 -
Manual de SQL Server 2008 2012

BASE DE DATOS II
EJERCICIOS inner join, group by, having y where SQL
TRANSACT (Microsoft SQL SERVER 2008)
Usando la Base de Datos Northwind, realizar las siguientes consultas:
32. Visualizar el máximo y mínimo precio de los productos por categoría, mostrar el
nombre de la categoría.

select MIN(p.UnitPrice) as prec_min,MAX(p.UnitPrice) as


prec_max,c.CategoryName
from Products as p
inner join Categories as c on p.CategoryID=c.CategoryID
group by c.CategoryName

33. Visualizar el máximo y mínimo precio de los productos por proveedor, mostrar el
nombre de la compañía proveedora.

select MIN(p.UnitPrice) as prec_min,MAX(p.UnitPrice) as


prec_max,s.CompanyName
from Products as p
inner join Suppliers as s on p.SupplierID=s.SupplierID
group by s.CompanyName

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 61 -
Manual de SQL Server 2008 2012

34. Seleccionar las categorías que tengan más de 5 productos. Mostrar el nombre de la
categoría y número de productos.

select c.CategoryName,count(p.QuantityPerUnit) as total


from Categories as c
inner join dbo.Products as p on c.CategoryID=p.CategoryID
group by CategoryName
having COUNT(p.QuantityPerUnit)>5

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 62 -
Manual de SQL Server 2008 2012
35. Calcular cuántos clientes existen en cada País.

select Country,count(CompanyName) as total_clientes


from Customers
group by Country

36. Calcular cuántos clientes existen en cada Ciudad.

select City,count(CompanyName) as total_clientes


from Customers
group by City

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 63 -
Manual de SQL Server 2008 2012

37. Calcular cuántos proveedores existen en cada Ciudad y País.

select Country,count(SupplierID) as
total_proveedores,City,count(SupplierID) as total_proveedores
from dbo.Suppliers
group by Country,city

38. Calcular el stock total de los productos por cada categoría. Mostrar el nombre de la
categoría y el stock por categoría.

select c.CategoryName,sum(p.UnitsInStock) as stock


from Categories as c
inner join Products as p
on c.CategoryID=p.CategoryID
group by c.CategoryName

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 64 -
Manual de SQL Server 2008 2012
39. Calcular el stock total de los productos por categoría. Mostrar el nombre el nombre
de la categoría y el stock por categoría. Solamente las categorías 2,5, y 8.

select c.CategoryName,sum(p.UnitsInStock) as stock


from Categories as c
inner join Products as p
on c.CategoryID=p.CategoryID
where c.CategoryID in (2,5,8)
group by c.CategoryName

40. Obtener el Nombre del Cliente, Nombre del Proveedor, Nombre del Empleado y el
nombre de los productos que están en la orden 10250.

select c.CompanyName,
s.CompanyName,e.LastName,p.ProductName,o.OrderID
from Customers as c
inner join orders as o on c.CustomerID=o.CustomerID
inner join Employees as e on e.EmployeeID=o.EmployeeID
inner join [Order Details] as od on od.OrderID=o.OrderID
inner join Products as p on p.ProductID=od.ProductID
inner join Suppliers as s on s.SupplierID=p.supplierID
where o.OrderID='10250'

41. Mostrar el número de Órdenes realizadas de Cada uno de los Clientes por año.

select distinct c.CompanyName,COUNT(*)as total_ordenes,year(o.OrderDate)


as año
from Orders as o
inner join Customers as c on o.CustomerID=c.CustomerID
group by c.CompanyName, year(o.OrderDate)

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 65 -
Manual de SQL Server 2008 2012

42. Mostrar el número de Órdenes realizadas de Cada uno de los Empleados en cada
año.

select distinct e.FirstName,COUNT(*)as


total_ordenes,year(o.OrderDate) as año
from Orders as o
inner join Employees as e on o.EmployeeID=e.EmployeeID
group by e.FirstName, year(o.OrderDate)

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 66 -
Manual de SQL Server 2008 2012

43. Mostrar el número de Órdenes realizadas de Cada uno de los Clientes por cada mes
y año.

select distinct c.CompanyName,COUNT(*)as


total_ordenes,year(o.OrderDate) as año,MONTH(o.OrderDate) as mes
from Orders as o
inner join Customers as c
on o.CustomerID=c.CustomerID
group by c.CompanyName, year(o.OrderDate), month(o.OrderDate)

44. Contar el número de Órdenes que se han realizado por años y meses.

select distinct YEAR(o.OrderDate) as año,MONTH(o.OrderDate) as mes,


COUNT(*) as total_ordenes
from dbo.Orders as o
group by YEAR(o.OrderDate), MONTH(o.OrderDate)

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 67 -
Manual de SQL Server 2008 2012

45. Seleccionar el nombre de la compañía del cliente, el código de la orden de compra,


la fecha de la orden de compra, código del producto, cantidad pedida del producto,
nombre del producto, el nombre de la compañía Proveedora y la ciudad del
proveedor.

select c.CompanyName, od.OrderID, o.OrderDate, p.ProductID,


od.Quantity, p.ProductName, s.CompanyName, s.City
from [Order Details] as od
inner join dbo.Orders as o on od.OrderID=o.OrderID
inner join dbo.Products as p on p.ProductID=od.ProductID
inner join dbo.Customers as c on c.CustomerID=o.CustomerID
inner join dbo.Suppliers as s on s.SupplierID=p.SupplierID

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 68 -
Manual de SQL Server 2008 2012
46. Seleccionar el nombre de la compañía del cliente, nombre del contacto, el código de
la orden de compra, la fecha de la orden de compra, código del producto, cantidad
pedida del producto, nombre del producto y el nombre de la compañía Proveedora,
usar join. Solamente las compañías proveedoras que comienzan con la letra de la A
hasta la letra G, además la cantidad pedida del producto debe estar entre 18 y 190.

select
c.CompanyName,c.ContactName,od.OrderID,o.OrderDate,p.ProductID,od.Q
uantity,p.ProductName,s.CompanyName
from [Order Details] as od
inner join dbo.Orders as o on od.OrderID=o.OrderID
inner join dbo.Products as p on p.ProductID=od.ProductID
inner join dbo.Customers as c on c.CustomerID=o.CustomerID
inner join dbo.Suppliers as s on s.SupplierID=p.SupplierID
where s.CompanyName like '[a-g]%' and Quantity between 18 and 190

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 69 -
Manual de SQL Server 2008 2012
47. Seleccionar cuantos proveedores tengo en cada país, considerando solo a los
nombres de los proveedores que comiencen con la letra E hasta la letra P, además
de mostrar sólo los países donde tenga más de 2 proveedores.

select Country,COUNT(*) as total_proveedores


from dbo.Suppliers
where CompanyName like '[e-p]%'
group by Country
having COUNT(*)>2

48. Obtener el número de productos, por categoría. Mostrando el nombre de la


categoría, el nombre del producto, y el total de productos por categoría, solamente
de las categorías 3, 5 y 8. Ordenar por el nombre de la categoría.

select p.CategoryID,COUNT(*) as
total_productos,c.CategoryName,p.ProductName
from dbo.Products as p inner join dbo.Categories as c on
p.CategoryID=c.CategoryID
group by p.CategoryID,c.CategoryName,p.ProductName
having p.CategoryID in(3,5,8)
order by c.CategoryName

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 70 -
Manual de SQL Server 2008 2012
49. Mostrar el número de la orden, la fecha de la orden y el total en soles de cada
orden.

select OrderID, OrderDate, Freight=Freight*2.87


from dbo.Orders

50. Mostrar el nombre de Producto y en cuántas órdenes de compra se encuentra.1

select distinct p.ProductName, COUNT(od.OrderID) as total_OdC


from Products as p inner join [Order Details] as od on
p.ProductID=od.ProductID
group by p.ProductName

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 71 -
Manual de SQL Server 2008 2012

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 72 -
Manual de SQL Server 2008 2012

MANIPULACIÓN DE TABLAS

4.1. INSERT INTO


En los programas de mantenimiento de base de datos es frecuente requerir
instrucciones que hagan posible la inserción de registros en las tablas. Estas
instrucciones hacen uso de la cláusula INSERT del lenguaje SQL. En su forma
más elemental, la instrucción tendrá la siguiente sintaxis.

SINTAXIS

INSERT INTO "nombre_tabla" ("colonne 1", "colonne 2", ...)


valorS ("valor 1", "valor 2", ...)

 Puede insertar datos mediante una transacción si especifica un conjunto de


valores o inserta los resultados de una instrucción SELECT. Puede crear
una tabla e insertar datos al mismo tiempo. No tiene que insertar valores en
todos los campos de datos de una fila.
 La instrucción INSERT con la cláusula VALUES permite agregar filas a una
tabla. Al insertar filas, tenga en cuenta los siguientes hechos e
instrucciones:
 Debe atenerse a las restricciones de destino o la transacción INSERT
fallará.
 Utilice listaColumnas para especificar las columnas en las que se va a
almacenar cada valor especificado. listaColumnas debe especificarse entre
paréntesis y delimitarse con comas. Si especifica valores para todas las
columnas, listaColumnas es opcional.
 Para especificar los valores que desea insertar, utilice la cláusula VALUES.
Esta cláusula se requiere para cada columna de la tabla o de
listaColumnas. El orden y el tipo de los nuevos datos debe corresponder al
orden y al tipo de las columnas de la tabla. Muchos tipos de datos tienen un
formato de entrada asociado. Por ejemplo, los datos de carácter y las
fechas deben encerrarse entre comillas simples.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 73 -
Manual de SQL Server 2008 2012
o Identidad

Insert into articulos(nombre,precio,stock)


values('LaptopHP',1200,10)

insertinto[alumnitos]
values('A001','karen','estrada')
select*
fromalumnitos

Insertinto [alumnitos]
Values ('A002','juan','mendez')
Select *
From alumnitos

insertinto[alumnitos]
values('A003','ana','diaz')
select*
fromalumnitos

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 74 -
Manual de SQL Server 2008 2012
4.2. UPDATE
El lenguaje SQL server permite escribir instrucciones que hagan posible que esas
actualizaciones se realicen rápidamente, para ello debe emplear la sentencia
UPDATE. En su forma más elemental Update tendrá la siguiente sintaxis.
SINTAXIS

UPDATE "nombre_tabla"
SET "colonne 1" = [nuevo valor]
WHERE {condition}

La instrucción UPDATE permite cambiar filas individuales, grupos de filas o todas


las filas de una tabla. Al actualizar filas, tenga en cuenta los hechos e instrucciones
siguientes:
 Especifique las filas que desea actualizar con la cláusula WHERE.
 Especifique los nuevos valores con la cláusula SET.
 Compruebe que los valores de entrada tienen los mismos tipos de datos
que los definidos para las columnas.
 SQL Server no hará actualizaciones que infrinjan alguna restricción de
integridad. En ese caso, no se producirán los cambios y la instrucción se
deshará.
 Sólo es posible cambiar los datos de una tabla cada vez.
 Puede establecer una expresión en una o varias columnas o variables. Por
ejemplo, una expresión puede ser un cálculo (como price * 2) o la suma de
dos columnas.

Ejemplo
En el ejemplo siguiente se agrega el 10 por ciento a los precios actuales de todos
los productos de Northwind Traders.
USE northwind
UPDATE products
SET unitprice = (unitprice * 1.1)
Ejemplo 1:
updateProducts
setUnitPrice=UnitPrice*0.5
whereCategoryID='1'
selectcount(*),MIN(UnitPrice)asmini,max(UnitPrice)asmaxi
fromProducts
whereCategoryID=1

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 75 -
Manual de SQL Server 2008 2012
Ejemplo 2:
updateSuppliers
setcountry='perusalem'
wherecountry='uk'
select*
fromSuppliers

Ejemplo 3:
updatedbo.Categories
setCategoryName='juguetes'
whereCategoryID=5
select*
fromCategories

Ejemplo 4:
updateSuppliers
setFax='0'
whereFaxisnull
select*
fromSuppliers

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 76 -
Manual de SQL Server 2008 2012

Ejemplo 5:
updateEmployees
setFirstName='Karen',LastName='Estrada'
whereEmployeeID=6
select*
fromEmployees

Ejemplo 6:
updateCustomers
setCustomerID=('UNCFNI')
whereCustomerID=('ALFKI')
select*
fromCustomers

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 77 -
Manual de SQL Server 2008 2012

4.3. DELETE FROM


Esta sentencia permite eliminar registros de las tablas. La sintaxis más simple de
esta sentencia es la siguiente:

SINTAXIS

DELETE FROM "nombre_tabla"


WHERE {condición}

La instrucción DELETE quita una o varias filas de una tabla o una vista mediante
una transacción. Puede especificar las filas que elimina SQL Server si filtra la tabla
de destino o mediante una cláusula JOIN o una subconsulta.
La instrucción DELETE quita filas de las tablas. La instrucción DELETE permite
quitar una o varias filas de una tabla.
Al utilizar la instrucción DELETE, tenga en cuenta los hechos siguientes:
 SQL Server eliminará todas las filas de la tabla si no incluye una cláusula
WHERE en la instrucción DELETE.
 Cada fila eliminada se almacena en el registro de transacciones.

Ejemplo 1:
deletefromProducts
whereDiscontinued=1

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 78 -
Manual de SQL Server 2008 2012

Ejemplo 2:
delete
fromOrders
whereOrderID=10255
select*
fromOrders
whereOrderID=10255

Ejemplo 3:
delete
from[Order Details]
whereProductIDin(selectProductID
fromProducts
whereDiscontinued=1)

4.4. SUBCONSULTAS
Es una consulta dentro de otra más grande.
o Consulta : Seleccionar los productos cuyos precios sean mayores al
promedio de todos los productos
select*
fromProducts
whereUnitPrice>(selectAVG(UnitPrice)fromProducts)

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 79 -
Manual de SQL Server 2008 2012

o
delete
from[Order Details]
whereProductIDin(selectProductID
fromProducts
whereDiscontinued=1)

4.5. PROCEDIMIENTOS ALMACENADOS (STORE PROCEDURE)


Un procedimiento almacenado es una colección con nombre de instrucciones de
Transact-SQL que se almacena en el servidor. Los procedimientos almacenados
son un método para encapsular tareas repetitivas. Admiten variables declaradas
por el usuario, ejecución condicional y otras características de programación muy
eficaces.
SINTAXIS

Create proc Nombre_Procedimiento


--Declaracion de variables
As
--Cuerpo de la instrucción

Para alterar o modificar un procedimiento utilizamos ALTER en reemplazo de


CREATE

EXEC Ejecuta una función definida por el usuario, un procedimiento de sistema, un


procedimiento almacenado definido por el usuario o un procedimiento almacenado
extendido�Controla la ejecución de una cadena de caracteres dentro de un lote de
Transact-SQL

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 80 -
Manual de SQL Server 2008 2012

Create proc SPQ_PRODUCTS


@CATE int
as
select *
from Products
where CategoryID=@CATE

exec SPQ_PRODUCTS 2

Ejemplo:
ALTER proc SPQ_PRODUCTS
as
select *
from Products
where CategoryID=8

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 81 -
Manual de SQL Server 2008 2012
Ejemplo:
Create procedure hola
@cod int
as
select *
from Employees
where EmployeeID=@cod

Exec hola 8

Ejemplo:
Alter procedure hola
@cod int
as
select *
from Customers
where CustomerID=@cod

Create proc todos_produc


as
select ProductID,ProductName,UnitPrice,UnitsInStock
from dbo.Products

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 82 -
Manual de SQL Server 2008 2012

Create proc nuevo_escrito


@d char(8),
@n varchar (20),
@a varchar (25),
@e varchar (50),
@s char (1)
as
insert INto inscripciones
values (@d,@n,@a,@e,@s)
exec nuevo_escrito
'26458595','lili','calua','lili@hormail.com','f'

Ejemplo:
Create proc precios
@li money,
@ls money
as
select *
from Products
where UnitPrice between @li and @ls

Exec precios 15,20

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 83 -
Manual de SQL Server 2008 2012

Las variables son elementos del lenguaje con valores asignados. En Transact-
SQL se pueden utilizar variables locales.
Una variable local es una variable definida por el usuario en una instrucción
DECLARE; se le asigna un valor inicial en una instrucción SET o SELECT y,
después, se utiliza en la instrucción, programa por lotes o procedimiento en el que
se declaró. Una variable local se identifica mediante un símbolo arroba (@) que
precede a su nombre mientras que una variable global incluye dos símbolos arroba
delante de su nombre.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 84 -
Manual de SQL Server 2008 2012

EJERCICIOS
Ejemplo 1:
createprocempleado_unidades
@anioint
as

selectSUM(od.Quantity)astotal,e.LastName,e.FirstName,YEAR(o.OrderDate)asa
ño
fromdbo.EmployeesaseinnerjoinOrdersasoone.EmployeeID=o.EmployeeID
innerjoin[Order Details]asodonod.OrderID=o.OrderID
whereYEAR(o.OrderDate)=@anio
groupbye.LastName,e.FirstName,YEAR(o.OrderDate)

empleado_unidades 1996

2. productos mas vendidos por año

alterprocmas_vendidos
@tint,
@anioint
as
selecttop
(@t)p.ProductName,sum(od.Quantity*od.UnitPrice*2.81)asmonto_total
fromProductsaspinnerjoin[Order
Details]asodonp.ProductID=od.ProductIDinnerjoin
Ordersasoono.OrderID=od.OrderID
whereYEAR(o.OrderDate)=@anio
groupbyp.ProductName
orderbysum(od.Quantity*od.UnitPrice)desc

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 85 -
Manual de SQL Server 2008 2012

mas_vendidos 3,1997

3. productos no vendidos por año

alterprocno_vendidos
@anioint
as
selectp.ProductID,p.ProductName,YEAR(o.OrderDate)asanio
fromProductsaspinnerjoin[Order
Details]asodonp.ProductID=od.ProductIDinnerjoin
Ordersasoono.OrderID=od.OrderID
wherep.ProductIDnotin(selectProductIDfrom[Order
Details])andyear(OrderDate)=@anio

no_vendidos 1996

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 86 -
Manual de SQL Server 2008 2012
5. Mostrar los productos que tengan la palabra queso dentro de su nombre

alterprocproductos
@palnvarchar(40)
as
selectp.ProductName,e.FirstName
fromProductsaspinnerjoin[Order Details]asodonp.ProductID=od.ProductID
innerjoinOrdersasoono.OrderID=od.OrderIDinnerjoinEmployeesaseone.Employee
ID=o.EmployeeID
wherep.ProductNamelike@pal

productos'%queso%'

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 87 -
Manual de SQL Server 2008 2012
6. buscar por frase la cantidad total por empleado

alterprocproductos
@palnvarchar(40)
as
selectp.ProductName,e.FirstName,e.LastName,SUM(od.Quantity)astotal_vendid
os
fromProductsaspinnerjoin[Order Details]asodonp.ProductID=od.ProductID
innerjoinOrdersasoono.OrderID=od.OrderIDinnerjoinEmployeesaseone.Employee
ID=o.EmployeeID
wherep.ProductNamelike@pal
groupbyp.ProductName,e.FirstName,e.LastName
orderbySUM(od.Quantity)desc

productos'%queso%'

7. dias trnascurridos

createprocdias_trans
@numint
as
selectcount(OrderID)ascant_ords,datediff(day,ShippedDate,RequiredDate)asd
ias_trans
fromOrders
wheredatediff(day,ShippedDate,RequiredDate)<@num
groupbydatediff(day,ShippedDate,RequiredDate)

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 88 -
Manual de SQL Server 2008 2012

dias_trans 10

8. En un año determinado

alterprocdias_trans
@numint,
@anioint
as
selectcount(OrderID)ascant_ords,datediff(day,ShippedDate,RequiredDate)asd
ias_trans
fromOrders
wheredatediff(day,ShippedDate,RequiredDate)<@numandYEAR(RequiredDate)=@an
io
groupbydatediff(day,ShippedDate,RequiredDate)

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 89 -
Manual de SQL Server 2008 2012
dias_trans 10,1997

9. para el codigo de un alumno

alterproc codigo
@pat varchar(30),
@mat varchar(30),
@nombre varchar(30)
as
declare @nr as int,@cod as char(4)
select @nr=max(substring(codigo,2,3))
from alumnitos
if @nrisnullset@nr=0;
set @nr=@nr+1;
if @nr<=9 set@cod='A00'+LTRIM(STR(@nr))
else if @nr<=99
set @cod='A0'+STR(@nr)
else if @nr<=999
set @cod='A'+STR(@nr)
;
Insert into alumnitos(codigo,paterno,materno,nombres)
values (@cod,@pat,@mat,@nombre)

exec 'estrada','aguilar','karen johana'

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 90 -
Manual de SQL Server 2008 2012

Más ejercicios
alter proc insert_cliente
@nom varchar (20),
@ape varchar (30),
@dir varchar (30),
@email varchar (35)
as
declare @cod char(8)
declare @nr int
set @cod=left(@nom,2)+LEFT(@ape,2)
select @nr=COUNT(*)+1
from dbo.clientes
if @nr<=9
set @cod=Rtrim(@cod)+'0'+LTRIM(STR(@nr))
else
set @cod=rtrim(@cod)+LTRIM(STR(@nr))
insert into dbo.clientes
values (@cod,@nom,@ape,@dir,@email)

insert_cliente 'juan','perez','dos de mayo','juan@hotmail.com'


insert_cliente 'ana','diaz','dos de mayo','ana@hotmail.com'
insert_cliente 'karen','johana','Jose carlos mariategui n°
314','karen_j.e.a@hotmail.com'
-->
alter proc insert_cliente
@nom varchar (20),
@ape varchar (30),
@dir varchar (30),
@email varchar (35)
as
declare @cod char(7)
declare @nr int
set @cod=left(@nom,2)+LEFT(@ape,2)
select @nr=COUNT(*)+1
from dbo.clientes
if @nr<=9
set @cod=Rtrim(@cod)+'00'+LTRIM(STR(@nr))
if @nr<=99
set @cod=Rtrim(@cod)+'0'+LTRIM(STR(@nr))
else
set @cod=rtrim(@cod)+LTRIM(STR(@nr))
insert into dbo.clientes
values (@cod,@nom,@ape,@dir,@email)

insert_cliente 'juan','perez','dos de mayo','juan@hotmail.com'


insert_cliente 'ana','diaz','dos de mayo','ana@hotmail.com'
insert_cliente 'karen','johana','Jose carlos mariategui n°
314','karen_j.e.a@hotmail.com'

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 91 -
Manual de SQL Server 2008 2012

Para insertar Clientes en la tabla clientes


alter proc insert_cliente
@nom varchar (20),
@ape varchar (30),
@dir varchar (30),
@email varchar (35)
as
declare @cod char(7)
declare @nr int
set @cod=left(@nom,2)+LEFT(@ape,2)
select @nr=COUNT(*)+1
from dbo.clientes
where SUBSTRING(codigo,1,4)=@cod
if @nr<=9
set @cod=Rtrim(@cod)+'00'+LTRIM(STR(@nr))
if @nr<=99
set @cod=Rtrim(@cod)+'0'+LTRIM(STR(@nr))
else
set @cod=rtrim(@cod)+LTRIM(STR(@nr))
insert into dbo.clientes
values (@cod,@nom,@ape,@dir,@email)

insert_cliente 'juan','perez','dos de mayo','juan@hotmail.com'


insert_cliente 'ana','diaz','dos de mayo','ana@hotmail.com'

select *
from dbo.clientes
verdadero
alter proc insert_cliente
@nom varchar (20),
@ape varchar (30),
@dir varchar (30),
@email varchar (35)
as
declare @cod char(7)
declare @nr int
set @cod=left(@nom,2)+LEFT(@ape,2)
select @nr=COUNT(*)+1
from dbo.clientes
where SUBSTRING(codigo,1,4)=@cod
if @nr<=9
set @cod=Rtrim(@cod)+'00'+LTRIM(STR(@nr))
if @nr<=99
set @cod=Rtrim(@cod)+'0'+LTRIM(STR(@nr))
else
set @cod=rtrim(@cod)+LTRIM(STR(@nr))
insert into dbo.clientes

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 92 -
Manual de SQL Server 2008 2012
values (@cod,@nom,@ape,@dir,@email)

insert_cliente 'juan','perez','dos de mayo','juan@hotmail.com'


insert_cliente 'ana','diaz','dos de mayo','ana@hotmail.com'

select *
from dbo.clientes

Insertar participantes
create proc insertpat
@nom varchar(30),
@ape varchar(30),
@sexo char (1)
as
declare @cod char (7)
declare @nr int

select @nr=COUNT(*)
from dbo.participantes
where sexo=@sexo
if @nr<9
set @cod=left(@nom,2)+LEFT(@ape,2)+'00'+LTRIM(STR(@nr+1))
else if @nr<99
set @cod=left(@nom,2)+LEFT(@ape,2)+'0'+LTRIM(STR(@nr+1))
else
set @cod=left(@nom,2)+LEFT(@ape,2)+'0'+LTRIM(STR(@nr+1))
insert into dbo.participantes
values (@cod,@nom,@ape,@sexo)

insertpat 'luis','ruiz','m'

Insertar alumnos
alter proc ins_alumnos
@nom varchar(30),
@ape varchar(30),
@fenac datetime
as
declare @cod char (9)
declare @nr int
set @cod=left(@nom,1)+LEFT(@ape,1)+Ltrim(str(YEAR(@fenac)))
select @nr=COUNT(*)+1
from dbo.alumnos
where substring(@cod,1,9)=@cod
if @nr<=9
set @cod=Rtrim(@cod)+'00'+LTRIM(STR(@nr))
if @nr<=99
set @cod=Rtrim(@cod)+'0'+LTRIM(STR(@nr))

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 93 -
Manual de SQL Server 2008 2012
else
set @cod=rtrim(@cod)+LTRIM(STR(@nr))
insert into dbo.alumnos
values (@cod,@nom,@ape,@fenac)

ins_alumnos 'juan','perez','03/04/1991'

Insertar participantes
create proc insertpat
@nom varchar(30),
@ape varchar(30),
@sexo char (1)
as
declare @cod char (7)
declare @nr int

select @nr=COUNT(*)
from dbo.participantes
where sexo=@sexo
if @nr<9
set @cod=left(@nom,2)+LEFT(@ape,2)+'00'+LTRIM(STR(@nr+1))
else if @nr<99
set @cod=left(@nom,2)+LEFT(@ape,2)+'0'+LTRIM(STR(@nr+1))
else
set @cod=left(@nom,2)+LEFT(@ape,2)+'0'+LTRIM(STR(@nr+1))
insert into dbo.participantes
values (@cod,@nom,@ape,@sexo)

insertpat 'luis','ruiz','m'

Procedimiento para aumentar el precio a los productos

alter proc prod


@cat int,
@por float
as

update Products
set UnitPrice=UnitPrice+UnitPrice*@por/100
where CategoryID=@cat and Discontinued=0

select *
from Products
where Discontinued=1
order by UnitPrice

prod 1,0.5

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 94 -
Manual de SQL Server 2008 2012
0004 para insertar Alumnos

alter proc insertar_alumnos


@n varchar (30),
@a varchar (30)
as
declare @nr int
declare @c char(3)
select @nr=count(*)+1
from alumn
if @nr<=9
set @c='p0'+LTRIM(STR(@nr))
else
set @c='p'+LTRIM(STR(@nr))
insert into alumn
values(@c,@n,@a)

exec insertar_alumnos 'carlos','huaman'

select *
from alumn

Pero con el siguiente ya no sale error:

alter proc insertar_alumnos


@n varchar (30),
@a varchar (30)
as
declare @nr int
declare @c char(3)
select @nr=max(right(cod,2))+1
from alumn
if @nr<=9
set @c='p0'+LTRIM(STR(@nr))
else
set @c='p'+LTRIM(STR(@nr))
insert into alumn
values(@c,@n,@a)

exec insertar_alumnos 'carlos','huaman'

select *
from alumn

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 95 -
Manual de SQL Server 2008 2012

OTRAS SENTENCIAS

5.1. SUBSTRING FUNCION

La función de subcadena en SQL se utiliza para tomar una parte de los datos
almacenados. Esta función tiene diferentes nombres según las diferentes bases de
datos:

 MySQL: SUBSTR(), SUBSTRING()


 Oracle: SUBSTR()
 SQL Server: SUBSTRING()
Los usos más frecuentes son los siguientes (utilizaremos SUBSTR() aquí):

SUBSTR(str,pos): Selecciona todos los caracteres de <str> comenzando con


posición <pos>. Note que esta sintaxis no es compatible en SQL Server.

SUBSTR(str,pos,len): Comienza con el carácter <pos> en la cadena <str> y


selecciona los siguientes caracteres <len>.

5.2. TRIM FUNCION

La función TRIM en SQL se utiliza para eliminar un prefijo o sufijo determinado de


una cadena. El patrón más común a eliminarse son los espacios en blanco. Esta
función tiene diferentes nombres según las diferentes bases de datos:

 MySQL: TRIM(), RTRIM(), LTRIM()


 Oracle: RTRIM(), LTRIM()
 SQL Server: RTRIM(), LTRIM()

La sintaxis para estas funciones de reducción es:

TRIM([[LOCATION] [remstr] FROM ] str): [LOCATION] puede ser LÍDER,


REMANENTE, o AMBAS. Esta función se deshace del patrón [remstr] tanto para el
comienzo de la cadena como para el final, o para ambos. Si no se especifica
ningún [remstr], los espacios en blanco se eliminarán.

LTRIM(str): Elimina todos los espacios en blanco del comienzo de la cadena.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 96 -
Manual de SQL Server 2008 2012
RTRIM(str): Elimina todos los espacios en blanco del final de la cadena.

Ejemplo 1 :

SELECT TRIM(' Sample ');

Resultado :

'Sample'

Ejemplo 2 :

SELECT LTRIM(' Sample ');

Resultado :

'Sample '

Ejemplo 3 :

SELECT RTRIM(' Sample ');

Resultado :
' Sample'

5.3. SENTENCIA CAST

Se utiliza para convertir valores de un tipo a otro diferente, la forma de utilizarla es


CAST("CAMPO" as TIPO), por ejemplo, si queremos recuperar un Integer en
formato de texto, la consulta sql sería así:
Select CAST(goles as varchar(30))
from jugadores
where id = 100

Este resultado nos devolveria los goleadores de menor a mayor, pero lo logico es
que nos interese al reves, por lo que se sería:
Select Jugador,goles
from jugadores
order by goles desc

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 97 -
Manual de SQL Server 2008 2012

EJEMPLOS
CLIENTES ALEATORIOS

alter proc aleatorio


as
declare @azar int
declare @num int
set @num=(select count(EmployeeID)
from dbo.Employees)

set @azar=cast(rand()*@num +1 as int)

select *
from Employees
where EmployeeID=@azar

CUSTOMER AZAR

create proc azar


as

select top 1 CustomerID,CompanyName,NEWID()


from Customers
order by NEWID()
o

alter proc azar


@num int
as

select top (@num) CustomerID,CompanyName,NEWID()


from Customers
order by NEWID()

azar 3

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 98 -
Manual de SQL Server 2008 2012
POR 5 (*5)

SELECT randomNumber, COUNT(1) countOfRandomNumber


FROM (
SELECT ABS(CAST(NEWID() AS binary(6)) %1000) + 1 randomNumber
FROM sysobjects) sample
GROUP BY randomNumber
ORDER BY randomNumber

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 99 -
Manual de SQL Server 2008 2012

REPORTING SERVICE

6.1. INGRESANDO A SQL SERVER BUSINESS INTELLIGENCE DEVELOPMENT


STUDIO

Para realizar Reporting Service y poder realizar informes; primero ingresaremos a


Microsoft Visual Studio 2008 de SQL (que ha sido instalado en el mismo
momento junto con SQL Server 2008) para lo cual seguiremos los siguientes
pasos:

 Buscamos el icono de SQL Server Business Intelligence Development Studio


en el escritorio y hacemos doble clic.

 Podemos escribir la siguiente dirección en el cuadro Ejecutar: “C:\Program


Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe” y pulsar ENTER.
Es la ruta que adquiere el programa de SQL Server Business Intelligence
Development Studio en la instalación estándar.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 100 -
Manual de SQL Server 2008 2012
 Si no encontramos éste icono en el escritorio y no podemos ejecutar lo anterior
hacemos lo siguiente:

o Clic en el botón inicio.

o Clic en todos los programas.

o Clic en Microsoft SQL Server 2008.

o Y finalmente hacemos clic en SQL Server Business Intelligence Development


Studio

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 101 -
Manual de SQL Server 2008 2012
 Esperamos que cargue…

 Podemos observar la página de inicio de Microsoft Visual Studio 2008.

6.2. CREAR UN NUEVO PROYECTO DE REPORTES

 Hacemos clic en Archivo luego en Nuevo, finalmente Proyecto.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 102 -
Manual de SQL Server 2008 2012
 Se abre el cuadro de diálogo Nuevo proyecto, hacemos clic en Proyecto de Servidor de
Informes.

 Ponemos el nombre del nuevo proyecto a crear y luego aceptamos.

 Se creó el Proyecto Karen.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 103 -
Manual de SQL Server 2008 2012

6.3. DATA SOURCE (ORIGEN DE DATOS COMPARTIDO)

 Para crear un origen de Datos compartido hacemos clic derecho sobre origen de datos
compartidos, luego hacemos clic en Agregar nuevo origen de datos.

 Se abre el cuadro de diálogo Propiedades de origen de datos compartidos y para crear


una cadena de conexión hacemos clic en editar.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 104 -
Manual de SQL Server 2008 2012
 En el cuadro propiedades de la conexión, en el nombre del servidor escribimos “.”
(punto), escogemos la base de datos northwind; finalmente aceptamos.

 En la siguiente ventana también elegimos aceptar.

 Se creó el origen de datos compartidos

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 105 -
Manual de SQL Server 2008 2012
6.4. CREAR UN INFORME PARA HACER REPORTES

 Hacemos un anti clic en Informes, clic en Agregar, luego hacemos clic en nuevo
elemento.

 Seleccionamos en Planillas instaladas de Visual Studio, Informe; podemos ponerle un


nombre y luego aceptamos.

 Aparece la siguiente ventana donde se creará el reporte.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 106 -
Manual de SQL Server 2008 2012
6.5. DATA SET
 Para traer la consulta que se va a mostrar se inserta un conjunto de datos. Hacemos clic
en Nuevo y luego en Conjunto de datos…

 En el cuadro de diálogo Propiedades del conjunto de datos, en origen de datos


hacemos clic en Nueva.

 Se abre el cuadro del origen de datos, como ya habíamos creado un origen de datos
compartido, seleccionamos la opción Utilizar referencia de origen de datos
compartidos; en este caso seleccionamos DataSource1. Finalmente aceptamos.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 107 -
Manual de SQL Server 2008 2012
 En Propiedades del conjunto de datos, podemos seleccionar el tipo de consulta que
podemos hacer por ejemplo el de Texto y en Consulta pues escribimos la consulta y
aceptamos.

 Otro caso es el de seleccionar en el tipo de consulta Procedimiento Almacenado,


seleccionando así el procedimiento que deseamos y luego aceptamos.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 108 -
Manual de SQL Server 2008 2012
 Finalmente observamos que el DataSet1 se creó con éxito.

 El Cuadro de Herramientas:

 Para elaborar el informe debemos arrastrar un elemento del Cuadro de Herramientas


hasta la superficie del diseño
 Por ejemplo el elemento Matriz.

 Por ejemplo el elemento Gráfico, donde se puede elegir el gráfico del cuadro
Selección tipo de gráfico y aceptamos, logrando ver el gráfico.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 109 -
Manual de SQL Server 2008 2012

 También podemos utilizar el elemento Informe integrado para poder visualizar


más de un reporte.

 Otro elemento es Tabla muy utilizado en muchos reportes.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 110 -
Manual de SQL Server 2008 2012
 y, a continuación, arrastramos campos de conjunto de datos al elemento; que puede
ser de tres maneras:

 Arrastrando desde Datos de Informe al área de diseño.

 Eligiendo en las filas los datos:

 Si ya no hay más columnas arrastramos los datos junto a la última columna.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 111 -
Manual de SQL Server 2008 2012
 Observamos el reporte en manera de diseño con todos los datos pedidos.

 En el mismo modo de diseño Podemos cambiar el color de relleno seleccionando las


celdas de las filas o columnas.

 De igual manera se puede hacer para cambiar el color de texto.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 112 -
Manual de SQL Server 2008 2012
 Hacemos clic en Vista Previa, esperamos hasta que se genere el informe.

 Después que se haya generado el informe Podemos presentar ya el informe.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 113 -
Manual de SQL Server 2008 2012
EJERCICIOS

 CREAR UN ORIGEN DE DATOS COMPARTIDO. Crear una sola vez la conexión


para todos los informes.

1. Crear el informe (En Visual Studio):


Mostrar en un informe que contenga: ProductName, UnitPrice, UnitsInStock,
CategoryName

Código en SQL:

create proc Report1


as
select p.ProductName, p.UnitPrice, p.UnitsInStock, c.CategoryName
from Products as p inner join Categories as c on
p.CategoryID=c.CategoryID

Reporting services:

 En modo de diseño:

 En modo de vista previa (Informe final):

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 114 -
Manual de SQL Server 2008 2012
2. Crear un reporte para mostrar el Nombre del producto, el precio del producto, el
stock y la categoría; deberá ser filtrado por categoría.

Código en SQL:

create proc cat_prod


@cate int
as
select ProductName,UnitPrice,UnitsInStock,CategoryID
from Products
where CategoryID=@cate

select categoryID, categoryname


from categories
order by categoryname

Reporting Service:

 Para dar los valores a la categoría debemos agregar un nuevo conjunto de datos
(dataset2). En esta ocasión hacemos una consulta de tipo Texto.

 Para darle los valores de al parámetros damos anti clic en el parámetro y


escogemos Propiedades del parámetro.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 115 -
Manual de SQL Server 2008 2012
 En Propiedades de parámetro de informe, en la parte general llenamos lo que se
nos pide: Pedir datos, Tipo de datos, etc.

 En valores disponibles: Seleccionamos la opción Obtener valores de una consulta,


en conjunto de datos elegimos DataSet2.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 116 -
Manual de SQL Server 2008 2012
 En Campo de valor seleccionamos CategoryId y en Campo de etiqueta
seleccionamos Categorianame.

 En modo de diseño:

 En modo de vista previa:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 117 -
Manual de SQL Server 2008 2012
Informe final de la categoría 1:

3. Crear un reporte usando reporting service que muestre el nombre del producto, el
nombre de la compañía del proveedor, precio, seleccionar el nombre de la
empresa y mostrar los productos del proveedor seleccionado.

Código en SQL:

create proc informe02


@s int
as
select p.ProductName,s.CompanyName,p.UnitPrice
from Products as p inner join Suppliers as s on
p.SupplierID=s.SupplierID
where s.SupplierID=@s

select SupplierID,CompanyName
from Suppliers
order by SupplierID

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 118 -
Manual de SQL Server 2008 2012
Reporting Services:

 En modo de diseño:

 En modo de vista previa:

Informe final:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 119 -
Manual de SQL Server 2008 2012
4. Mostrar el número de productos vendidos en cada mes por cada empleado.

Código en SQL:

create proc Prod_vendidOS


@e int
as
select LastName+' '+FirstName AS EMPLEADO
,MONTH(o.OrderDate) as MES,sum(od.Quantity) as Total
from Employees as e inner join Orders as o
on e.EmployeeID=o.EmployeeID inner join [Order
Details] as od on o.OrderID=od.OrderID
where E.EmployeeID=@e
group by LastName+' '+FirstName,MONTH(o.OrderDate)
ORDER BY MONTH(o.OrderDate)

create proc empleados


as
SELECT EmployeeID,FirstName+' '+FirstName
FROM Employees
ORDER BY EmployeeID

Reporting Services:

 En modo de diseño:

 En modo de vista previa:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 120 -
Manual de SQL Server 2008 2012
Informe final:

5. Mostrar el nombre del cliente, nombre del empleado, número de la orden, fecha de
la orden, nombre del proveedor, filtrar por el empleado que hizo la orden.

Código en SQL:

create proc ordeNES_empleado


@e INT
as
select c.ContactName, lastname+' '+firstname as Empleado, o.OrderID,
OrderDate, s.ContactName
from Orders as o inner join [Order Details] as od on o.OrderID=od.OrderID
inner join Products as p on p.ProductID=od.ProductID inner join
Customers as c on c.CustomerID=o.CustomerID inner join Employees
as e on e.EmployeeID=o.EmployeeID inner join Suppliers as s on
s.SupplierID=p.SupplierID
where E.EmployeeID=@e

create proc empleados


as
SELECT EmployeeID,FirstName+' '+FirstName
FROM Employees
ORDER BY EmployeeID

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 121 -
Manual de SQL Server 2008 2012
Reporting Services:

 En modo de diseño:

 En modo de vista previa:

Informe final:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 122 -
Manual de SQL Server 2008 2012
PRÁCTICA

Crear los siguientes informes: en SQL SERVER.

1. Mostrar en un objeto table, el nombre del cliente, la n° de la orden, el nombre del


producto, precio, cantidad comprada, además el nombre del proveedor.

Mostrar el nombre del cliente en un Combo box e DROP DOWN para filtrar la información.

Código en SQL:

create proc Tab01


@nom nvarchar (40)
as
select c.CompanyName,
o.OrderID,p.ProductName,od.UnitPrice,od.Quantity,s.CompanyName
from orders as o inner join [Order Details] as od on o.OrderID=od.OrderID
inner join Products as p on od.ProductID=p.ProductID inner join
Customers as c on c.CustomerID=o.CustomerID inner join Suppliers as s
on s.SupplierID=p.SupplierID
where c.CompanyName=@nom

create proc T01


as
select CustomerID, CompanyName
from Customers
order by CompanyName

Reporting Services:

 En modo de diseño:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 123 -
Manual de SQL Server 2008 2012
 En modo de vista previa:

Informe final:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 124 -
Manual de SQL Server 2008 2012

2.

10 30 Proveedor
Precio y

Productoname Unitprice Categoryname companyname

Código en SQL:

create proc Productos_entre


@li money,
@ls money
as

select ProductName,UnitPrice,CategoryName,s.CompanyName
from Products as p inner join Categories as c on
c.CategoryID=p.CategoryID inner join Suppliers as s on
s.SupplierID=p.SupplierID
where UnitPrice between @li and @ls

create proc li_ls


as
select ProductID,UnitPrice
from Products
order by UnitPrice

Reporting Services:

 En modo de diseño:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 125 -
Manual de SQL Server 2008 2012
 En modo de vista previa:

Informe final:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 126 -
Manual de SQL Server 2008 2012

3. Proveedores (mostrar
companyname)

Categoría (mostrar categoryname)

Productname Categoryname Companyname unitsinstock

Código en SQL:

CREATE proc PROV_CAT


@prov nvarchar (40),
@cat NVARCHAR (15)
as
select p.ProductName,c.CategoryName,s.CompanyName,p.UnitsInStock
from Products as p inner join Categories as c on
p.CategoryID=c.CategoryID inner join Suppliers as s on
s.SupplierID=p.SupplierID
where c.CategoryName=@cat and s.CompanyName=@prov

CREATE proc proveedores create proc categorias


as as
select SupplierID,CompanyName select CategoryID,CategoryName
from Suppliers from Categories
order by SupplierID order by CategoryID

Reporting Services:

 En modo de diseño:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 127 -
Manual de SQL Server 2008 2012
 En modo de vista previa:

Informe final:

4. Mostar en un gráfico y en una tabla el número de productos por categorías

6
5
5
4
3
3
2 2
2
1
0
Categoría A Categoría B Categoría C Categoría D …

Productos

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 128 -
Manual de SQL Server 2008 2012
Código en SQL:

create proc TOT_PROD


as
select CategoryID,count(QuantityPerUnit) as total
from Products
group by CategoryIDwhere E.EmployeeID=@e

Reporting Services:

 En modo de diseño:

 En modo de vista previa (Informe final):

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 129 -
Manual de SQL Server 2008 2012

5. Año (consulta de años a la bd) (distint)(matriz) (employ,orde)

Meses

1 2 3 4 … 12
Juan Torres
Pedro León
Ana Díaz
María Huamán
Empleados (Nombre y apellidos)

Numero de órdenes realizadas en un mes del año seleccionado

Código en SQL:

create proc Emp_orde


@anio datetime
as
select FirstName+' '+LastName as name,count(OrderID) as
total_ordenes,MONTH(OrderDate)
from Employees as e inner join Orders as o on
o.EmployeeID=e.EmployeeID
where year(OrderDate)=@anio
group by FirstName+' '+LastName,MONTH(OrderDate)where
E.EmployeeID=@e

create proc anios


as
select distinct YEAR(OrderDate)
from Orders
order by YEAR(OrderDate)

Reporting Services:

 En modo de diseño:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 130 -
Manual de SQL Server 2008 2012
 En modo de vista previa:

Informe final:

6. Mes Año

Total de Órdenes
6
Número de órdenes

5
realizadas

4
3
2
1
0
Emp 1 Emp 2 Emp 3 Emp 4 …

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 131 -
Manual de SQL Server 2008 2012
Código en SQL:

create proc Emp_mes_anio


@anio datetime,
@mes datetime
as
select FirstName+' '+LastName as name,count(OrderID) as total_ordenes
from Employees as e inner join Orders as o on o.EmployeeID=e.EmployeeID
where year(OrderDate)=@anio and MONTH(OrderDate)=@mes
group by FirstName+' '+LastName

create proc ani create proc mese


as as
select distinct YEAR(OrderDate) select distinct MONTH(OrderDate)
from Orders from Orders
order by YEAR(OrderDate) order by MONTH(OrderDate)

Reporting Services:

 En modo de diseño:

Código para el color de las


barras:
=IIf(Fields!name.Value="Andrew
Fuller",
"Khaki",IIf(Fields!name.Value="Anne
Dodsworth","Orange",IIf(Fields!name
.Value="Janet
Leverling","Pink",IIf(Fields!name.V
alue="Laura
Callahan","SlateBlue",IIf(Fields!na
me.Value="Margaret
Peacock","CornflowerBlue",IIf(Field
s!name.Value="Michael
Suyama","Blue",IIf(Fields!name.Valu
e="Nancy
Davolio","MediumAquamarine",IIf(Fie
lds!name.Value="Robert
King","PaleTurquoise","Plum")))))))
)

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 132 -
Manual de SQL Server 2008 2012
 En modo de vista previa:

Informe final:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 133 -
Manual de SQL Server 2008 2012

7. Empleados (nombres y apellidos del empleado)

Monto total vendido en cada


año por un epleado
6
5
Monto Total

4
Vendido

3
2
1
0
Años

Código en SQL:

create proc empleado


@nom nvarchar (40)
as
select distinct year(OrderDate) as año, LastName+' '+FirstName as
Nombre, sum(Quantity*UnitPrice) as monto_total
from Employees as e inner join Orders as o on
o.EmployeeID=e.EmployeeID
inner join [Order Details] as od on od.OrderID=o.OrderID
where (LastName+' '+FirstName)=@nom
group by LastName+' '+FirstName,year(OrderDate)

create proc employs


as
select LastName+' '+FirstName as Nombre
from Employees
group by LastName+' '+FirstName

Reporting Services:

 En modo de diseño:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 134 -
Manual de SQL Server 2008 2012

 En modo de vista previa:

Informe final:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 135 -
Manual de SQL Server 2008 2012
8.
ProductName UnitPrice UnitInStock
0
10 El texto con stock 0 sale con color rojo y
2 con stock mayor a 0 con azul.
4
35

Código en SQL:

create proc Stock_cero


as
select ProductName,UnitPrice,UnitsInStock
from Products
order by ProductName

Reporting Services:

 En modo de diseño:
Código para el color de texto en Stock

=IIf(Fields!UnitsInStock.Value=0,
"Red","Blue")

 En modo de vista previa:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 136 -
Manual de SQL Server 2008 2012
9.
ProductName UnitPrice Discontinued Mostrar: Discontinuado o vigente

Código en SQL:

create proc D_V


as
select ProductName,UnitPrice,Discontinued
from Products
order by ProductName

Reporting Services:

 En modo de diseño:
Código para el texto de mostrar Discontinuado
o Vigente

=iif(Fields!Discontinued.Value="True
","Discontinuado","Vigente")

 En modo de vista previa:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 137 -
Manual de SQL Server 2008 2012

AGRUPAR EN REPORTING SERVICE


 Tenemos la siguiente consulta en modo de diseño:

 Que en modo de Vista previa se muestra así:

 Vamos a agrupar por categorías; para esto hacemos anticlic en la fila, elegimos
Agregar grupo, seguidamente seleccionamos Grupo primario:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 138 -
Manual de SQL Server 2008 2012
 Seleccionamos el campo por el que vamos a agrupar, también seleccionamos
Agregar encabezado de grupo, como también Agregar pie de grupo.:

 Se observará así:

 Para personalizar la visibilidad de fila, hacemos anticlic en la fila y hacemos clic en


Visibilidad de fila.

 En el cuadro de visibilidad de fila seleccionamos la opción ocultar, selecionamos la


visualización se puede activar… Finalmente aceptamos:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 139 -
Manual de SQL Server 2008 2012
 En vista previa se muestra así:

 También se puede hacer una suma total por cada grupo de al final.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 140 -
Manual de SQL Server 2008 2012

ENLACES DE INFORMES
 Tenemos un primer in forme
o Modo diseño.

o Modo Vista previa.

 Hacemos anti clic en el campo que va a servir de enlace para ir a otro informe y
hacemos clic en Propiedades de cuadro de texto…

 Para que lleve al siguiente informe:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 141 -
Manual de SQL Server 2008 2012

 En el cuadro de Propiedades de Cuadro de Texto haciendo clic en acción, en


cambiar las opciones de hipervínculos seleccionamos Ir al informe.

 Seleccionamos el informe al que vamos a ir:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 142 -
Manual de SQL Server 2008 2012

 Al agregar un parámetro debemos seleccionar lo siguiente:

 Cuando hacemos clic en una de las celdas, se abrirá el siguiente informe enlazado
a éste al pasarle el parámetro.

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 143 -
Manual de SQL Server 2008 2012

IMPLEMENTACIÓN DE REPORTING SERVICE EN IIS


Implementar el report service en iis(internet information service) /* Videos 22062011
origen de datos compartidos*/

 Instalar el iis

 Crear una data set

 Pie de grupo para hacer cálculos

 De un informe llamar a otro pasar un parámetro (mostrar por categoría)

 Generar(¿2° opción?) ASP

 LocalhostURL donde va dirección de web donde cargar

 Exportar archivo csv

 Iniciopcherramientas Administrativasiis puesto 80…

Podemos hacer lo siguiente:

 Clic en generar, luego en generar [nombre del informe]

 Anti clic en el nombre del informe y propiedades:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 144 -
Manual de SQL Server 2008 2012
 Escribimos la página http://localhost/reportserver:

 Implementar el informe:

 Copiamos el URL que aparece en la generación:

 Abrimos en el internet explore:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 145 -
Manual de SQL Server 2008 2012

INFORMES INTEGRADOS
 Tenemos dos in formes:

 Seleccionamos el elemento Informe integrado y arrastramos dos al área:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 146 -
Manual de SQL Server 2008 2012
 Hacemos lo siguiente para poner a los diferentes informes en los informes integrados.

 Obtenemos lo siguiente:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 147 -
Manual de SQL Server 2008 2012

EJERCICIOS:
1. Expresión calcule los de categoría 1 salga un campo descuento.

Mostrar el

+CategoryName

ProductName UnitPrice CategoryId Descuento % Descuento S/.


A
B
C
+CategoryName
Descuento:
Cat 110% Cat 430%
Cat 215% Else0%
Cat 323%
Código en SQL:

select CategoryName,ProductName,UnitPrice,c.CategoryID
from Products as p inner join Categories as c on p.CategoryID=p.CategoryID
order by c.CategoryID

Reporting Services:

 En modo de diseño:

Código para el Código para el descuento en


descuento en porcentajes
porcentajes
=IIf(Fields!CategoryID.Value=
=IIf(Fields!Category 1,Fields!UnitPrice.Value*0.1,
ID.Value=1,"10%",IIf IIf(Fields!CategoryID.Value=2
(Fields!CategoryID.V ,Fields!UnitPrice.Value*0.15,
alue=2,"15%",IIf(Fie IIf(Fields!CategoryID.Value=3
lds!CategoryID.Value ,Fields!UnitPrice.Value*0.23,
=3,"23%",IIf(Fields! IIf(Fields!CategoryID.Value=4
CategoryID.Value=4," ,Fields!UnitPrice.Value*0.3,"
30%","0%")))) 0"))))

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 148 -
Manual de SQL Server 2008 2012
 En modo de vista previa:

Informe la categoría 4:

2.

Informe x Informe y

LISTA DE EMPLEADOS XXXXXX

CÓDIGO NOMBRES Y Años Ventas 100


APELLIDOS Totales
XXXXX 50

0
2008 2009 2010 2011
Código en SQL:

select employeeid, FirstName+' '+LastName as Nombre


from Employees

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 149 -
Manual de SQL Server 2008 2012
Reporting Services:

 En modo de diseño:

 En modo de vista previa:

Código en SQL:

SELECT FirstName+' '+LastName as Nombre, YEAR(orderdate)


as anio, sum(Quantity) as VentaTotal
from [Order Details] as od inner join Orders as o on
od.OrderID=o.OrderID inner join Employees as e on
e.EmployeeID=o.EmployeeID
where e.EmployeeID=@e
group by YEAR(orderdate), FirstName+' '+LastName

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 150 -
Manual de SQL Server 2008 2012
Reporting Services:

 En modo de diseño:

 En modo de vista previa:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 151 -
Manual de SQL Server 2008 2012
Informes Integrados:
Reporting Services:
 En modo de diseño:

 En modo de vista previa:

3. +HP(CompayName-Suppliers)

ProductId ProductName UnitPrice UnitInStock

+IBM

Código en SQL:

select CompanyName, productId, productname,


UnitsInStock
from Suppliers as s inner join Products as p
on s.SupplierID=p.SupplierID

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 152 -
Manual de SQL Server 2008 2012
Reporting Services:

 En modo de diseño:

 En modo de vista previa:

Informe final:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 153 -
Manual de SQL Server 2008 2012
PRACTICA CALIFICADA DE REPORTING SERVICES SQL SERVER 2008

Implementar los siguientes Informes en Reporting Services, usando Stored


procedure:

1. Mostrar los Empleados (Nombres y Apellidos) en una lista desplegable, para luego
mostrar Nro de la Orden, la fecha de la orden, Código del Producto, Nombre del
Producto, nombre de la categoría y el nombre de la compañía proveedora.

Código en SQL:

create proc report1


as
select LastName+' '+FirstName as nombre, o.OrderID, OrderDate,
p.ProductID,
ProductName,CategoryName, CompanyName
from Employees as e inner join Orders as o on e.EmployeeID=o.EmployeeID
inner join [Order Details] as od on od.OrderID=o.OrderID
inner join Products as p on p.ProductID=od.ProductID
inner join Categories as c on c.CategoryID=p.CategoryID
inner join Suppliers as s on s.SupplierID=p.SupplierID

Reporting Services:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 154 -
Manual de SQL Server 2008 2012
2. Crear un Grafico que muestre el Numero de productos pedidos en cada categoría
por cada año. Adicionalmente al costado del grafico debe salir una tabla con los
mismos datos.

Código en SQL:

create proc reports2


as
select sum(Quantity) as total, c.CategoryID, YEAR(OrderDate) as anio
from Orders as o inner join [Order Details] as od on
o.OrderID=od.OrderID
inner join Products as p on od.ProductID=p.ProductID
inner join Categories as c on c.CategoryID=p.CategoryID
group by c.CategoryID, YEAR(OrderDate)

Reporting Services:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 155 -
Manual de SQL Server 2008 2012

3. Crear un Grafico que muestre los años, los empleados y el Monto total ingresado
por los pedidos. Filtrar por años que se mostrara desde una lista desplegable.

Código en SQL:

create proc report3


@anio datetime
as
select YEAR(OrderDate) as anio, LastName+' '+FirstName as NOMBRE,
SUM(Quantity*UnitPrice) as Monto_Total
from [Order Details] as od inner join Orders as o on
o.OrderID=od.OrderID
inner join Employees as e on e.EmployeeID=o.EmployeeID
where YEAR(OrderDate)=@anio
group by YEAR(OrderDate), LastName+' '+FirstName

select distinct YEAR(OrderDate) as anio


from Orders

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 156 -
Manual de SQL Server 2008 2012
Reporting Services:

4. Crear un Grafico que muestre los años, los meses y el numero de productos
pedidos de un cliente (solo considerar los productos videntes). Escogiendo el
cliente de una lista desplegable, donde se mostrara el nombre de la compañía del
cliente.

Código en SQL:

create proc report4


@nom nvarchar(40)
as
select CompanyName, YEAR(OrderDate) as anio,month(OrderDate) as mes,
SUM(Quantity) as Productos_pedidos
from [Order Details] as od inner join Orders as o on o.OrderID=od.OrderID
inner join Employees as e on e.EmployeeID=o.EmployeeID
inner join Products as p on p.ProductID=od.ProductID
inner join Customers as c on c.CustomerID=o.CustomerID
where Discontinued=0 and CompanyName=@nom
group by CompanyName, YEAR(OrderDate),month(OrderDate)

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 157 -
Manual de SQL Server 2008 2012

select CompanyName
from Customers
order by CompanyName

Reporting Services:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 158 -
Manual de SQL Server 2008 2012
5. En una matriz mostrar los clientes (filas), los meses (columnas) y en la
intersección el numero de productos pedidos, solo considerar los productos
vigentes.

Código en SQL:

create proc report5


as
select CompanyName, MONTH(OrderDate), SUM(Quantity) as Total_Productos
from [Order Details] as od inner join Orders as o on
o.OrderID=od.OrderID
inner join Employees as e on e.EmployeeID=o.EmployeeID
inner join Products as p on p.ProductID=od.ProductID
inner join Customers as c on c.CustomerID=o.CustomerID
where Discontinued=0
group by CompanyName,month(OrderDate)

Reporting Services:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 159 -
Manual de SQL Server 2008 2012
6. En una matriz mostrar los años (filas), los meses (columnas) y en la intersección el
monto vendido. Filtrar por empleados, mostrando en una lista desplegable el
Nombre y Apellido de los Empleados.

Código en SQL:

create proc reports6


@e int
as
select CompanyName,year(OrderDate) as año, MONTH(OrderDate) as mes,
SUM(Quantity*od.UnitPrice) as Monto_Total
from [Order Details] as od inner join Orders as o on o.OrderID=od.OrderID
inner join Employees as e on e.EmployeeID=o.EmployeeID
inner join Products as p on p.ProductID=od.ProductID
inner join Customers as c on c.CustomerID=o.CustomerID
where e.EmployeeID=@e
group by CompanyName,month(OrderDate),year(OrderDate)

select EmployeeID, LastName+' '+FirstName as Nombre


from Employees
order by LastName+' '+FirstName

Reporting Services:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 160 -
Manual de SQL Server 2008 2012
7. Mostrar el nombre del producto, nombre de la categoría y nombre de la empresa
proveedora. Mostrar toda la fila de un registro en color amarillo si son de las
categorías 1 y 2, en color verde las categorías 3 y 4, en color azul las categorías 5
y 6, y en color rojo el resto de categorías.

Código en SQL:

create proc report7


as
select ProductName,c.CategoryID , CategoryName,CompanyName
from Products as p inner join Categories as c on
p.CategoryID=c.CategoryID inner join Suppliers as s on
s.SupplierID=p.SupplierID

Reporting Services:

=IIf(Fields!CategoryID.Value=1,"Yellow",IIf(Fields!CategoryID.Value=2,"Yellow",IIf(
Fields!CategoryID.Value=3,"SeaGreen",IIf(Fields!CategoryID.Value=4,"SeaGreen",
IIf(Fields!CategoryID.Value=5,"Blue",IIf(Fields!CategoryID.Value=6,"Blue","Red"))))
))

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 161 -
Manual de SQL Server 2008 2012
8. Mostrar por grupos con el icono de expandir y contraer (+), el numero de las
órdenes de compra y al expandir mostrar: el numero de la Orden, Código del
Producto, Nombre del Producto, precio, cantidad comprada, sub total (Precio *
cantidad) y en el pie del grupo el monto total pagado por orden de compra

Código en SQL:

create proc report8


as
select OrderID, p.ProductID, ProductName, od.UnitPrice, Quantity,
(od.UnitPrice*Quantity) as SubTotal
from [Order Details] as od inner join Products as p on
p.ProductID=od.ProductID

Reporting Services:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 162 -
Manual de SQL Server 2008 2012

ADMINISTRACIÓN DE USUARIOS
 He aquí algunos códigos para crear usuarios con store procedure:
o Creación de login y borrado del mismo:

create proc InicioSesion


as
declare @c as int
declare @n as varchar(20)
declare @a as varchar(20)
set @c=1
while (@c<=9)
begin
select @n=rtrim(lower(firstname)),
@a=rtrim(lower(lastname))
from employees
where EmployeeID=@c
exec sp_addlogin @n,@a,'master', 'spanish'
--exec sp_adduser @n,@
set @c=@c+1
end
///////////////////////////////////////////////////////
////
create proc borrar
as
declare @c as int
declare @n as varchar(20)
set @c=1
while(@c<=9)
begin
select @n=RTRIM(firstname)
from Employees
where EmployeeID=@c
set @c=@c+1
exec sp_droplogin @n
end

o Creación de usuarios y borrado del mismo:

create proc usuario2


as
declare @c as int
declare @n as varchar(20)
set @c=1
while (@c<=9)
begin
select @n=rtrim(lower(firstname))

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 163 -
Manual de SQL Server 2008 2012
from employees
where EmployeeID=@c
exec sp_adduser @n,@n
--exec sp_adduser @n,@
set @c=@c+1
end
/////////////////////////////////////////////
create proc borrar2
as
declare @c as int
declare @n as varchar(20)
set @c=1
while(@c<=9)
begin
select @n=RTRIM(firstname)
from Employees
where EmployeeID=@c
set @c=@c+1
exec sp_dropuser @n
end

 Filtrados usuarios y logins.

create proc usuario 1


@e as int
as
declare @n as varchar(20)
declare @a as varchar(20)
begin
select @n=rtrim(lower(firstname)),
@a=rtrim(lower(lastname))
from employees
where EmployeeID=@e
exec sp_addlogin @n,@a,'master', 'spanish'
--exec sp_adduser @n,@
end
///////////////////////////
create proc usuario52 1
@e as int
as
declare @n as varchar(20)
begin
select @n=rtrim(lower(firstname))
from employees
where EmployeeID=@e
exec sp_adduser @n,@n

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 164 -
Manual de SQL Server 2008 2012
--exec sp_adduser @n,@
end

use master
select name from syslogins

use Northwind
select name from sysusers

CREACIÓN DE VISTAS
Código en SQL:

create view v_todoproducts


as
select *
from products

Seleccionar la vista:

select *
from v_todoproducts

Código en SQL:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 165 -
Manual de SQL Server 2008 2012

create view vista02


as
select ProductID, ProductName
from products

Seleccionar la vista:

select *
from vista02

Código en SQL:

create view vista03


as
select top 1000 ProductID, ProductName
from products
order by ProductName

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 166 -
Manual de SQL Server 2008 2012

Seleccionar la vista:

select *
from vista03

Código en SQL:

drop view vista02

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 167 -
Manual de SQL Server 2008 2012

CREACIÓN DE UN GRUPO DE INICIOS DE SESIÓN EN UN


STORE PROCEDURE

Código en SQL:

create proc Inicio_seccion


as
declare @c as int
declare @n as varchar(20)
declare @a as varchar(20)
set @c=1
while (@c<=9)
begin
select @n=rtrim(lower(firstname)), @a=rtrim(lower(lastname))
from employees
where EmployeeID=@c
exec sp_addlogin @n,@a,'master', 'spanish'
--exec sp_adduser @n,@
set @c=@c+1
end

exec Inicio_seccion

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 168 -
Manual de SQL Server 2008 2012
Verificando que se hayan creado los Inicios de sesión:

use master
go
select name
from syslogins
where year(createdate)=YEAR(GETDATE()) and
month(createdate)=month(GETDATE()) and
day(createdate)=day(GETDATE())
order by name

Código en SQL:

create proc borrar_ISLogin


as
declare @c as int
declare @n as varchar(20)
set @c=1
while(@c<=9)
begin
select @n=RTRIM(firstname)
from Employees
where EmployeeID=@c
set @c=@c+1
exec sp_droplogin @n
end

exec borrar_ISLogin

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 169 -
Manual de SQL Server 2008 2012

Verificando que se hayan eliminado los Inicios de sesión:

use master
go
select name
from syslogins
where year(createdate)=YEAR(GETDATE()) and
month(createdate)=month(GETDATE())
and day(createdate)=day(GETDATE())
order by name

CREACIÓN DE UN GRUPO DE USUARIOS EN UN STORE PROCEDURE

Código en SQL:

CREATE proc usuario2


as
declare @c as int
declare @n as varchar(20)
set @c=1
while (@c<=9)
begin
select @n=rtrim(lower(firstname))
from employees
where EmployeeID=@c
exec sp_adduser @n,@n
--exec sp_adduser @n,@
set @c=@c+1
end

exec usuario2

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 170 -
Manual de SQL Server 2008 2012
Verificando que se hayan creado los Inicios de sesión:

use Northwind
go
select name
from SYSUSERS
where year(createdate)=YEAR(GETDATE()) and
month(createdate)=month(GETDATE())
and day(createdate)=day(GETDATE())
order by name

Código en SQL:

create proc borrar2


as
declare @c as int
declare @n as varchar(20) exec borrar2
set @c=1
while(@c<=9)
begin
select @n=RTRIM(firstname)
from Employees
where EmployeeID=@c
set @c=@c+1
exec sp_dropuser @n
end

Verificando que se hayan eliminado los Inicios de sesión:

select name
from SYSUSERS
where year(createdate)=YEAR(GETDATE()) and
month(createdate)=month(GETDATE())
and day(createdate)=day(GETDATE())
order by name

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 171 -
Manual de SQL Server 2008 2012

FUNCIONES

 Cambiar a Mayúsculas:

Código en SQL:

select UPPER ('juan')

select UPPER(companyname)
from Suppliers

 Convierte a ninúsculas:

Código en SQL:

select LOWER('KArEEf')
select lower(customerid)
from Customers

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 172 -
Manual de SQL Server 2008 2012
 Elimina los espacios de la izquierda de un texto.

Código en SQL:

select (' JOSE'),


LTRIM(' JOSE')

 Elimina los espacios de la derecha de un texto.

Código en SQL:

select ('JOSE '),


RTRIM('JOSE ')

 A la longitude del texto:

Código en SQL:

select len('Karen Johana')


select LEN(lastname), lastname from employees

 Cantidad de caracteres desde una determinada posición del texto.

Código en SQL:

select SUBSTRING('universidad',4,3)

 Encuentra la posición de un paracter.

Código en SQL:

select CHARINDEX(' ', 'Universidad


Nacional de Cajamarca',13)

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 173 -
Manual de SQL Server 2008 2012
 Datepart

Código en SQL:

select datepart(yy,GETDATE())
select datepart(yy,DATEADD(YY,-3,GETDATE()))
/*agregar años al año, 1 un año,fecha ala cual quiero
agregar*/

 Getdate(), Dateadd

Código en SQL:

select GETDATE()
select DATEADD(mm,3,GETDATE())

select datepart(mm,GETDATE())
select datepart(mm,DATEADD(mm,-1,GETDATE()))

 Datediff

Código en SQL:

select DATEDIFF(YY,'19/04/1991',GETDATE())
/*add añade, diff resta*/

 Nombre de la fecha.

Código en SQL:

select DATENAME(MM,GETDATE())
select DATENAME(dd,GETDATE())

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 174 -
Manual de SQL Server 2008 2012
 ¿Es fecha?

Código en SQL:

select ISDATE(orderdate) from Orders


select ISDATE('19/09/2011')
select ISDATE('ANA')

 ¿Es número?

Código en SQL:

select ISNUMERIC(90)
select ISNUMERIC('19/09/2011')
select ISNUMERIC('Pedro')
select ISNUMERIC(200)

 Número de alguna consulta de una cantidad de filas afectadas.

Código en SQL:

select *
from Employees

select @@rowcount

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 175 -
Manual de SQL Server 2008 2012
 @@rowcount con update

Código en SQL:

update Products
set UnitPrice=100
where CategoryID=1
/*set @nr=@@rowcount*/

select @@rowcount

RESTRICCIONES
 Crearemos una tabla para hacer las restricciones:

 Para crear una restricción hacemos:

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 176 -
Manual de SQL Server 2008 2012

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 177 -
Manual de SQL Server 2008 2012

alter table dbo.Pruebas_restricciones


add constraint ck_celular
check (celular like '519%')

alter table dbo.Pruebas_restricciones


add constraint ck_celular2
check (len(rtrim(celular))=11)

alter table dbo.Pruebas_restricciones


add constraint ck_correo
check (celular like '%@%')

alter table dbo.Pruebas_restricciones


add constraint hola
check (nombre like '%s%' )

insert into dbo.Pruebas_restricciones(nombre)

values ('hola')

PROPUESTOS:
1. Crear una función que devuelva el IGV
Create function fn_IGV
(@monto money)
returns money
as
begin
declare @sol money
set @sol=@monto*0.19
return @sol

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 178 -
Manual de SQL Server 2008 2012
end

select unitprice, dbo.fn_IGV (unitprice)


from Products

create function fn_borrar_lados


(@text varchar(1000))
returns varchar (1000)
as
begin
return ltrim(rtrim(@text))
end

select (' hola '), dbo.fn_borrar_lados('


hola ')

2. Crear una función que devuelva el precio en soles.


create function fn_precio
(@MD money, @TC money)
returns money
as
begin
declare @MS money
set @MS=@MD*@TC
return @MS
end

select unitprice, dbo.fn_precio(unitprice,2.05)


from Products

3. Función que permita ingresar un número de mes y muestre el mes en texto: 3 à


salida: Marzo
alter function fn_meses
(@mes datetime)
returns char(40)
as
begin
declare @text char(40)
set @text=datename(mm,@mes)
return @text
end
select '9', dbo.fn_meses ('14/9/2100')

4. Crear una función que pase como parámetro el fax, si no existe fax entonces que
se muestre 'no especificado', caso contrario que muestre el número de fax.

create function veri_fax

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 179 -
Manual de SQL Server 2008 2012
(@f nvarchar(24))
returns char
as
begin
declare @nr int
select @nr=count(*) from dbo.Customers where Fax=@f
return @f
end

create proc hola2


@fax nvarchar(24)
as
declare @num char
select @num=dbo.veri_fax (@fax)
if(@num=1)
raiserror ('@num',10,1)
else
raiserror ('no especificado',10,1)

select fax

from Customers

5. Crear una función que me permita cambiar la clave de un usuario si se graba bien
devolver 1 y sino devolver 0

create function fn_veri_user


(@u varchar(15),@p varchar(20))
returns int
as
begin
declare @nr int
select @nr=count(*)
from usuarios_db
where usuario=@u and clave=@p

return @nr
end

/////
select dbo.fn_veri_user('juan2011','1234')
select dbo.fn_veri_user('karenjea','753159')

create function fn_clavenueva


(@u varchar(15),@c_act varchar(20),@c_nue varchar(20))
as
begin
update usuarios_db

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 180 -
Manual de SQL Server 2008 2012
set clave=@c_nue
where usuario=@u and clave=@c_act

if @@rowcount=1
raiserror('se cambio la clave',10,1)
else
raiserror('usuario o clave incorrecta',10,1)
end

7. Crear una función que nos permita seleccionar un Proveedor de manera aleatoria.

--crear una vista que almacene el numero aleatorio


create view v_rand
as
select rand() as number
/*
select number from v_rand*/

/* select cast(number*5 as int) from v_rand*/

-- FUNCION
create function fn_aleatorio()
returns varchar(20)
as
begin
declare @nreg int,@reg varchar(20),@rnd float

select @nreg=count(*)
from suppliers

set @rnd=(select number from v_rand)

select @reg=companyname
from suppliers
where supplierid=cast((@rnd*@nreg+1) as int)

return @reg

end

select dbo.fn_aleatorio()

Escalar: retorna un solo valor (prohibido update) funciones(devuelve tabla


de múltiples instrucciones): se llama desde un from no prohíbe update---
Con valores de tablas de con varias instrucciones

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 181 -
Manual de SQL Server 2008 2012

TRIGRESS
1. Permitir eliminar un solo registro de la tabla order details.
CREATE TRIGGER BorrarOrd ON [order details]
FOR DELETE
AS
IF (SELECT COUNT(*) FROM Deleted) > 1
BEGIN
RAISERROR('Solo puede eliminar un registro a la vez', 16,
1)
ROLLBACK TRANSACTION
END
Probar:
delete from [Order Details]
where OrderID = 10529

2. Cuando se inserte un registro en la tabla order details, la cantidad pedida se debe


restar en el campo unitsinstock de la tabla products

CREATE TRIGGER A9
ON [ORDER DETAILS]
FOR INSERT
AS
UPDATE P
SET UNITSINSTOCK = (P.UNITSINSTOCK - I.QUANTITY)
FROM PRODUCTS AS P
INNER JOIN INSERTED AS I
ON P.PRODUCTID = I.PRODUCTID

3. Cuando se borre un detalle de la orden, el producto que estaba pedido en la orden se


actualizara a descontinuado en la tabla products.

CREATE TRIGGER A3
ON [ORDER DETAILS]
FOR DELETE
AS
UPDATE PRODUCTS
SET DISCONTINUED = 1
FROM PRODUCTS AS P
INNER JOIN DELETED AS D
ON P.PRODUCTID = D.PRODUCTID

Probar:
DELETE FROM [ORDER DETAILS]
WHERE ORDERID = 10333 AND PRODUCTID = 1

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 182 -
Manual de SQL Server 2008 2012
4. Cuando se quiera actualizar el nombre de la compania del proveedor, no debe
permitirlo

ALTER TRIGGER A5
ON SUPPLIERS
FOR UPDATE
AS
IF UPDATE(COMPANYNAME)
BEGIN
RAISERROR ('NO PUEDE CAMBIAR EL NOMBRE DE LA COMPAÑIA',10,1)
ROLLBACK TRANSACTION
END

probar:

UPDATE SUPPLIERS
SET COMPANYNAME ='JUAN'
WHERE SUPPLIERID = 2

5. Crear una tabla historico que vaya guardando el nombre de la compania (actual nombre
y nuevo nombre) de los proveedores. Tabla: historico (id, actual, nuevo) el id es identity.

CREATE TRIGGER A6
ON SUPPLIERS
FOR UPDATE
AS
IF UPDATE(COMPANYNAME)
BEGIN
DECLARE @C_ACT VARCHAR(50)
DECLARE @C_NEW VARCHAR(50)

SELECT @C_ACT=COMPANYNAME FROM DELETED


SELECT @C_NEW=COMPANYNAME FROM INSERTED

INSERT INTO HISTORICO (ACTUAL,NUEVO)


VALUES (@C_ACT,@C_NEW)
END

Probarlo:

UPDATE SUPPLIERS
SET COMPANYNAME ='JUAN'
WHERE SUPPLIERID = 2

Estrada Aguilar, Karen Johana | BASE DE DATOS II. .


- 183 -

También podría gustarte