Sie sind auf Seite 1von 182

UNIVERSIDAD NACIONAL DE CAJAMARCA

FACULTAD DE INGENIERA

ESCUELA ACADMICO PROFESIONAL DE
INGENIERA DE SISTEMAS
Cajamarca, 2012

Manual de SQL Server 2008
CONCEPTOS Y EJERCICIOS EN SQL
Estrada Aguilar, Karen Johana

Manual de SQL Server 2008 2012

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

- 3 -

INTRODUCCIN............................................................................................................................. - 5 -
CAPTULO I .................................................................................................................................... - 6 -
CONCEPTOS BSICOS DE SQL ......................................................................................................... - 6 -
1.1. LENGUAJE ESTRUCTURADO DE CONSULTAS ........................................................... - 6 -
1.1.1. REQUERIMIENTOS Y CARACTERSTICAS........................................................................... - 6 -
1.2. INICIANDO SQL SERVER 2008 ......................................................................................... - 7 -
1.3. CREAR UNA NUEVA TABLA: ........................................................................................... - 12 -
1.4. HACER CONSULTAS ......................................................................................................... - 16 -
CAPITULO II ........................................................................................................................................ - 18 -
COMANDOS BSICOS 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 AGREGACIN ................................................................................................. - 21 -
C. USO DE ALIAS: .............................................................................................................................. - 23 -
2.1.3. WHERE ........................................................................................................................................ - 24 -
OPERADORES LGICOS ............................................................................................................ - 24 -
OPERADORES DE COMPARACIN .......................................................................................... - 24 -
CONCATENACIN 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 -
CAPTULO III ....................................................................................................................................... - 48 -
COMBINACIN DE TABLAS Y AGRUPACIN DE DATOS ..............- 48 -
3.1. JOIN ....................................................................................................................................... - 48 -
INNER JOIN: .................................................................................................................................................. - 48 -
LEFT JOIN: ..................................................................................................................................................... - 48 -
RIGTH JOIN: .................................................................................................................................................. - 48 -
UNION: ............................................................................................................................................................ - 48 -
3.2. GROUP BY ........................................................................................................................... - 49 -
Manual de SQL Server 2008 2012

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

- 4 -
3.3. HAVING ................................................................................................................................. - 50 -
EJERCICIOS ....................................................................................................................................... - 54 -
CAPTULO IV ...................................................................................................................................... - 73 -
MANIPULACIN 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 -
CAPTULO V ....................................................................................................................................... - 96 -
OTRAS SENTENCIAS ..........................................................................................................................- 96 -
5.1. SUBSTRING FUNCION ...................................................................................................... - 96 -
5.2. TRIM FUNCION ................................................................................................................... - 96 -
5.3. SENTENCIA CAST .............................................................................................................. - 97 -
EJEMPLOS .......................................................................................................................................... - 98 -
CAPTULO 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 -
PRCTICA ....................................................................................................................................... - 123 -
AGRUPAR EN REPORTING SERVICE ...................................................................................... - 138 -
ENLACES DE INFORMES ............................................................................................................ - 141 -
IMPLEMENTACIN DE REPORTING SERVICE EN IIS ......................................................... - 144 -
INFORMES INTEGRADOS ........................................................................................................... - 146 -
EJERCICIOS: .................................................................................................................................. - 148 -
PRACTICA CALIFICADA DE REPORTING SERVICES SQL SERVER 2008 ...................... - 154 -
ADMINISTRACIN DE USUARIOS ............................................................................................ - 163 -
CREACIN DE VISTAS ................................................................................................................ - 165 -
CREACIN DE UN GRUPO DE INICIOS DE SESIN EN UN STORE PROCEDURE ..... - 168 -
CREACIN DE UN GRUPO DE USUARIOS EN UN STORE PROCEDURE ...................... - 170 -
FUNCIONES .................................................................................................................................... - 172 -
RESTRICCIONES .......................................................................................................................... - 176 -
PROPUESTOS: .............................................................................................................................. - 178 -
TRIGRESS ....................................................................................................................................... - 182 -

Manual de SQL Server 2008 2012

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

- 5 -
El presente manual de SQL Server 2008 trata principalmente del manejo de datos a
travs 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 tambin es permitido establecer reglas o
condiciones que tengan que cumplir dichos datos para poder ser considerados como
registros resultantes.
La primera encarnacin 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 mrito 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 mayora
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 bsicos de SQL: Que tratar de definir a SQL, cmo iniciar el
programa, creacin de tablas, hacer consultas.

Comandos Bsicos de SQL: Las instrucciones SQL bsicas para
almacenamiento, recuperacin y manipulacin de datos en una base de datos
relacional.

Manipulacin de Tabla: Cmo 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 algn o algunos ejemplos.
Finalmente despus de cada captulo se mostrar los ejercicios desarrollados en la clase
de Base de Datos II.


Manual de SQL Server 2008 2012

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

- 6 -

CONCEPTOS BSICOS DE SQL

1.1. LENGUAJE ESTRUCTURADO DE CONSULTAS
El Lenguaje de Consulta Estructurado (SQLStructured 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 CARACTERSTICAS
SQL Server tiene reservadas determinadas palabras clave para su uso
exclusivo. Por ejemplo, si se usan las palabras clave DUMP o BACKUP
en una sesin 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 lnea se puede poner dos guiones
antes de ste (--). Ejm.:-- SQL es un lenguaje de programacin

Para crear bloques de varias lneas de comentarios, se coloca un
carcter de comentario (/*) al comienzo del texto del comentario, escriba
sus anotaciones y, despus, se concluye el comentario con un carcter
de cierre de comentario (*/).Ejm.:
/*Los comentarios son cadenas de texto que no se ejecutan,
colocadas en las instrucciones para describir la accin que
la instruccin est realizando*/
SQL Server no distingue las maysculas de las minsculas

Manual de SQL Server 2008 2012

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

- 7 -
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 direccin 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 instalacin
estndar.

Si no encontramos ste icono en el escritorio y no podemos ejecutar lo anterior
hacemos lo siguiente:

o Clic en el botn inicio.








Manual de SQL Server 2008 2012

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

- 8 -
o Clic en todos los programas.



o Clic en Microsoft SQL Server 2008.



Manual de SQL Server 2008 2012

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

- 9 -
o Y finalmente hacemos clic en SQL Server Management Studio


Esperamos que cargue

Manual de SQL Server 2008 2012

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

- 10 -
Luego realizamos la conexin con el servidor.


Como podemos ver; tenemos la opcin de elegir:







El Tipo de Servidor Nombre del Servidor (ha sido definido El tipo de Autentificacin
al que debemos conectarnos al momento de la instalacin)
Manual de SQL Server 2008 2012

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

- 11 -

Despus de elegir estos parmetros damos clic en conectar.

Finalmente vemos que la conexin ha sido realizada.


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

Manual de SQL Server 2008 2012

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

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

Manual de SQL Server 2008 2012

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

- 13 -
Hacemos anticlic (clic derecho) en la palabra Tablas y escogemos la opcin
Nueva Tabla.

Despus, iremos dando el nombre a cada campo que formarn las columnas de
la tabla (Cdigo,Paterno, Materno, Nombre, Sexo, Direccin).

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. Tambin
podremos definir si se aceptarn valores nulos o no.

Manual de SQL Server 2008 2012

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

- 14 -
En la parte baja al momento de escoger Tipo de datos estn las Propiedades
de columna o campo.


Podemos elegir la Clave principal (PK) haciendo anticlic en el nombre del
campo y eligiendo la opcin Establecer clave principal.


Manual de SQL Server 2008 2012

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

- 15 -
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 ms adelante los comandos que se deben
utilizar.

Manual de SQL Server 2008 2012

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

- 16 -
1.4. HACER CONSULTAS

Una consulta es una instruccin de solicitud para recuperarinformacin.Las
consultas pueden involucrar informacin de msde 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 opcin
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.
Manual de SQL Server 2008 2012

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

- 17 -
Cuando ya est escrita la consulta damos clic en el botn ejecutar o
presionamos la tecla de funcin F5.

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

Finalmente para guardar la consulta damos clic en el botn guardar, le
colocamos un nombre y damos un clic en guardar.

Cuando tenemos varios cdigos 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 estn
dentro de una misma ventana.
Manual de SQL Server 2008 2012

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

- 18 -
COMANDOS BSICOS 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 ejecucin 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 categoras:
DDL (Instrucciones del Lenguaje de definicin 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 quin 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 informacin.

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 ms
tablas.Se usa para listar los campos deseados del resultado de una
consulta. Es la sentencia bsica de SQL.
Manual de SQL Server 2008 2012

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

- 19 -
2.1.2. FROM

Esta instruccin se utiliza para obtener informacin de la base de datos,
nos permite sacar reportes y es el principal comando. La clusula FROM
especifica la tabla de la que se obtienen las filas y columnas. En la clusula
FROM podemos utilizar tablas derivadas, combinaciones y alias.
Ambas sentencias SELECT y FROM se utilizan juntas y su sintaxis ms
simple es la siguiente:





La cual, traducida al espaol, significa SELECCIONAR ciertos campos
DESDE cierta tabla. Por esta razn es que se denominan consultas de
seleccin.

Por ejemplo, si se quiere Obtener toda la informacin de los Productos;
se podra escribir cualquiera de las siguientes instrucciones:

Abreviando, pues se desea obtener todos los campos de la Tabla
Products.
SELECT *
FROM Products

El * despus 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 explcita, en la lista de campos, la referencia a la tabla:
SELECT Products.*
FROM Products

Es conveniente en muchos casos utilizar necesariamente la referencia explcita a
la tabla desde la cual se desea tomar las columnas en la lista de campos cuando
se extraen datos de ms de una tabla.
SINTAXIS
SELECT nombre_ campo
FROM nombre_tabla
Manual de SQL Server 2008 2012

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

- 20 -
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 despus de SELECT. Tambin
podramos explicitar que lo queremos todo, incluso con repeticiones,
poniendo ALL (opcin por defecto) en lugar de DISTINCT.
Por ejemplo, si se quiere obtener todas las filas de la tabla
customers, pero slo que se muestre el nombre de cada pas una
vez. Se escribe la siguiente instruccin:
SELECT DISTINCT country
FROM dbo.Customers
Al ejecutar la instruccin se muestra la siguiente tabla resultante:
Manual de SQL Server 2008 2012

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

- 21 -

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

Select top (3) FirstName
From dbo.Employees
Al ejecutar la instruccin se muestra la siguiente tabla resultante:

B. FUNCIONES DE AGREGACIN: Las funciones que calculan
promedios y sumas se llaman funciones de agregado. Cuando se
ejecuta una funcin 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.

Manual de SQL Server 2008 2012

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

- 22 -
La sintaxis para el uso de funciones de agregacin es:





El SQL nos ofrece las siguientes funciones de agregacin para
efectuar varias operaciones sobre los datos de una base de datos:

























Por ejemplo, si se quiere obtener el total de empleados que hay de la
tabla employees. Se escribe la siguiente instruccin:
Select COUNT(*)
From Employees
Al ejecutar la instruccin 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 instruccin:
Funcin Descripcin
COUNT Nos da el nmero total de filas seleccionadas de
un determinado campo incluyendo los valores
nulos
COUNT(*) Nos da el nmero 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 mnimo de una columna
MAX Nos da el valor mximo de una columna
AVG Calcula el valor medio de una columna
STDEV Desviacin estadstica de todos los valores
STDEVP Desviacin estadstica para la poblacin
VAR Varianza estadstica de todos los valores
VARP Varianza estadstica de todos los valores para la
poblacin
SINTAXIS
SELECT "tipo de funcin"("nombre_columna")
FROM "nombre_tabla"
Manual de SQL Server 2008 2012

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

- 23 -

Select sum(Quantity)
From [Order Details]

Al ejecutar la instruccin se muestra la siguiente tabla resultante:

Si se quiere obtener el mayor precio de los productos de la tabla
Products. Se escribe la siguiente instruccin:

Select max(UnitPrice)
From Products

Al ejecutar la instruccin se muestra la siguiente tabla resultante:

En general, las funciones de agregacin se aplican a una columna,
excepto la funcin de agregacin 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), slo contara 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 organizacin 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 clusula FROM.
Esto es conveniente cuando desea obtener informacin de dos tablas
separadas. La ventaja de utiliza un alias de tablas cuando realizamos
uniones es rpidamente 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"
Manual de SQL Server 2008 2012

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

- 24 -
Brevemente, ambos tipos de alias se colocan directamente despus
del elemento por el cual generan el alias, separados por un espacio en
blanco.
Por ejemplo, si se quiere obtener el mnimo precio de los productos
de la tabla Products, utilizando alias. Se escribe la siguiente
instruccin:

Select min(p.UnitPrice) as precio_Minimo
From Products as p

Al ejecutar la instruccin 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.
Despus de Clusula WHERE (donde) ir la(s) condicin(es) que deben
cumplir los registros. La sintaxis de SQL considerando esta sintaxis es:






Para definir las condiciones en la clusula WHERE, podemos utilizar
alguno de los operadores de los que dispone el SQL, que son los
siguientes:
OPERADORES DE COMPARACIN
= Igual
< Menor
> Mayor
<= Menor o igual
>= Mayor o igual
<> Diferente


OPERADORES LGICOS
NOT Para la negacin de
condiciones
AND Para la conjuncin de
condiciones
OR Para la disyuncin de
condiciones
SINTAXIS
SELECT "nombre_campo"
FROM "nombre_tabla"
WHERE "Condicin_Filtro"
Manual de SQL Server 2008 2012

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

- 25 -
Por ejemplo, Mostrar los productos de la categora 2
La instruccin sera de la siguiente manera; utilizando el operador de
comparacin 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 categora 5; cambiamos:
select*
fromProducts
whereCategoryID=5
o
select*
from[Order Details]
whereOrderID=10260

Para unir dos condiciones unimos con cualquier operador Lgico:




And/OrSINTAXIS
SELECT "nombre_campo"
FROM "nombre_tabla"
WHERE "condicin " {[AND|OR] "condicin "}
Manual de SQL Server 2008 2012

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

- 26 -
Ejemplo: Mostrar los Productos de la Categora 4 y 6.
select*
fromProducts
whereCategoryID=4 orCategoryID=6
Resultado de la consulta:

CONCATENACIN DE CADENAS

El operador de concatenacin 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:

Manual de SQL Server 2008 2012

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

- 27 -
IN

Verifica que una determinada expresin 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 instruccin es:







Ejemplo:Selecciona todos los campos de la tabla Productscuyos
campos sea de las Categoras 4 o 6 o 8 o 2

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

El resultado es el siguiente:

SINTAXIS
SELECT "nombre_campo"
FROM "nombre_tabla"
WHERE "nombre_campo" IN ('valor1', 'valor2', ...)
Manual de SQL Server 2008 2012

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

- 28 -
Ejemplo: Obtener todos los productos de los proveedores con nmero
3, 5, 8.

SELECT*
FROMProducts
WHERESupplierIDin(3,5,8)

Resultado de la consulta:



Ejemplos:

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

SELECTProductID,ProductID,UnitPrice
FROMProducts
WHEREUnitPrice>100



o Mostrar el nombre del producto, unidad, cdigo; adems los productos que
estn entre 30 y 60.

selectProductID,ProductName,UnitPrice
fromProducts
WhereUnitPrice>30 ANDUnitPrice<60
Manual de SQL Server 2008 2012

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

- 29 -

BETWEEN

Verifica que el resultado de una expresin se encuentre entre otros dos
valores. Debe haber un rango que el campo sea el mismo y adems un
operador sea >= y el otro <=.
La sintaxis de este predicado es:








o Ejemplo: Mostrar el nombre del producto, unidad, cdigo; adems los
productos que estn entre 30 y 60.

selectProductID,ProductName,UnitPrice
fromProducts
WhereUnitPricebetween 30 and 60
SINTAXIS
SELECT "nombre_campo"
FROM "nombre_tabla"
WHERE "nombre_campo" BETWEEN 'valor_mnimo' AND 'valor_mximo'
Manual de SQL Server 2008 2012

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

- 30 -

o Mostrar el nombre del producto, unidad de precio, cdigo, stock y la
categora, solo de aquellos que tienen un stock entre 0 y 10.
selectProductID,ProductName,UnitPrice,UnitsInStock,Cate
goryID
fromProducts
WhereUnitsInStockbetween 0 AND 10

Manual de SQL Server 2008 2012

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

- 31 -
o Mostrar el nombre del producto y su cdigo, 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
ningn 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 numrico) o blanco (que es un valor de carcter).

o Puede utilizar la condicin de bsqueda IS NOT NULL para obtener
las filas con valores conocidos en las columnas especificadas.
Por ejemplo, mostrar a los nombres de las compaas existentes de los
proveedores.

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

Manual de SQL Server 2008 2012

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

- 32 -
LIKE

LIKE es otra palabra clave que se utiliza en la clusula WHERE.
Bsicamente, LIKE le permite hacer una bsqueda basada en un patrn
en vez de especificar exactamente lo que se desea (como en IN) o
determinar un rango (como en BETWEEN). La sintaxis es la siguiente:







Ejemplos de uso de caracteres comodn
La tabla siguiente contiene ejemplos de uso de comodines con la
condicin de bsqueda LIKE.
















Ejemplo
En este ejemplo se obtienen las compaas de la tabla customers que
contengan la palabra "restaurant" en su nombre.
SELECT companyname
FROM customers
WHERE companyname LIKE '%Restaurant%'
Al ejecutar la instruccin se nos presenta la siguiente tabla resultante:

Expresin 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.
SINTAXIS
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "nombre_columna" LIKE {patrn}
Manual de SQL Server 2008 2012

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

- 33 -
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 instruccin se nos presenta la siguiente tabla resultante

YEAR MONTH DAY

Estas tres sentencias sirven para trabajar con fechas cmodamente, si
queremos saber los empleados que nacieron en el 1963 sera:

SELECT *
FROM Employees
WHERE YEAR(BirthDate)=1963

Para mes sera Month y para da 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:



Tambin se puede utilizar la clusula DATEPART(YYYY,Campo) o
DATEPART(MM,Campo) o DATEPART(DD,Campo)
Para saber las ordenes realizadas en el ao de 1996 hacemos:

SELECT *
FROM dbo.Orders
WHERE Datepart(yyyy,OrderDate)='1996'
Manual de SQL Server 2008 2012

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

- 34 -

2.1.4. ORDER BY

Es posible ordenar los registros devueltos por la sentencia SELECT
aadiendo a la instruccin la clusula ORDER BY, por defecto sale
ordenado en forma ascendente. La sintaxis en este caso es el siguiente:








o Mostrar el nombre del producto, unidad de precio, cdigo, stock y la
categora, 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
SINTAXIS
SELECT "nombre_campo"
FROM "nombre_tabla"
WHERE "condicin"
ORDER BY "nombre_campo" [ASC, DESC]

Manual de SQL Server 2008 2012

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

- 35 -

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 nmero de registros. Esta sentencia se gua
por la ordenacin.





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
SINTAXIS
Select top n * from tabla
Manual de SQL Server 2008 2012

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

- 36 -

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:

Manual de SQL Server 2008 2012

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

- 37 -
EJERCICIOS
Base de Datos II (20011-1)
Ing. De Sistemas FI- UNC
EJERCICIOS bsicos 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 compaa, alfabticamente.








select *
from dbo.Customers
order by ContactName
Manual de SQL Server 2008 2012

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

- 38 -
2. Seleccionar todos los campos de la tabla rdenes, ordenados por fecha de la orden,
Descendentemente.









select *
from dbo.Orders
order by OrderDate Desc
Manual de SQL Server 2008 2012

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

- 39 -
3. Seleccionar todos los campos de la tabla Detalle de la Orden, ordenada por
Cantidad Pedida, Ascendentemente.













select *
from [Order Details]
order by Quantity

Manual de SQL Server 2008 2012

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

- 40 -
4. Obtener todos los productos, cuyo nombre comiencen con la letra P y tienen un
precio unitario comprendido entre 10 y 120.








5. Obtener todos los clientes de los Pases de: USA, Francia y UK.









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


select *
from dbo.Customers
where Country in ('usa','francia','uk')
Manual de SQL Server 2008 2012

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

- 41 -
6. Obtener todos los productos descontinuados y sin stock, que pertenecen a las
categoras 1, 3, 4 y 7.









7. Obtener todas las rdenes hechas por el empleado con cdigo: 2, 5 y 7 en el ao
1996.








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


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

Manual de SQL Server 2008 2012

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

- 42 -
8. Seleccionar todos los clientes que cuentan con FAX.






9. Seleccionar todos los clientes que no cuentan con FAX, del Pas de USA.








select *
from dbo.Customers
where Fax is not null


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

Manual de SQL Server 2008 2012

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

- 43 -
10. Seleccionar todos los empleados que cuentan con un jefe.








11. Seleccionar todos los campos del cliente, cuya compaa empiecen con la letra de A
hasta la D y pertenezcan al pas de USA, ordenarlos por la direccin.









12. Seleccionar todos los campos del proveedor, cuya compaa no comience con las
letras de la B a la G, y pertenezcan al pas de UK, ordenarlos por nombre de la
compaa.










select*
from dbo.Employees
where ReportsTo is not null


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


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

Manual de SQL Server 2008 2012

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

- 44 -



13. Seleccionar los productos vigentes cuyos precios unitarios estn entre 35 y 250, sin
stock en almacn, pertenecientes a las categoras 1, 3, 4, 7 y 8, que son distribuidos
por los proveedores 2, 4, 6, 7 y 9.












14. Seleccionar todos los campos de los productos descontinuados, que pertenezcan a
los proveedores con cdigos: 1, 3, 7, 8 y 9, que tengan stock en almacn, y al
mismo tiempo que sus precios unitarios estn entre 39 y 190, ordenados por cdigo
de proveedor y precio unitario de manera ascendente.











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)


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

Manual de SQL Server 2008 2012

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

- 45 -
15. Seleccionar los 7 productos con precios ms caros, que cuenten con Stock en
almacn.










16. Seleccionar los 9 productos, con menos stock en almacn, que pertenezcan a la
categora 3, 5 y 8.











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


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

Manual de SQL Server 2008 2012

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

- 46 -
17. Seleccionar las rdenes de compra, realizadas por el empleado con cdigo entre 2 y
el 5, adems de los clientes con cdigos que comienzan con las letras de la A hasta
la G, del 31 de Julio de cualquier ao.









18. Seleccionar las rdenes de compra, realizadas por el empleado con cdigo 3, de
cualquier ao pero slo de los ltimos 5 meses (Agosto - Diciembre).
19.








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'


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

Manual de SQL Server 2008 2012

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

- 47 -
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

Manual de SQL Server 2008 2012

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

- 48 -
COMBINACIN DE TABLAS Y
AGRUPACIN DE DATOS
3.1. JOIN

Para realizar uniones en SQL se requieren mucho de los elementos que ya hemos
visto. SQL tambin proporciona varios mecanismos para reunir relaciones,
incluyendo reuniones condicionales y reuniones naturales, as como varias formas
de reunin externa. Estas operaciones adicionales se usan a menudo como
subconsultas dentro de la clusula from.
Seleccin de columnas especficas de varias tablas
La palabra clave JOIN especifica qu tablas se van a combinar y cmo
La palabra clave ON especifica la condicin de combinacin
Consultas de dos o ms tablas para producir un conjunto de resultados
Use claves principales y externas como condiciones de combinacin
Para combinar tablas, utilice columnas comunes a las tablas especificadas
INNER JOIN: Devuelve solo los registros de la combinacin de ambas tablas de
en los hay coincidencia de acuerdo a la expresin vinculante.
LEFT JOIN: Devuelve los registros de la combinacin de ambas tablas en los
cuales hay coincidencia de acuerdo a la expresin vinculante e incluye adems a
todos los registros de la primera tabla que no tengan pareja en la segunda.
RIGTH JOIN: Devuelve los registros de la combinacin de ambas tablas en los
cuales hay coincidencia de acuerdo a la expresin vinculante e incluye adems 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 nmero de columnas
Manual de SQL Server 2008 2012

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

- 49 -
El mismo orden de columnas en la lista de seleccin
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 clusula GROUP BY. Utilice la clusula HAVING con la
clusula GROUP BY para restringir los grupos de filas devueltas en el conjunto de
resultados.

El uso de la clusula GROUP BY no garantiza que se vaya a usar ningn criterio
de ordenacin. Si desea que los resultados se ordenen, debe incluir la clusula
ORDER BY.








SINTAXIS
SELECT "nombre_columna 1",
SUM("nombre_columna 2")
FROM "nombre_tabla"
GROUP BY "nombre_columna 1"
Manual de SQL Server 2008 2012

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

- 50 -
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
clusula HAVING.
Su sintaxis es:








Utilice la clusula HAVING en columnas o expresiones para establecer
condiciones en los grupos incluidos en un conjunto de resultados. La clusula
HAVING establece condiciones en la clusula GROUP BY de una forma muy
similar a como interacta la clusula WHERE con la instruccin SELECT.
Cuando utilice la clusula HAVING, considere los hechos e instrucciones
siguientes:
Utilice la clusula HAVING slo con la clusula GROUP BY para restringir
los agrupamientos. El uso de la clusula HAVING sin la clusula GROUP
BY no tiene sentido.
En una clusula HAVING puede haber hasta 128 condiciones. Cuando
utilice varias condiciones, tiene que combinarlas con operadores lgicos
(AND, OR o NOT).
Puede hacer referencia a cualquiera de las columnas que aparezcan en la
lista de seleccin.
No utilice la palabra clave ALL con la clusula HAVING, porque la clusula
HAVING pasa por alto la palabra clave ALL y slo devuelve los grupos que
cumplen la clusula HAVING.
Por ejemplo:
Mostrar la cantidad de rdenes hechas por cada empleado pero que sean mayores
que 100.
Se escribir la siguiente instruccin:
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
SINTAXIS
SELECT "nombre_columna 1",
SUM("nombre_columna 2")
FROM "nombre_tabla"
GROUP BY "nombre_columna 1"
HAVING (condicin de funcin aritmtica)
Manual de SQL Server 2008 2012

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

- 51 -

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
Manual de SQL Server 2008 2012

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

- 52 -

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

Manual de SQL Server 2008 2012

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

- 53 -
Ejercicio 5
selectcount(*)astotal,s.CompanyName
fromdbo.Productsaspinnerjoindbo.Suppliersass
onp.SupplierID=s.SupplierID
whereUnitsInStock!='0'andDiscontinued='0'
groupbys.CompanyName



Manual de SQL Server 2008 2012

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

- 54 -
EJERCICIOS
21. Mostrar el cdigo de categora, nombre de categora, cdigo 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
Manual de SQL Server 2008 2012

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

- 55 -
22. Mostrar el nmero de la orden fecha de la orden, cdigo del producto, cantidad del precio y
flete de la orden.








23. Mostrar: cdigo, nombre, ciudad y pas del proveedor. Cdigo, nombre, precio, stock del
producto.







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

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
Manual de SQL Server 2008 2012

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

- 56 -



24. Cdigo y nombre de la categora, cdigo, nombre, precio y stock de los productos, cdigo,
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

Manual de SQL Server 2008 2012

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

- 57 -

25. Mostrar nmero de la orden, fecha, nombre del producto, nombre de la categora, nombre
del producto.











26. Mostrar nmero de la orden, fecha, nombre y direccin del cliente, nombre y apellido del
empleado, nombre del producto comprado y nombre del proveedor.










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


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
Manual de SQL Server 2008 2012

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

- 58 -




27. Modificar el ejercicio 1: slo los productos de las categoras 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)
Manual de SQL Server 2008 2012

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

- 59 -



28. Modificar el ejercicio 2: slo 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'
Manual de SQL Server 2008 2012

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

- 60 -
29. Modificar el ejercicio 3: slo los productos con stock 0.







30. Modificar el ejercicio 4: slo con precios entre 50 y 100.









31. Modificar el ejercicio 5: slo del primer trimestre del ao 1996.












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'






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

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'
Manual de SQL Server 2008 2012

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

- 61 -
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 mximo y mnimo precio de los productos por categora, mostrar el
nombre de la categora.









33. Visualizar el mximo y mnimo precio de los productos por proveedor, mostrar el
nombre de la compaa proveedora.







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

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

Manual de SQL Server 2008 2012

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

- 62 -



34. Seleccionar las categoras que tengan ms de 5 productos. Mostrar el nombre de la
categora y nmero 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

Manual de SQL Server 2008 2012

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

- 63 -
35. Calcular cuntos clientes existen en cada Pas.





36. Calcular cuntos clientes existen en cada Ciudad.






select Country,count(CompanyName) as total_clientes
from Customers
group by Country

select City,count(CompanyName) as total_clientes
from Customers
group by City
Manual de SQL Server 2008 2012

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

- 64 -

37. Calcular cuntos proveedores existen en cada Ciudad y Pas.






38. Calcular el stock total de los productos por cada categora. Mostrar el nombre de la
categora y el stock por categora.









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

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

Manual de SQL Server 2008 2012

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

- 65 -
39. Calcular el stock total de los productos por categora. Mostrar el nombre el nombre
de la categora y el stock por categora. Solamente las categoras 2,5, y 8.








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










41. Mostrar el nmero de rdenes realizadas de Cada uno de los Clientes por ao.






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

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'

select distinct c.CompanyName,COUNT(*)as total_ordenes,year(o.OrderDate)
as ao
from Orders as o
inner join Customers as c on o.CustomerID=c.CustomerID
group by c.CompanyName, year(o.OrderDate)

Manual de SQL Server 2008 2012

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

- 66 -


42. Mostrar el nmero de rdenes realizadas de Cada uno de los Empleados en cada
ao.







select distinct e.FirstName,COUNT(*)as
total_ordenes,year(o.OrderDate) as ao
from Orders as o
inner join Employees as e on o.EmployeeID=e.EmployeeID
group by e.FirstName, year(o.OrderDate)

Manual de SQL Server 2008 2012

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

- 67 -

43. Mostrar el nmero de rdenes realizadas de Cada uno de los Clientes por cada mes
y ao.








44. Contar el nmero de rdenes que se han realizado por aos y meses.






select distinct c.CompanyName,COUNT(*)as
total_ordenes,year(o.OrderDate) as ao,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)

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

Manual de SQL Server 2008 2012

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

- 68 -


45. Seleccionar el nombre de la compaa del cliente, el cdigo de la orden de compra,
la fecha de la orden de compra, cdigo del producto, cantidad pedida del producto,
nombre del producto, el nombre de la compaa 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

Manual de SQL Server 2008 2012

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

- 69 -
46. Seleccionar el nombre de la compaa del cliente, nombre del contacto, el cdigo de
la orden de compra, la fecha de la orden de compra, cdigo del producto, cantidad
pedida del producto, nombre del producto y el nombre de la compaa Proveedora,
usar join. Solamente las compaas proveedoras que comienzan con la letra de la A
hasta la letra G, adems 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

Manual de SQL Server 2008 2012

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

- 70 -
47. Seleccionar cuantos proveedores tengo en cada pas, considerando solo a los
nombres de los proveedores que comiencen con la letra E hasta la letra P, adems
de mostrar slo los pases donde tenga ms de 2 proveedores.







48. Obtener el nmero de productos, por categora. Mostrando el nombre de la
categora, el nombre del producto, y el total de productos por categora, solamente
de las categoras 3, 5 y 8. Ordenar por el nombre de la categora.









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

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

Manual de SQL Server 2008 2012

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

- 71 -
49. Mostrar el nmero de la orden, la fecha de la orden y el total en soles de cada
orden.






50. Mostrar el nombre de Producto y en cuntas rdenes de compra se encuentra.1




select OrderID, OrderDate, Freight=Freight*2.87
from dbo.Orders


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
Manual de SQL Server 2008 2012

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

- 72 -






Manual de SQL Server 2008 2012

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

- 73 -
MANIPULACIN DE TABLAS

4.1. INSERT INTO
En los programas de mantenimiento de base de datos es frecuente requerir
instrucciones que hagan posible la insercin de registros en las tablas. Estas
instrucciones hacen uso de la clusula INSERT del lenguaje SQL. En su forma
ms elemental, la instruccin tendr la siguiente sintaxis.






Puede insertar datos mediante una transaccin si especifica un conjunto de
valores o inserta los resultados de una instruccin 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 instruccin INSERT con la clusula 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 transaccin INSERT
fallar.

Utilice listaColumnas para especificar las columnas en las que se va a
almacenar cada valor especificado. listaColumnas debe especificarse entre
parntesis y delimitarse con comas. Si especifica valores para todas las
columnas, listaColumnas es opcional.

Para especificar los valores que desea insertar, utilice la clusula VALUES.
Esta clusula 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 carcter y las
fechas deben encerrarse entre comillas simples.



SINTAXIS
INSERT INTO "nombre_tabla" ("colonne 1", "colonne 2", ...)
valorS ("valor 1", "valor 2", ...)

Manual de SQL Server 2008 2012

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

- 74 -
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



Manual de SQL Server 2008 2012

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

- 75 -
4.2. UPDATE
El lenguaje SQL server permite escribir instrucciones que hagan posible que esas
actualizaciones se realicen rpidamente, para ello debe emplear la sentencia
UPDATE. En su forma ms elemental Update tendr la siguiente sintaxis.






La instruccin 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 clusula WHERE.
Especifique los nuevos valores con la clusula 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 restriccin de
integridad. En ese caso, no se producirn los cambios y la instruccin se
deshar.
Slo es posible cambiar los datos de una tabla cada vez.
Puede establecer una expresin en una o varias columnas o variables. Por
ejemplo, una expresin puede ser un clculo (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

SINTAXIS
UPDATE "nombre_tabla"
SET "colonne 1" = [nuevo valor]
WHERE {condition}
Manual de SQL Server 2008 2012

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

- 76 -
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

Manual de SQL Server 2008 2012

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

- 77 -


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


Ejemplo 6:
updateCustomers
setCustomerID=('UNCFNI')
whereCustomerID=('ALFKI')
select*
fromCustomers
Manual de SQL Server 2008 2012

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

- 78 -

4.3. DELETE FROM
Esta sentencia permite eliminar registros de las tablas. La sintaxis ms simple de
esta sentencia es la siguiente:





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


Ejemplo 1:
deletefromProducts
whereDiscontinued=1
SINTAXIS
DELETE FROM "nombre_tabla"
WHERE {condicin}
Manual de SQL Server 2008 2012

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

- 79 -

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 ms grande.
o Consulta : Seleccionar los productos cuyos precios sean mayores al
promedio de todos los productos
select*
fromProducts
whereUnitPrice>(selectAVG(UnitPrice)fromProducts)
Manual de SQL Server 2008 2012

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

- 80 -

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


4.5. PROCEDIMIENTOS ALMACENADOS (STORE PROCEDURE)
Un procedimiento almacenado es una coleccin con nombre de instrucciones de
Transact-SQL que se almacena en el servidor. Los procedimientos almacenados
son un mtodo para encapsular tareas repetitivas. Admiten variables declaradas
por el usuario, ejecucin condicional y otras caractersticas de programacin muy
eficaces.






Para alterar o modificar un procedimiento utilizamos ALTER en reemplazo de
CREATE

EXEC Ejecuta una funcin definida por el usuario, un procedimiento de sistema, un
procedimiento almacenado definido por el usuario o un procedimiento almacenado
extendidoControla la ejecucin de una cadena de caracteres dentro de un lote de
Transact-SQL
SINTAXIS
Create proc Nombre_Procedimiento
--Declaracion de variables
As
--Cuerpo de la instruccin
Manual de SQL Server 2008 2012

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

- 81 -

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

Manual de SQL Server 2008 2012

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

- 82 -
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
Manual de SQL Server 2008 2012

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

- 83 -


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
Manual de SQL Server 2008 2012

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

- 84 -




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 instruccin
DECLARE; se le asigna un valor inicial en una instruccin SET o SELECT y,
despus, se utiliza en la instruccin, programa por lotes o procedimiento en el que
se declar. Una variable local se identifica mediante un smbolo arroba (@) que
precede a su nombre mientras que una variable global incluye dos smbolos arroba
delante de su nombre.

Manual de SQL Server 2008 2012

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

- 85 -
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 ao

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

Manual de SQL Server 2008 2012

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

- 86 -


mas_vendidos 3,1997

3. productos no vendidos por ao

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



Manual de SQL Server 2008 2012

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

- 87 -
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%'


Manual de SQL Server 2008 2012

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

- 88 -
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)
Manual de SQL Server 2008 2012

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

- 89 -

dias_trans 10



8. En un ao 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)

Manual de SQL Server 2008 2012

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

- 90 -
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'



Manual de SQL Server 2008 2012

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

- 91 -
Ms 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'
Manual de SQL Server 2008 2012

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

- 92 -

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
Manual de SQL Server 2008 2012

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

- 93 -
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))
Manual de SQL Server 2008 2012

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

- 94 -
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

Manual de SQL Server 2008 2012

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

- 95 -
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
Manual de SQL Server 2008 2012

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

- 96 -
OTRAS SENTENCIAS

5.1. SUBSTRING FUNCION

La funcin de subcadena en SQL se utiliza para tomar una parte de los datos
almacenados. Esta funcin tiene diferentes nombres segn las diferentes bases de
datos:
MySQL: SUBSTR(), SUBSTRING()
Oracle: SUBSTR()
SQL Server: SUBSTRING()
Los usos ms frecuentes son los siguientes (utilizaremos SUBSTR() aqu):
SUBSTR(str,pos): Selecciona todos los caracteres de <str> comenzando con
posicin <pos>. Note que esta sintaxis no es compatible en SQL Server.
SUBSTR(str,pos,len): Comienza con el carcter <pos> en la cadena <str> y
selecciona los siguientes caracteres <len>.
5.2. TRIM FUNCION

La funcin TRIM en SQL se utiliza para eliminar un prefijo o sufijo determinado de
una cadena. El patrn ms comn a eliminarse son los espacios en blanco. Esta
funcin tiene diferentes nombres segn las diferentes bases de datos:
MySQL: TRIM(), RTRIM(), LTRIM()
Oracle: RTRIM(), LTRIM()
SQL Server: RTRIM(), LTRIM()
La sintaxis para estas funciones de reduccin es:
TRIM([[LOCATION] [remstr] FROM ] str): [LOCATION] puede ser LDER,
REMANENTE, o AMBAS. Esta funcin se deshace del patrn [remstr] tanto para el
comienzo de la cadena como para el final, o para ambos. Si no se especifica
ningn [remstr], los espacios en blanco se eliminarn.
LTRIM(str): Elimina todos los espacios en blanco del comienzo de la cadena.
Manual de SQL Server 2008 2012

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

- 97 -
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 sera 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 sera:
Select Jugador,goles
from jugadores
order by goles desc

Manual de SQL Server 2008 2012

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

- 98 -
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

Manual de SQL Server 2008 2012

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

- 99 -
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
















Manual de SQL Server 2008 2012

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

- 100 -


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 direccin 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 instalacin estndar.


Manual de SQL Server 2008 2012

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

- 101 -
Si no encontramos ste icono en el escritorio y no podemos ejecutar lo anterior
hacemos lo siguiente:

o Clic en el botn 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

Manual de SQL Server 2008 2012

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

- 102 -
Esperamos que cargue

Podemos observar la pgina de inicio de Microsoft Visual Studio 2008.

6.2. CREAR UN NUEVO PROYECTO DE REPORTES

Hacemos clic en Archivo luego en Nuevo, finalmente Proyecto.

Manual de SQL Server 2008 2012

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

- 103 -
Se abre el cuadro de dilogo 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.
Manual de SQL Server 2008 2012

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

- 104 -

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 dilogo Propiedades de origen de datos compartidos y para crear
una cadena de conexin hacemos clic en editar.

Manual de SQL Server 2008 2012

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

- 105 -
En el cuadro propiedades de la conexin, en el nombre del servidor escribimos .
(punto), escogemos la base de datos northwind; finalmente aceptamos.


En la siguiente ventana tambin elegimos aceptar.



Se cre el origen de datos compartidos

Manual de SQL Server 2008 2012

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

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

Manual de SQL Server 2008 2012

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

- 107 -
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 dilogo Propiedades del conjunto de datos, en origen de datos
hacemos clic en Nueva.

Se abre el cuadro del origen de datos, como ya habamos creado un origen de datos
compartido, seleccionamos la opcin Utilizar referencia de origen de datos
compartidos; en este caso seleccionamos DataSource1. Finalmente aceptamos.

Manual de SQL Server 2008 2012

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

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

Manual de SQL Server 2008 2012

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

- 109 -
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 diseo
Por ejemplo el elemento Matriz.

Por ejemplo el elemento Grfico, donde se puede elegir el grfico del cuadro
Seleccin tipo de grfico y aceptamos, logrando ver el grfico.

Manual de SQL Server 2008 2012

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

- 110 -







Tambin podemos utilizar el elemento Informe integrado para poder visualizar
ms de un reporte.



Otro elemento es Tabla muy utilizado en muchos reportes.


Manual de SQL Server 2008 2012

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

- 111 -
y, a continuacin, arrastramos campos de conjunto de datos al elemento; que puede
ser de tres maneras:

Arrastrando desde Datos de Informe al rea de diseo.



Eligiendo en las filas los datos:



Si ya no hay ms columnas arrastramos los datos junto a la ltima columna.


Manual de SQL Server 2008 2012

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

- 112 -
Observamos el reporte en manera de diseo con todos los datos pedidos.


En el mismo modo de diseo 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.

Manual de SQL Server 2008 2012

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

- 113 -
Hacemos clic en Vista Previa, esperamos hasta que se genere el informe.




Despus que se haya generado el informe Podemos presentar ya el informe.

Manual de SQL Server 2008 2012

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

- 114 -
EJERCICIOS

CREAR UN ORIGEN DE DATOS COMPARTIDO. Crear una sola vez la conexin
para todos los informes.
1. Crear el informe (En Visual Studio):
Mostrar en un informe que contenga: ProductName, UnitPrice, UnitsInStock,
CategoryName
Cdigo en SQL:



Reporting services:
En modo de diseo:

En modo de vista previa (Informe final):


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
Manual de SQL Server 2008 2012

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

- 115 -
2. Crear un reporte para mostrar el Nombre del producto, el precio del producto, el
stock y la categora; deber ser filtrado por categora.
Cdigo en SQL:







Reporting Service:
Para dar los valores a la categora debemos agregar un nuevo conjunto de datos
(dataset2). En esta ocasin hacemos una consulta de tipo Texto.

Para darle los valores de al parmetros damos anti clic en el parmetro y
escogemos Propiedades del parmetro.


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
Manual de SQL Server 2008 2012

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

- 116 -
En Propiedades de parmetro de informe, en la parte general llenamos lo que se
nos pide: Pedir datos, Tipo de datos, etc.


En valores disponibles: Seleccionamos la opcin Obtener valores de una consulta,
en conjunto de datos elegimos DataSet2.



Manual de SQL Server 2008 2012

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

- 117 -
En Campo de valor seleccionamos CategoryId y en Campo de etiqueta
seleccionamos Categorianame.



En modo de diseo:


En modo de vista previa:

Manual de SQL Server 2008 2012

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

- 118 -
Informe final de la categora 1:

3. Crear un reporte usando reporting service que muestre el nombre del producto, el
nombre de la compaa del proveedor, precio, seleccionar el nombre de la
empresa y mostrar los productos del proveedor seleccionado.
Cdigo 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
Manual de SQL Server 2008 2012

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

- 119 -
Reporting Services:
En modo de diseo:

En modo de vista previa:

Informe final:


Manual de SQL Server 2008 2012

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

- 120 -
4. Mostrar el nmero de productos vendidos en cada mes por cada empleado.
Cdigo en SQL:










Reporting Services:
En modo de diseo:

En modo de vista previa:



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
Manual de SQL Server 2008 2012

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

- 121 -
Informe final:


5. Mostrar el nombre del cliente, nombre del empleado, nmero de la orden, fecha de
la orden, nombre del proveedor, filtrar por el empleado que hizo la orden.
Cdigo 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
Manual de SQL Server 2008 2012

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

- 122 -
Reporting Services:
En modo de diseo:

En modo de vista previa:

Informe final:

Manual de SQL Server 2008 2012

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

- 123 -
PRCTICA


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, adems el nombre del proveedor.
Mostrar el nombre del cliente en un Combo box e DROP DOWN para filtrar la informacin.
Cdigo en SQL:












Reporting Services:
En modo de diseo:





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
Manual de SQL Server 2008 2012

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

- 124 -
En modo de vista previa:

Informe final:

Manual de SQL Server 2008 2012

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

- 125 -


2.
Precio
10
y
30




Cdigo en SQL:












Reporting Services:
En modo de diseo:


Productoname Unitprice Categoryname companyname

Proveedor



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
Manual de SQL Server 2008 2012

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

- 126 -
En modo de vista previa:

Informe final:


Manual de SQL Server 2008 2012

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

- 127 -
3. Proveedores (mostrar
companyname)
Categora (mostrar categoryname)
Productname Categoryname Companyname unitsinstock


Cdigo en SQL:










Reporting Services:
En modo de diseo:





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
as
select SupplierID,CompanyName
from Suppliers
order by SupplierID


create proc categorias
as
select CategoryID,CategoryName
from Categories
order by CategoryID

Manual de SQL Server 2008 2012

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

- 128 -
En modo de vista previa:

Informe final:


4. Mostar en un grfico y en una tabla el nmero de productos por categoras


2 2
3
5
0
1
2
3
4
5
6
Categora A Categora B Categora C Categora D
Productos
Manual de SQL Server 2008 2012

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

- 129 -
Cdigo en SQL:




Reporting Services:
En modo de diseo:


En modo de vista previa (Informe final):


create proc TOT_PROD
as
select CategoryID,count(QuantityPerUnit) as total
from Products
group by CategoryIDwhere E.EmployeeID=@e
Manual de SQL Server 2008 2012

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

- 130 -
5. Ao (consulta de aos a la bd) (distint)(matriz) (employ,orde)
Meses
1 2 3 4 12
Juan Torres
Pedro Len
Ana Daz
Mara Huamn
Empleados (Nombre y apellidos)
Numero de rdenes realizadas en un mes del ao seleccionado
Cdigo en SQL:










Reporting Services:
En modo de diseo:





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)
Manual de SQL Server 2008 2012

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

- 131 -
En modo de vista previa:

Informe final:


6. Mes Ao

0
1
2
3
4
5
6
Emp 1 Emp 2 Emp 3 Emp 4
N

m
e
r
o

d
e

r
d
e
n
e
s

r
e
a
l
i
z
a
d
a
s

Total de rdenes
Manual de SQL Server 2008 2012

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

- 132 -
Cdigo en SQL:











Reporting Services:
En modo de diseo:





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
as
select distinct YEAR(OrderDate)
from Orders
order by YEAR(OrderDate)


create proc mese
as
select distinct MONTH(OrderDate)
from Orders
order by MONTH(OrderDate)
Cdigo 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")))))))
)
Manual de SQL Server 2008 2012

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

- 133 -
En modo de vista previa:

Informe final:


Manual de SQL Server 2008 2012

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

- 134 -
7. Empleados (nombres y apellidos del empleado)



Cdigo en SQL:











Reporting Services:
En modo de diseo:

0
1
2
3
4
5
6
M
o
n
t
o

T
o
t
a
l


V
e
n
d
i
d
o

Monto total vendido en cada
ao por un epleado
Aos

create proc empleado
@nom nvarchar (40)
as
select distinct year(OrderDate) as ao, 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
Manual de SQL Server 2008 2012

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

- 135 -

En modo de vista previa:

Informe final:

Manual de SQL Server 2008 2012

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

- 136 -
8.
ProductName UnitPrice UnitInStock
0
10
2
4
35

Cdigo en SQL:



Reporting Services:
En modo de diseo:


En modo de vista previa:


create proc Stock_cero
as
select ProductName,UnitPrice,UnitsInStock
from Products
order by ProductName
Cdigo para el color de texto en Stock
=IIf(Fields!UnitsInStock.Value=0,
"Red","Blue")

El texto con stock 0 sale con color rojo y
con stock mayor a 0 con azul.
Manual de SQL Server 2008 2012

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

- 137 -
9.
ProductName UnitPrice Discontinued


Cdigo en SQL:




Reporting Services:
En modo de diseo:


En modo de vista previa:


create proc D_V
as
select ProductName,UnitPrice,Discontinued
from Products
order by ProductName
Cdigo para el texto de mostrar Discontinuado
o Vigente
=iif(Fields!Discontinued.Value="True
","Discontinuado","Vigente")
Mostrar: Discontinuado o vigente
Manual de SQL Server 2008 2012

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

- 138 -
AGRUPAR EN REPORTING SERVICE
Tenemos la siguiente consulta en modo de diseo:


Que en modo de Vista previa se muestra as:


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


Manual de SQL Server 2008 2012

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

- 139 -
Seleccionamos el campo por el que vamos a agrupar, tambin seleccionamos
Agregar encabezado de grupo, como tambin 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 opcin ocultar, selecionamos la
visualizacin se puede activar Finalmente aceptamos:

Manual de SQL Server 2008 2012

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

- 140 -
En vista previa se muestra as:

Tambin se puede hacer una suma total por cada grupo de al final.





Manual de SQL Server 2008 2012

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

- 141 -
ENLACES DE INFORMES
Tenemos un primer in forme
o Modo diseo.

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:


Manual de SQL Server 2008 2012

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

- 142 -

En el cuadro de Propiedades de Cuadro de Texto haciendo clic en accin, en
cambiar las opciones de hipervnculos seleccionamos Ir al informe.

Seleccionamos el informe al que vamos a ir:


Manual de SQL Server 2008 2012

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

- 143 -

Al agregar un parmetro debemos seleccionar lo siguiente:

Cuando hacemos clic en una de las celdas, se abrir el siguiente informe enlazado
a ste al pasarle el parmetro.


Manual de SQL Server 2008 2012

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

- 144 -
IMPLEMENTACIN 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 clculos
De un informe llamar a otro pasar un parmetro (mostrar por categora)
Generar(2 opcin?) ASP
LocalhostURL donde va direccin de web donde cargar
Exportar archivo csv
Iniciopcherramientas Administrativasiis puesto 80
Podemos hacer lo siguiente:
Clic en generar, luego en generar [nombre del informe]


Anti clic en el nombre del informe y propiedades:

Manual de SQL Server 2008 2012

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

- 145 -
Escribimos la pgina http://localhost/reportserver:

Implementar el informe:

Copiamos el URL que aparece en la generacin:

Abrimos en el internet explore:

Manual de SQL Server 2008 2012

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

- 146 -
INFORMES INTEGRADOS
Tenemos dos in formes:



Seleccionamos el elemento Informe integrado y arrastramos dos al rea:


Manual de SQL Server 2008 2012

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

- 147 -
Hacemos lo siguiente para poner a los diferentes informes en los informes integrados.

Obtenemos lo siguiente:


Manual de SQL Server 2008 2012

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

- 148 -
EJERCICIOS:
1. Expresin calcule los de categora 1 salga un campo descuento.
Mostrar el
+CategoryName
ProductName UnitPrice CategoryId Descuento % Descuento S/.
A
B
C
+CategoryName
Descuento:
Cat 110% Cat 430%
Cat 215% Else0%
Cat 323%
Cdigo en SQL:



Reporting Services:
En modo de diseo:














select CategoryName,ProductName,UnitPrice,c.CategoryID
from Products as p inner join Categories as c on p.CategoryID=p.CategoryID
order by c.CategoryID
Cdigo para el
descuento en
porcentajes
=IIf(Fields!Category
ID.Value=1,"10%",IIf
(Fields!CategoryID.V
alue=2,"15%",IIf(Fie
lds!CategoryID.Value
=3,"23%",IIf(Fields!
CategoryID.Value=4,"
30%","0%"))))
Cdigo para el descuento en
porcentajes
=IIf(Fields!CategoryID.Value=
1,Fields!UnitPrice.Value*0.1,
IIf(Fields!CategoryID.Value=2
,Fields!UnitPrice.Value*0.15,
IIf(Fields!CategoryID.Value=3
,Fields!UnitPrice.Value*0.23,
IIf(Fields!CategoryID.Value=4
,Fields!UnitPrice.Value*0.3,"
0"))))
Manual de SQL Server 2008 2012

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

- 149 -
En modo de vista previa:

Informe la categora 4:

2.
Informe x Informe y





Cdigo en SQL:



LISTA DE EMPLEADOS
CDIGO NOMBRES Y
APELLIDOS
XXXXX

XXXXXX
Aos Ventas
Totales


0
50
100
2008 2009 2010 2011

select employeeid, FirstName+' '+LastName as Nombre
from Employees
Manual de SQL Server 2008 2012

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

- 150 -
Reporting Services:
En modo de diseo:


En modo de vista previa:

Cdigo 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
Manual de SQL Server 2008 2012

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

- 151 -
Reporting Services:
En modo de diseo:


En modo de vista previa:


Manual de SQL Server 2008 2012

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

- 152 -
Informes Integrados:
Reporting Services:
En modo de diseo:


En modo de vista previa:

3. +HP(CompayName-Suppliers)
ProductId ProductName UnitPrice UnitInStock

+IBM
Cdigo en SQL:




select CompanyName, productId, productname,
UnitsInStock
from Suppliers as s inner join Products as p
on s.SupplierID=p.SupplierID
Manual de SQL Server 2008 2012

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

- 153 -
Reporting Services:
En modo de diseo:


En modo de vista previa:

Informe final:

Manual de SQL Server 2008 2012

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

- 154 -
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, Cdigo del Producto, Nombre del
Producto, nombre de la categora y el nombre de la compaa proveedora.
Cdigo en SQL:





Reporting Services:




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
Manual de SQL Server 2008 2012

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

- 155 -
2. Crear un Grafico que muestre el Numero de productos pedidos en cada categora
por cada ao. Adicionalmente al costado del grafico debe salir una tabla con los
mismos datos.
Cdigo en SQL:






Reporting Services:



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)

Manual de SQL Server 2008 2012

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

- 156 -

3. Crear un Grafico que muestre los aos, los empleados y el Monto total ingresado
por los pedidos. Filtrar por aos que se mostrara desde una lista desplegable.
Cdigo 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
Manual de SQL Server 2008 2012

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

- 157 -
Reporting Services:


4. Crear un Grafico que muestre los aos, 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 compaa del
cliente.
Cdigo 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)
Manual de SQL Server 2008 2012

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

- 158 -





Reporting Services:



select CompanyName
from Customers
order by CompanyName

Manual de SQL Server 2008 2012

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

- 159 -
5. En una matriz mostrar los clientes (filas), los meses (columnas) y en la
interseccin el numero de productos pedidos, solo considerar los productos
vigentes.
Cdigo en SQL:






Reporting Services:




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)
Manual de SQL Server 2008 2012

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

- 160 -
6. En una matriz mostrar los aos (filas), los meses (columnas) y en la interseccin el
monto vendido. Filtrar por empleados, mostrando en una lista desplegable el
Nombre y Apellido de los Empleados.
Cdigo en SQL:









Reporting Services:




create proc reports6
@e int
as
select CompanyName,year(OrderDate) as ao, 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

Manual de SQL Server 2008 2012

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

- 161 -
7. Mostrar el nombre del producto, nombre de la categora y nombre de la empresa
proveedora. Mostrar toda la fila de un registro en color amarillo si son de las
categoras 1 y 2, en color verde las categoras 3 y 4, en color azul las categoras 5
y 6, y en color rojo el resto de categoras.
Cdigo en SQL:





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



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
Manual de SQL Server 2008 2012

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

- 162 -
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, Cdigo 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
Cdigo en SQL:





Reporting Services:





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
Manual de SQL Server 2008 2012

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

- 163 -
ADMINISTRACIN DE USUARIOS

He aqu algunos cdigos para crear usuarios con store procedure:
o Creacin 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 Creacin 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))
Manual de SQL Server 2008 2012

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

- 164 -
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
Manual de SQL Server 2008 2012

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

- 165 -
--exec sp_adduser @n,@
end

use master
select name from syslogins

use Northwind
select name from sysusers

CREACIN DE VISTAS

Cdigo en SQL:



Seleccionar la vista:




Cdigo en SQL:

create view v_todoproducts
as
select *
from products


select *
from v_todoproducts
Manual de SQL Server 2008 2012

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

- 166 -



Seleccionar la vista:




Cdigo en SQL:




create view vista02
as
select ProductID, ProductName
from products

select *
from vista02

create view vista03
as
select top 1000 ProductID, ProductName
from products
order by ProductName

Manual de SQL Server 2008 2012

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

- 167 -

Seleccionar la vista:









Cdigo en SQL:



select *
from vista03

drop view vista02
Manual de SQL Server 2008 2012

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

- 168 -

CREACIN DE UN GRUPO DE INICIOS DE SESIN EN UN
STORE PROCEDURE

Cdigo 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
Manual de SQL Server 2008 2012

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

- 169 -
Verificando que se hayan creado los Inicios de sesin:












Cdigo en SQL:











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


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
Manual de SQL Server 2008 2012

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

- 170 -

Verificando que se hayan eliminado los Inicios de sesin:











CREACIN DE UN GRUPO DE USUARIOS EN UN STORE PROCEDURE

Cdigo en SQL:












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


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
Manual de SQL Server 2008 2012

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

- 171 -
Verificando que se hayan creado los Inicios de sesin:










Cdigo en SQL:








Verificando que se hayan eliminado los Inicios de sesin:







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


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

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

exec borrar2
Manual de SQL Server 2008 2012

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

- 172 -


FUNCIONES
Cambiar a Maysculas:
Cdigo en SQL:



Convierte a ninsculas:
Cdigo en SQL:



select UPPER ('juan')


select UPPER(companyname)
from Suppliers

select LOWER('KArEEf')
select lower(customerid)
from Customers
Manual de SQL Server 2008 2012

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

- 173 -
Elimina los espacios de la izquierda de un texto.
Cdigo en SQL:


Elimina los espacios de la derecha de un texto.
Cdigo en SQL:

A la longitude del texto:
Cdigo en SQL:

Cantidad de caracteres desde una determinada posicin del texto.
Cdigo en SQL:

Encuentra la posicin de un paracter.
Cdigo en SQL:



select (' JOSE'),
LTRIM(' JOSE')



select ('JOSE '),
RTRIM('JOSE ')


select len('Karen Johana')
select LEN(lastname), lastname from employees

select SUBSTRING('universidad',4,3)

select CHARINDEX(' ', 'Universidad
Nacional de Cajamarca',13)

Manual de SQL Server 2008 2012

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

- 174 -
Datepart
Cdigo en SQL:


Getdate(), Dateadd
Cdigo en SQL:


Datediff
Cdigo en SQL:


Nombre de la fecha.
Cdigo en SQL:


select datepart(yy,GETDATE())
select datepart(yy,DATEADD(YY,-3,GETDATE()))
/*agregar aos al ao, 1 un ao,fecha ala cual quiero
agregar*/

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

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

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

select DATENAME(MM,GETDATE())
select DATENAME(dd,GETDATE())
Manual de SQL Server 2008 2012

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

- 175 -
Es fecha?
Cdigo en SQL:



Es nmero?
Cdigo en SQL:



Nmero de alguna consulta de una cantidad de filas afectadas.
Cdigo en SQL:



select ISDATE(orderdate) from Orders
select ISDATE('19/09/2011')
select ISDATE('ANA')

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

select *
from Employees

select @@rowcount
Manual de SQL Server 2008 2012

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

- 176 -
@@rowcount con update
Cdigo en SQL:






RESTRICCIONES

Crearemos una tabla para hacer las restricciones:

Para crear una restriccin hacemos:



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

select @@rowcount

Manual de SQL Server 2008 2012

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

- 177 -



Manual de SQL Server 2008 2012

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

- 178 -

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 funcin que devuelva el IGV
Create function fn_IGV
(@monto money)
returns money
as
begin
declare @sol money
set @sol=@monto*0.19
return @sol
Manual de SQL Server 2008 2012

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

- 179 -
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 funcin 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. Funcin que permita ingresar un nmero 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 funcin que pase como parmetro el fax, si no existe fax entonces que
se muestre 'no especificado', caso contrario que muestre el nmero de fax.
create function veri_fax
Manual de SQL Server 2008 2012

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

- 180 -
(@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 funcin 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
Manual de SQL Server 2008 2012

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

- 181 -
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 funcin 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 mltiples instrucciones): se llama desde un from no prohbe update---
Con valores de tablas de con varias instrucciones

Manual de SQL Server 2008 2012

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

- 182 -
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

Manual de SQL Server 2008 2012

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

- 183 -
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 COMPAIA',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