182
UNIVERSIDAD NACIONAL DE CAJAMARCA FACULTAD DE INGENIERÍA ESCUELA ACADÉMICO PROFESIONAL DE INGENIERÍA DE SISTEMAS Cajamarca, 2012 Manual de SQL Server 2008 CONCEPTOS Y EJERCICIOS EN SQL Estrada Aguilar, Karen Johana

Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Embed Size (px)

Citation preview

Page 1: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

UNIVERSIDAD NACIONAL DE CAJAMARCA

FACULTAD DE INGENIERÍA

ESCUELA ACADÉMICO PROFESIONAL DE INGENIERÍA DE SISTEMAS

Cajamarca, 2012

Manual de SQL Server 2008 CONCEPTOS Y EJERCICIOS EN SQL

Estrada Aguilar, Karen Johana

Page 2: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

INTRODUCCIÓN............................................................................................................................. - 5 -

CAPÍTULO I .................................................................................................................................... - 6 -

CONCEPTOS BÁSICOS DE SQL ......................................................................................................... - 6 -

1.1. LENGUAJE ESTRUCTURADO DE CONSULTAS ........................................................... - 6 - 1.1.1. REQUERIMIENTOS Y CARACTERÍSTICAS........................................................................... - 6 -

1.2. INICIANDO SQL SERVER 2008 ......................................................................................... - 7 -

1.3. CREAR UNA NUEVA TABLA: ........................................................................................... - 12 -

1.4. HACER CONSULTAS ......................................................................................................... - 16 -

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

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

2.1. INSTRUCCIONES DE SQL SERVER 2008 .................................................................... - 18 - 2.1.1. SELECT ....................................................................................................................................... - 18 - 2.1.2. FROM ........................................................................................................................................... - 19 -

A. MODIFICADORES .......................................................................................................................... - 20 - Distinct y All: ............................................................................................................................. - 20 - TOP n: ......................................................................................................................................... - 21 -

B. FUNCIONES DE AGREGACIÓN ................................................................................................. - 21 - C. USO DE ALIAS: .............................................................................................................................. - 23 -

2.1.3. WHERE ........................................................................................................................................ - 24 - OPERADORES LÓGICOS ............................................................................................................ - 24 - OPERADORES DE COMPARACIÓN .......................................................................................... - 24 - CONCATENACIÓN DE CADENAS ............................................................................................. - 26 - IN ....................................................................................................................................................... - 27 - BETWEEN........................................................................................................................................ - 29 - NULL ................................................................................................................................................. - 31 - LIKE .................................................................................................................................................. - 32 - YEAR MONTH DAY ....................................................................................................................... - 33 -

2.1.4. ORDER BY .................................................................................................................................. - 34 - TOP ................................................................................................................................................... - 35 - WITH TIES ....................................................................................................................................... - 36 -

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

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

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

3.1. JOIN ....................................................................................................................................... - 48 - INNER JOIN: .................................................................................................................................................. - 48 - LEFT JOIN: ..................................................................................................................................................... - 48 - RIGTH JOIN: .................................................................................................................................................. - 48 - UNION: ............................................................................................................................................................ - 48 -

3.2. GROUP BY ........................................................................................................................... - 49 -

Page 3: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

3.3. HAVING ................................................................................................................................. - 50 -

EJERCICIOS ....................................................................................................................................... - 54 -

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

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

4.1. INSERT INTO ....................................................................................................................... - 73 -

4.2. UPDATE ................................................................................................................................ - 75 -

4.3. DELETE FROM .................................................................................................................... - 78 -

4.4. SUBCONSULTAS................................................................................................................ - 79 -

4.5. PROCEDIMIENTOS ALMACENADOS (STORE PROCEDURE) ................................ - 80 -

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

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

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

5.1. SUBSTRING FUNCION ...................................................................................................... - 96 -

5.2. TRIM FUNCION ................................................................................................................... - 96 -

5.3. SENTENCIA CAST .............................................................................................................. - 97 -

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

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

REPORTING SERVICE ......................................................................................................................- 100 - 6.1. INGRESANDO A SQL SERVER BUSINESS INTELLIGENCE DEVELOPMENT

STUDIO ............................................................................................................................................ - 100 -

6.2. CREAR UN NUEVO PROYECTO DE REPORTES ..................................................... - 102 -

6.3. DATA SOURCE (ORIGEN DE DATOS COMPARTIDO) ............................................ - 104 -

6.4. CREAR UN INFORME PARA HACER REPORTES .................................................... - 106 -

6.5. DATA SET........................................................................................................................... - 107 -

EJERCICIOS ................................................................................................................................... - 114 -

PRÁCTICA ....................................................................................................................................... - 123 -

AGRUPAR EN REPORTING SERVICE ...................................................................................... - 138 -

ENLACES DE INFORMES ............................................................................................................ - 141 -

IMPLEMENTACIÓN DE REPORTING SERVICE EN IIS ......................................................... - 144 -

INFORMES INTEGRADOS ........................................................................................................... - 146 -

EJERCICIOS: .................................................................................................................................. - 148 -

PRACTICA CALIFICADA DE REPORTING SERVICES SQL SERVER 2008 ...................... - 154 -

ADMINISTRACIÓN DE USUARIOS ............................................................................................ - 163 -

CREACIÓN DE VISTAS ................................................................................................................ - 165 -

CREACIÓN DE UN GRUPO DE INICIOS DE SESIÓN EN UN STORE PROCEDURE ..... - 168 -

CREACIÓN DE UN GRUPO DE USUARIOS EN UN STORE PROCEDURE ...................... - 170 -

FUNCIONES .................................................................................................................................... - 172 -

RESTRICCIONES .......................................................................................................................... - 176 -

PROPUESTOS: .............................................................................................................................. - 178 -

TRIGRESS ....................................................................................................................................... - 182 -

Page 4: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

través de las diferentes sentencias que tiene SQL. En este se considera a las tablas como

contenedores de datos organizados en filas y en columnas. Aquí es posible seleccionar

datos que pertenezcan a diferentes tablas y también es permitido establecer reglas o

condiciones que tengan que cumplir dichos datos para poder ser considerados como

registros resultantes.

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

primer prototipo de una base de datos relacional. Relational Software (luego se convirtió

en Oracle) quien lanzó la primera base de datos relacional comercial.

El mayor mérito de SQL está en su posibilidad de combinar las diferentes tablas de una

base de datos en un solo conjunto resultante y por ello ha sido considerado en la mayoría

de los programas administradores de Base de Datos tales como Oracle, Access o FoxPro.

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

divide en las siguientes secciones:

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

programa, creación de tablas, hacer consultas.

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

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

relacional.

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

las tablas dentro de una base de datos.

Para cada comando; primero se definirá, luego se presentará y explicará la sintaxis SQL,

seguida por algún o algunos ejemplos.

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

de Base de Datos II.

Page 5: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

CONCEPTOS BÁSICOS 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 CARACTERÍSTICAS

SQL Server tiene reservadas determinadas palabras clave para su uso

exclusivo. Por ejemplo, si se usan las palabras clave DUMP o BACKUP

en una sesión de osql o del Analizador de consultas de SQL, se estará

indicando a SQL Server que debe realizar una copia de seguridad total o

parcial de la base de datos, o una copia de seguridad del registro.

Debe evitar usar una palabra clave reservada como nombre de un

objeto. Si el nombre de un objeto coincide con una palabra clave, cada

vez que se haga referencia al objeto debe aparecer entre identificadores

delimitadores, como dobles comillas (“ ”) o corchetes ([ ]).

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

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

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

carácter de comentario (/*) al comienzo del texto del comentario, escriba

sus anotaciones y, después, se concluye el comentario con un carácter

de cierre de comentario (*/).Ejm.: /*Los comentarios son cadenas de texto que no se ejecutan,

colocadas en las instrucciones para describir la acción que

la instrucción está realizando*/

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

Page 6: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 dirección en el cuadro Ejecutar: “C:\Program Files

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

pulsar ENTER.

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

estándar.

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

hacemos lo siguiente:

o Clic en el botón inicio.

Page 7: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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.

Page 8: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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…

Page 9: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Luego realizamos la conexión con el servidor.

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

El Tipo de Servidor Nombre del Servidor (ha sido definido El tipo de Autentificación

al que debemos conectarnos al momento de la instalación)

Page 10: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

Finalmente vemos que la conexión ha sido realizada.

Los objetos lo podemos ver en las carpetas como Base de Datos, cuando lo

extendemos, entre otros; como también veremos las Bases de Datos existentes

que han sido creadas al momento de la instalación una de ellas con la que

trabajaremos es la Base de Datos Notrhwind.

Page 11: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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.

Page 12: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 opción

Nueva Tabla.

Después, iremos dando el nombre a cada campo que formarán las columnas de

la tabla (Código,Paterno, Materno, Nombre, Sexo, Dirección).

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

defecto es nchar(10) ) o bien un dominio definido por el usuario. También

podremos definir si se aceptarán valores nulos o no.

Page 13: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 están las Propiedades

de columna o campo.

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

campo y eligiendo la opción Establecer clave principal.

Page 14: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 más adelante los comandos que se deben

utilizar.

Page 15: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

1.4. HACER CONSULTAS

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

consultas pueden involucrar información de másde una tabla. El resultado de una

consulta es otra tabla con los datos requeridos en ella.

Esta consulta encuentra todos los campos del empleado: (utilizando la Northwind)

SELECT *

FROM Employees

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

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

Para crear esta consulta hacemos:

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

Nueva Consulta.

Luego escribimos la consulta:

Como podemos ver SQL nos muestra un listado de tablas que existe dentro de la

base de datos que estamos trabajando.

Page 16: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 botón ejecutar o

presionamos la tecla de función F5.

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

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

colocamos un nombre y damos un clic en guardar.

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

necesario seleccionar a la consulta que se desea ver y dar clic en ejecutar o

presionar F5, pues si no hacemos esto se ejecutan todas las consultas que están

dentro de una misma ventana.

Page 17: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

COMANDOS BÁSICOS DE SQL

2.1. INSTRUCCIONES DE SQL SERVER 2008

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

agregado. Estos elementos se combinan en las instrucciones o consultas para

crear, actualizar y manipular las bases de datos

Las instrucciones de SQL Server 2008 permiten:

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

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

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

modificar y eliminar las tablas de datos.

Tipos de Comandos:

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

que se puede realizar una consulta en SQL Server. Las sentencias SQL se

dividen, principalmente en las siguientes categorías:

DDL (Instrucciones del Lenguaje de definición de datos) que permiten crear

y definir nuevas bases de datos, campos e índices.

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

determinar quién puede ver o modificar los datos.

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

generar consultas para ordenar, filtrar y extraer datos de la base de datos.

Mediante estas instrucciones puede cambiar o recuperar información.

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

para consultar datos de SQL Server.

2.1.1. SELECT La sentencia SELECT permite seleccionar registros de una o más

tablas.Se usa para listar los campos deseados del resultado de una

consulta. Es la sentencia básica de SQL.

Page 18: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

2.1.2. FROM

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

nos permite sacar reportes y es el principal comando. La cláusula FROM

especifica la tabla de la que se obtienen las filas y columnas. En la cláusula

FROM podemos utilizar tablas derivadas, combinaciones y alias.

Ambas sentencias SELECT y FROM se utilizan juntas y su sintaxis más

simple es la siguiente:

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

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

selección.

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

se podría escribir cualquiera de las siguientes instrucciones:

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

Products. SELECT *

FROM Products

El * después de SELECT indicaque queremos ver todos los campos que aparecen

en la tabla.

Listando los campos separados por comas:

Select

ProductID,ProductName,SupplierID,CategoryID,QuantityP

erUnit,UnitPrice,UnitsInStock,UnitsOnOrder,ReorderLev

el,Discontinued

From Products

Haciendo explícita, en la lista de campos, la referencia a la tabla: SELECT Products.*

FROM Products

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

la tabla desde la cual se desea tomar las columnas en la lista de campos cuando

se extraen datos de más de una tabla.

SINTAXIS

SELECT nombre_ campo FROM nombre_tabla

Page 19: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 después de SELECT. También

podríamos explicitar que lo queremos todo, incluso con repeticiones,

poniendo ALL (opción por defecto) en lugar de DISTINCT.

Por ejemplo, si se quiere obtener todas las filas de la tabla

customers, pero sólo que se muestre el nombre de cada país una

vez. Se escribe la siguiente instrucción: SELECT DISTINCT country

FROM dbo.Customers

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

Page 20: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 instrucción:

Select top (3) FirstName

From dbo.Employees

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

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

promedios y sumas se llaman funciones de agregado. Cuando se

ejecuta una función de agregado, SQL Server resume los valores de

toda una tabla o de grupos de columnas de una tabla, y produce un

valor por cada conjunto de filas para las columnas especificadas.

Page 21: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

La sintaxis para el uso de funciones de agregación es:

El SQL nos ofrece las siguientes funciones de agregación 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 instrucción:

Select COUNT(*)

From Employees

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

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

Orders Details. Se escribe la siguiente instrucción:

Función Descripción

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

un determinado campo incluyendo los valores

nulos

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

un determinado campo no incluye los valores nulos

SUM Suma los valores de una columna

MIN Nos da el valor mínimo de una columna

MAX Nos da el valor máximo de una columna

AVG Calcula el valor medio de una columna

STDEV Desviación estadística de todos los valores

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

VAR Varianza estadística de todos los valores

VARP Varianza estadística de todos los valores para la

población

SINTAXIS

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

FROM "nombre_tabla"

Page 22: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Select sum(Quantity)

From [Order Details]

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

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

Products. Se escribe la siguiente instrucción:

Select max(UnitPrice)

From Products

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

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

excepto la función de agregación COUNT, que normalmente se aplica

a todas las columnas de la tabla o tablas seleccionadas. Por lo tanto,

COUNT (*) contará todas las filas de la tabla o las tablas que cumplan

las condiciones. Si se utilizase COUNT(columna), sólo contaría los

valores que no fuesen nulos.

C. USO DE ALIAS: Hay dos tipos de alias que se utilizan con mayor

frecuencia. Alias de columna y alias de tabla.

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

resultado. En el ejemplo anterior, cualquiera sea el momento en que

vemos el mayor precio de los productos, se enumeran como

MAX(UnitPrice).

El segundo tipo de alias es el alias de tabla. Esto se alcanza al colocar

un alias directamente luego del nombre de tabla en la cláusula FROM.

Esto es conveniente cuando desea obtener información de dos tablas

separadas. La ventaja de utiliza un alias de tablas cuando realizamos

uniones es rápidamente aparente cuando hablamos de uniones.

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

SINTAXIS

SELECT "alias_tabla"."nombre1_columna" "alias_columna"

FROM "nombre_tabla" "alias_tabla"

Page 23: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Brevemente, ambos tipos de alias se colocan directamente después

del elemento por el cual generan el alias, separados por un espacio en

blanco.

Por ejemplo, si se quiere obtener el mínimo precio de los productos

de la tabla Products, utilizando alias. Se escribe la siguiente

instrucción:

Select min(p.UnitPrice) as precio_Minimo

From Products as p

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

2.1.3. WHERE

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

SELECT ni el FROM. Éste permite establecer condiciones que deban

cumplir los registros para ser considerandos dentro del conjunto resultante.

Después de Cláusula WHERE (donde) irá la(s) condición(es) que deben

cumplir los registros. La sintaxis de SQL considerando esta sintaxis es:

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

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

siguientes:

OPERADORES DE COMPARACIÓN

= Igual

< Menor

> Mayor

<= Menor o igual

>= Mayor o igual

<> Diferente

OPERADORES LÓGICOS

NOT Para la negación de

condiciones

AND Para la conjunción de

condiciones

OR Para la disyunción de

condiciones

SINTAXIS

SELECT "nombre_campo"

FROM "nombre_tabla"

WHERE "Condición_Filtro"

Page 24: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Por ejemplo, “Mostrar los productos de la categoría 2”

La instrucción sería de la siguiente manera; utilizando el operador de

comparación igual (=): select*

fromProducts

whereCategoryID=2

Resultado de la consulta:

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

con valores de tipo texto, éste debe estar entre comillas simples (‘’)

Así como para saber la categoría 5; cambiamos:

select*

fromProducts

whereCategoryID=5

o

select*

from[Order Details]

whereOrderID=10260

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

And/OrSINTAXIS

SELECT "nombre_campo"

FROM "nombre_tabla"

WHERE "condición " {[AND|OR] "condición "}

Page 25: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Ejemplo: Mostrar los Productos de la Categoría 4 y 6.

select*

fromProducts

whereCategoryID=4 orCategoryID=6

Resultado de la consulta:

CONCATENACIÓN DE CADENAS

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

cadena. El resto de las operaciones con cadenas se controla mediante

las funciones de cadena.

Por ejemplo, queremos mostrar el nombre completo de los empleados

en una sola columna o campo:

select FirstName+(' ')+LastName as nombre_completo

from dbo.Employees

Se mostrará la siguiente tabla como resultado:

Page 26: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

IN

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

de valores la cual puede ser escrita elemento por elemento o puede ser

el resultado de otra consulta; las reglas que todas las condiciones deben

estar unidas con el OR, deben ser del mismo campo y los operadores

sean “=” .

La sintaxis de esta instrucción es:

Ejemplo:Selecciona todos los campos de la tabla Productscuyos

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

SELECT*

FROMProducts

WHERECategoryIDin(4,6,8,2)

El resultado es el siguiente:

SINTAXIS

SELECT "nombre_campo"

FROM "nombre_tabla"

WHERE "nombre_campo" IN ('valor1', 'valor2', ...)

Page 27: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Ejemplo: Obtener todos los productos de los proveedores con número

3, 5, 8.

SELECT*

FROMProducts

WHERESupplierIDin(3,5,8)

Resultado de la consulta:

Ejemplos:

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

SELECTProductID,ProductID,UnitPrice

FROMProducts

WHEREUnitPrice>100

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

están entre 30 y 60.

selectProductID,ProductName,UnitPrice

fromProducts

WhereUnitPrice>30 ANDUnitPrice<60

Page 28: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

BETWEEN

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

valores. Debe haber un rango que el campo sea el mismo y además un

operador sea >= y el otro <=.

La sintaxis de este predicado es:

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

productos que están entre 30 y 60.

selectProductID,ProductName,UnitPrice

fromProducts

WhereUnitPricebetween 30 and 60

SINTAXIS

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

Page 29: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

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

goryID

fromProducts

WhereUnitsInStockbetween 0 AND 10

Page 30: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

o Mostrar el nombre del producto y su código, donde el nombre del producto

sea Chang. selectProductID,ProductName

fromProducts

WhereProductName='chang'

NULL

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

ningún valor para ella durante la entrada de datos y no tiene definido

un valor predeterminado. Un valor NULL no es lo mismo que cero

(que es un valor numérico) o blanco (que es un valor de carácter).

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

las filas con valores conocidos en las columnas especificadas.

Por ejemplo, mostrar a los nombres de las compañías existentes de los

proveedores.

select ContactName

from dbo.Suppliers

where ContactName is not null

Al ejecutar esta consulta da la siguiente tabla como resultado:

Page 31: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 cláusula WHERE.

Básicamente, LIKE le permite hacer una búsqueda basada en un patrón

en vez de especificar exactamente lo que se desea (como en IN) o

determinar un rango (como en BETWEEN). La sintaxis es la siguiente:

Ejemplos de uso de caracteres comodín

La tabla siguiente contiene ejemplos de uso de comodines con la

condición de búsqueda LIKE.

Ejemplo

En este ejemplo se obtienen las compañías de la tabla customers que

contengan la palabra "restaurant" en su nombre. SELECT companyname

FROM customers

WHERE companyname LIKE '%Restaurant%'

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

Expresión Devuelve

LIKE 'BR%' Todos los nombres que comiencen por las letras BR.

LIKE '%een' Todos los nombres que terminen con las letras een.

LIKE '%en%' Todos los nombres que contengan las letras en.

LIKE '_en' Todos los nombres de tres letras que terminen con las

letras en.

LIKE '[CK]%' Todos los nombres que comiencen por C o por K.

LIKE '[S-V]ing' Todos los nombres de cuatro letras que terminen con

las letras ing y comiencen por cualquier letra

comprendida entre S y V.

LIKE 'M[^c]%' Todos los nombres que comiencen por la letra M y

cuya segunda letra no sea c.

SINTAXIS

SELECT "nombre_columna"

FROM "nombre_tabla"

WHERE "nombre_columna" LIKE {patrón}

Page 32: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 instrucción se nos presenta la siguiente tabla resultante

YEAR MONTH DAY

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

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

SELECT *

FROM Employees

WHERE YEAR(BirthDate)=1963

Para mes sería Month y para día DAY. Recordar que "fecha" debe ser

un campo de tipo Date, y que el comparador es un entero (no poner

entre comillas)

Resultado de la consulta:

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

DATEPART(MM,Campo) o DATEPART(DD,Campo)

Para saber las ordenes realizadas en el año de 1996 hacemos:

SELECT *

FROM dbo.Orders

WHERE Datepart(yyyy,OrderDate)='1996'

Page 33: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

añadiendo a la instrucción la cláusula ORDER BY, por defecto sale

ordenado en forma ascendente. La sintaxis en este caso es el siguiente:

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

categoría, solo de aquellos que tienen un stock entre 0 y 10. Ordenado por

el precio en forma descendente. selectProductID,ProductName,UnitPrice,UnitsInStock,Cat

egoryID

fromProducts

WhereUnitsInStockbetween 0 AND 10

OrderbyCategoryIDDESC

SINTAXIS

SELECT "nombre_campo"

FROM "nombre_tabla"

WHERE "condición"

ORDER BY "nombre_campo" [ASC, DESC]

Page 34: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 número de registros. Esta sentencia se guía

por la ordenación.

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

Page 35: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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:

Page 36: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 básicos de SQL TRANSACT

(Microsoft SQL SERVER 2008)

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

1. Seleccionar todos los campos de la tabla Clientes, ordenado por nombre del

Contacto de la compañía, alfabéticamente.

select *

from dbo.Customers

order by ContactName

Page 37: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 38: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 39: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 Países 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')

Page 40: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

categorías 1, 3, 4 y 7.

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

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'

Page 41: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 País de USA.

select *

from dbo.Customers

where Fax is not null

select *

from dbo.Customers

where Fax is null AND Country='usa'

Page 42: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 compañía empiecen con la letra de A

hasta la D y pertenezcan al país de USA, ordenarlos por la dirección.

12. Seleccionar todos los campos del proveedor, cuya compañía no comience con las

letras de la B a la G, y pertenezcan al país de UK, ordenarlos por nombre de la

compañía.

select*

from dbo.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

Page 43: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

13. Seleccionar los productos vigentes cuyos precios unitarios están entre 35 y 250, sin

stock en almacén, pertenecientes a las categorías 1, 3, 4, 7 y 8, que son distribuidos

por los proveedores 2, 4, 6, 7 y 9.

14. Seleccionar todos los campos de los productos descontinuados, que pertenezcan a

los proveedores con códigos: 1, 3, 7, 8 y 9, que tengan stock en almacén, y al

mismo tiempo que sus precios unitarios estén entre 39 y 190, ordenados por código

de proveedor y precio unitario de manera ascendente.

select *

from Products

where Discontinued='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

Page 44: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

15. Seleccionar los 7 productos con precios más caros, que cuenten con Stock en

almacén.

16. Seleccionar los 9 productos, con menos stock en almacén, que pertenezcan a la

categoría 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

Page 45: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 código entre 2 y

el 5, además de los clientes con códigos que comienzan con las letras de la A hasta

la G, del 31 de Julio de cualquier año.

18. Seleccionar las órdenes de compra, realizadas por el empleado con código 3, de

cualquier año pero sólo de los últimos 5 meses (Agosto - Diciembre).

19.

select *

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

Page 46: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 47: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

COMBINACIÓN DE TABLAS Y

AGRUPACIÓN DE DATOS

3.1. JOIN

Para realizar uniones en SQL se requieren mucho de los elementos que ya hemos

visto. SQL también proporciona varios mecanismos para reunir relaciones,

incluyendo reuniones condicionales y reuniones naturales, así como varias formas

de reunión externa. Estas operaciones adicionales se usan a menudo como

subconsultas dentro de la cláusula from.

Selección de columnas específicas de varias tablas

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

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

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

Use claves principales y externas como condiciones de combinación

Para combinar tablas, utilice columnas comunes a las tablas especificadas

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

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

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

cuales hay coincidencia de acuerdo a la expresión vinculante e incluye además a

todos los registros de la primera tabla que no tengan “pareja” en la segunda.

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

cuales hay coincidencia de acuerdo a la expresión vinculante e incluye además a

todos los registros de la segunda tabla que no tengan “pareja” en la primera.

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

partir de varias consultas

Cada consulta debe tener:

Tipos de datos similares

El mismo número de columnas

Page 48: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

El mismo orden de columnas en la lista de selección

Por ejemplo:

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

siguiente sentencia:

select COUNT(*) as total, e.LastName

from dbo.Orders as o

inner join dbo.Employees as e on

o.EmployeeID=e.EmployeeID

group by LastName

Al ejecutar lo anterior tenemos:

3.2. GROUP BY

Genera valores de resumen para una sola columna, para esto se utiliza funciones

de agregado con la cláusula GROUP BY. Utilice la cláusula HAVING con la

cláusula GROUP BY para restringir los grupos de filas devueltas en el conjunto de

resultados.

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

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

ORDER BY.

SINTAXIS

SELECT "nombre_columna 1",

SUM("nombre_columna 2")

FROM "nombre_tabla"

GROUP BY "nombre_columna 1"

Page 49: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

cláusula HAVING.

Su sintaxis es:

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

condiciones en los grupos incluidos en un conjunto de resultados. La cláusula

HAVING establece condiciones en la cláusula GROUP BY de una forma muy

similar a como interactúa la cláusula WHERE con la instrucción SELECT.

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

siguientes:

Utilice la cláusula HAVING sólo con la cláusula GROUP BY para restringir

los agrupamientos. El uso de la cláusula HAVING sin la cláusula GROUP

BY no tiene sentido.

En una cláusula HAVING puede haber hasta 128 condiciones. Cuando

utilice varias condiciones, tiene que combinarlas con operadores lógicos

(AND, OR o NOT).

Puede hacer referencia a cualquiera de las columnas que aparezcan en la

lista de selección.

No utilice la palabra clave ALL con la cláusula HAVING, porque la cláusula

HAVING pasa por alto la palabra clave ALL y sólo devuelve los grupos que

cumplen la cláusula HAVING.

Por ejemplo:

Mostrar la cantidad de órdenes hechas por cada empleado pero que sean mayores

que 100.

Se escribirá la siguiente instrucción: Select COUNT(*) as total,e.FirstName,e.LastName

from dbo.Orders as o

inner join dbo.Employees as e on o.EmployeeID=e.EmployeeID

groupby e.FirstName,e.LastName

having COUNT(*)>100

orderby FirstName,LastName

SINTAXIS

SELECT "nombre_columna 1",

SUM("nombre_columna 2")

FROM "nombre_tabla"

GROUP BY "nombre_columna 1"

HAVING (condición de función aritmética)

Page 50: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 51: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 52: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 53: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

producto y precio.

select

dbo.Categories.CategoryID,dbo.Categories.CategoryName,dbo.Products.Pro

ductID,dbo.Products.ProductName,dbo.Products.UnitPrice

from dbo.Categories

inner join dbo.Products on

dbo.Categories.CategoryID=dbo.Products.CategoryID

Page 54: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

22. Mostrar el número de la orden fecha de la orden, código del producto, cantidad del precio y

flete de la orden.

23. Mostrar: código, nombre, ciudad y país del proveedor. Código, 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

Page 55: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

nombre de los proveedores.

select c.CategoryID,c.CategoryName,p.ProductID,p.ProductName,

p.UnitPrice,p.UnitsInStock,s.SupplierID,s.CompanyName

from dbo.Categories as c

inner join dbo.Products as p on c.CategoryID=p.CategoryID

inner join dbo.Suppliers as s on p.SupplierID=s.SupplierID

Page 56: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

del producto.

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

empleado, nombre del producto comprado y nombre del proveedor.

select od.OrderID,o.OrderDate,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

Page 57: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

select c.CategoryID,c.CategoryName,p.ProductID,p.ProductName,

p.UnitPrice

from Categories as c

inner join dbo.Products as p on c.CategoryID=p.CategoryID

where c.CategoryID in (2,4,5,7)

Page 58: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

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

from [Order Details]as od

inner join Orders as o on od.OrderID=o.OrderID

where month(o.OrderDate)='01' and year(o.OrderDate)='1997'

Page 59: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

29. Modificar el ejercicio 3: sólo los productos con stock 0.

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

31. Modificar el ejercicio 5: sólo del primer trimestre del año 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'

Page 60: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 máximo y mínimo precio de los productos por categoría, mostrar el

nombre de la categoría.

33. Visualizar el máximo y mínimo precio de los productos por proveedor, mostrar el

nombre de la compañía proveedora.

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

prec_max,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

Page 61: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

34. Seleccionar las categorías que tengan más de 5 productos. Mostrar el nombre de la

categoría y número de productos.

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

from Categories as c

inner join dbo.Products as p on c.CategoryID=p.CategoryID

group by CategoryName

having COUNT(p.QuantityPerUnit)>5

Page 62: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

35. Calcular cuántos clientes existen en cada País.

36. Calcular cuántos 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

Page 63: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

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

categoría y el stock por categoría.

select 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

Page 64: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

39. Calcular el stock total de los productos por categoría. Mostrar el nombre el nombre

de la categoría y el stock por categoría. Solamente las categorías 2,5, y 8.

40. Obtener el Nombre del Cliente, Nombre del Proveedor, Nombre del Empleado y el

nombre de los productos que están en la orden 10250.

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

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 año

from Orders as o

inner join Customers as c on o.CustomerID=c.CustomerID

group by c.CompanyName, year(o.OrderDate)

Page 65: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

año.

select distinct e.FirstName,COUNT(*)as

total_ordenes,year(o.OrderDate) as año

from Orders as o

inner join Employees as e on o.EmployeeID=e.EmployeeID

group by e.FirstName, year(o.OrderDate)

Page 66: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

y año.

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

select distinct c.CompanyName,COUNT(*)as

total_ordenes,year(o.OrderDate) as año,MONTH(o.OrderDate) as mes

from Orders as o

inner join Customers as c

on o.CustomerID=c.CustomerID

group by c.CompanyName, year(o.OrderDate), month(o.OrderDate)

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

COUNT(*) as total_ordenes

from dbo.Orders as o

group by YEAR(o.OrderDate), MONTH(o.OrderDate)

Page 67: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

la fecha de la orden de compra, código del producto, cantidad pedida del producto,

nombre del producto, el nombre de la compañía Proveedora y la ciudad del

proveedor.

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

od.Quantity, p.ProductName, s.CompanyName, s.City

from [Order Details] as od

inner join dbo.Orders as o on od.OrderID=o.OrderID

inner join dbo.Products as p on p.ProductID=od.ProductID

inner join dbo.Customers as c on c.CustomerID=o.CustomerID

inner join dbo.Suppliers as s on s.SupplierID=p.SupplierID

Page 68: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

46. Seleccionar el nombre de la compañía del cliente, nombre del contacto, el código de

la orden de compra, la fecha de la orden de compra, código del producto, cantidad

pedida del producto, nombre del producto y el nombre de la compañía Proveedora,

usar join. Solamente las compañías proveedoras que comienzan con la letra de la A

hasta la letra G, además la cantidad pedida del producto debe estar entre 18 y 190.

select

c.CompanyName,c.ContactName,od.OrderID,o.OrderDate,p.ProductID,od.Q

uantity,p.ProductName,s.CompanyName

from [Order Details] as od

inner join dbo.Orders as o on od.OrderID=o.OrderID

inner join dbo.Products as p on p.ProductID=od.ProductID

inner join dbo.Customers as c on c.CustomerID=o.CustomerID

inner join dbo.Suppliers as s on s.SupplierID=p.SupplierID

where s.CompanyName like '[a-g]%' and Quantity between 18 and 190

Page 69: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

47. Seleccionar cuantos proveedores tengo en cada país, considerando solo a los

nombres de los proveedores que comiencen con la letra E hasta la letra P, además

de mostrar sólo los países donde tenga más de 2 proveedores.

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

categoría, el nombre del producto, y el total de productos por categoría, solamente

de las categorías 3, 5 y 8. Ordenar por el nombre de la categoría.

select 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

Page 70: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

49. Mostrar el número de la orden, la fecha de la orden y el total en soles de cada

orden.

50. Mostrar el nombre de Producto y en cuántas ó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

Page 71: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Page 72: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

MANIPULACIÓN DE TABLAS

4.1. INSERT INTO

En los programas de mantenimiento de base de datos es frecuente requerir

instrucciones que hagan posible la inserción de registros en las tablas. Estas

instrucciones hacen uso de la cláusula INSERT del lenguaje SQL. En su forma

más elemental, la instrucción tendrá la siguiente sintaxis.

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

valores o inserta los resultados de una instrucción SELECT. Puede crear

una tabla e insertar datos al mismo tiempo. No tiene que insertar valores en

todos los campos de datos de una fila.

La instrucción INSERT con la cláusula VALUES permite agregar filas a una

tabla. Al insertar filas, tenga en cuenta los siguientes hechos e

instrucciones:

Debe atenerse a las restricciones de destino o la transacción INSERT

fallará.

Utilice listaColumnas para especificar las columnas en las que se va a

almacenar cada valor especificado. listaColumnas debe especificarse entre

paréntesis y delimitarse con comas. Si especifica valores para todas las

columnas, listaColumnas es opcional.

Para especificar los valores que desea insertar, utilice la cláusula VALUES.

Esta cláusula se requiere para cada columna de la tabla o de

listaColumnas. El orden y el tipo de los nuevos datos debe corresponder al

orden y al tipo de las columnas de la tabla. Muchos tipos de datos tienen un

formato de entrada asociado. Por ejemplo, los datos de carácter y las

fechas deben encerrarse entre comillas simples.

SINTAXIS

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

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

Page 73: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 74: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 rápidamente, para ello debe emplear la sentencia

UPDATE. En su forma más elemental Update tendrá la siguiente sintaxis.

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

las filas de una tabla. Al actualizar filas, tenga en cuenta los hechos e instrucciones

siguientes:

Especifique las filas que desea actualizar con la cláusula WHERE.

Especifique los nuevos valores con la cláusula SET.

Compruebe que los valores de entrada tienen los mismos tipos de datos

que los definidos para las columnas.

SQL Server no hará actualizaciones que infrinjan alguna restricción de

integridad. En ese caso, no se producirán los cambios y la instrucción se

deshará.

Sólo es posible cambiar los datos de una tabla cada vez.

Puede establecer una expresión en una o varias columnas o variables. Por

ejemplo, una expresión puede ser un cálculo (como price * 2) o la suma de

dos columnas.

Ejemplo

En el ejemplo siguiente se agrega el 10 por ciento a los precios actuales de todos

los productos de Northwind Traders.

USE northwind

UPDATE products

SET unitprice = (unitprice * 1.1)

Ejemplo 1: updateProducts

setUnitPrice=UnitPrice*0.5

whereCategoryID='1'

selectcount(*),MIN(UnitPrice)asmini,max(UnitPrice)asmaxi

fromProducts

whereCategoryID=1

SINTAXIS

UPDATE "nombre_tabla"

SET "colonne 1" = [nuevo valor]

WHERE {condition}

Page 75: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 76: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 77: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 más simple de

esta sentencia es la siguiente:

La instrucción DELETE quita una o varias filas de una tabla o una vista mediante

una transacción. Puede especificar las filas que elimina SQL Server si filtra la tabla

de destino o mediante una cláusula JOIN o una subconsulta.

La instrucción DELETE quita filas de las tablas. La instrucción DELETE permite

quitar una o varias filas de una tabla.

Al utilizar la instrucción DELETE, tenga en cuenta los hechos siguientes:

SQL Server eliminará todas las filas de la tabla si no incluye una cláusula

WHERE en la instrucción DELETE.

Cada fila eliminada se almacena en el registro de transacciones.

Ejemplo 1: deletefromProducts

whereDiscontinued=1

SINTAXIS

DELETE FROM "nombre_tabla"

WHERE {condición}

Page 78: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 más grande.

o Consulta : Seleccionar los productos cuyos precios sean mayores al

promedio de todos los productos select*

fromProducts

whereUnitPrice>(selectAVG(UnitPrice)fromProducts)

Page 79: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 colección con nombre de instrucciones de

Transact-SQL que se almacena en el servidor. Los procedimientos almacenados

son un método para encapsular tareas repetitivas. Admiten variables declaradas

por el usuario, ejecución condicional y otras características de programación muy

eficaces.

Para alterar o modificar un procedimiento utilizamos ALTER en reemplazo de

CREATE

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

procedimiento almacenado definido por el usuario o un procedimiento almacenado

extendido�Controla la ejecución de una cadena de caracteres dentro de un lote de

Transact-SQL

SINTAXIS

Create proc Nombre_Procedimiento --Declaracion de variables As --Cuerpo de la instrucción

Page 80: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 81: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 82: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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','[email protected]','f'

Ejemplo: Create proc precios

@li money,

@ls money

as

select *

from Products

where UnitPrice between @li and @ls

Exec precios 15,20

Page 83: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 instrucción

DECLARE; se le asigna un valor inicial en una instrucción SET o SELECT y,

después, se utiliza en la instrucción, programa por lotes o procedimiento en el que

se declaró. Una variable local se identifica mediante un símbolo arroba (@) que

precede a su nombre mientras que una variable global incluye dos símbolos arroba

delante de su nombre.

Page 84: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 año

alterprocmas_vendidos

@tint,

@anioint

as

selecttop

(@t)p.ProductName,sum(od.Quantity*od.UnitPrice*2.81)asmonto_total

fromProductsaspinnerjoin[Order

Details]asodonp.ProductID=od.ProductIDinnerjoin

Ordersasoono.OrderID=od.OrderID

whereYEAR(o.OrderDate)=@anio

groupbyp.ProductName

orderbysum(od.Quantity*od.UnitPrice)desc

Page 85: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

mas_vendidos 3,1997

3. productos no vendidos por año

alterprocno_vendidos

@anioint

as

selectp.ProductID,p.ProductName,YEAR(o.OrderDate)asanio

fromProductsaspinnerjoin[Order

Details]asodonp.ProductID=od.ProductIDinnerjoin

Ordersasoono.OrderID=od.OrderID

wherep.ProductIDnotin(selectProductIDfrom[Order

Details])andyear(OrderDate)=@anio

no_vendidos 1996

Page 86: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 87: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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)

Page 88: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

dias_trans 10

8. En un año determinado

alterprocdias_trans

@numint,

@anioint

as

selectcount(OrderID)ascant_ords,datediff(day,ShippedDate,RequiredDate)asd

ias_trans

fromOrders

wheredatediff(day,ShippedDate,RequiredDate)<@numandYEAR(RequiredDate)=@an

io

groupbydatediff(day,ShippedDate,RequiredDate)

Page 89: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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'

Page 90: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Más ejercicios alter proc insert_cliente

@nom varchar (20),

@ape varchar (30),

@dir varchar (30),

@email varchar (35)

as

declare @cod char(8)

declare @nr int

set @cod=left(@nom,2)+LEFT(@ape,2)

select @nr=COUNT(*)+1

from dbo.clientes

if @nr<=9

set @cod=Rtrim(@cod)+'0'+LTRIM(STR(@nr))

else

set @cod=rtrim(@cod)+LTRIM(STR(@nr))

insert into dbo.clientes

values (@cod,@nom,@ape,@dir,@email)

insert_cliente 'juan','perez','dos de mayo','[email protected]'

insert_cliente 'ana','diaz','dos de mayo','[email protected]'

insert_cliente 'karen','johana','Jose carlos mariategui n°

314','[email protected]'

-->

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','[email protected]'

insert_cliente 'ana','diaz','dos de mayo','[email protected]'

insert_cliente 'karen','johana','Jose carlos mariategui n°

314','[email protected]'

Page 91: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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','[email protected]'

insert_cliente 'ana','diaz','dos de mayo','[email protected]'

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

Page 92: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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','[email protected]'

insert_cliente 'ana','diaz','dos de mayo','[email protected]'

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

Page 93: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 94: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 95: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

OTRAS SENTENCIAS

5.1. SUBSTRING FUNCION

La función de subcadena en SQL se utiliza para tomar una parte de los datos

almacenados. Esta función tiene diferentes nombres según las diferentes bases de

datos:

MySQL: SUBSTR(), SUBSTRING()

Oracle: SUBSTR()

SQL Server: SUBSTRING()

Los usos más frecuentes son los siguientes (utilizaremos SUBSTR() aquí):

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

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

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

selecciona los siguientes caracteres <len>.

5.2. TRIM FUNCION

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

una cadena. El patrón más común a eliminarse son los espacios en blanco. Esta

función tiene diferentes nombres según las diferentes bases de datos:

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

Oracle: RTRIM(), LTRIM()

SQL Server: RTRIM(), LTRIM()

La sintaxis para estas funciones de reducción es:

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

REMANENTE, o AMBAS. Esta función se deshace del patrón [remstr] tanto para el

comienzo de la cadena como para el final, o para ambos. Si no se especifica

ningún [remstr], los espacios en blanco se eliminarán.

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

Page 96: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 sería así:

Select CAST(goles as varchar(30))

from jugadores

where id = 100

Este resultado nos devolveria los goleadores de menor a mayor, pero lo logico es

que nos interese al reves, por lo que se sería:

Select Jugador,goles

from jugadores

order by goles desc

Page 97: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 98: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 99: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 dirección en el cuadro Ejecutar: “C:\Program

Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe” y pulsar ENTER.

Es la ruta que adquiere el programa de SQL Server Business Intelligence

Development Studio en la instalación estándar.

Page 100: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 botón inicio.

o Clic en todos los programas.

o Clic en Microsoft SQL Server 2008.

o Y finalmente hacemos clic en SQL Server Business Intelligence Development

Studio

Page 101: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Esperamos que cargue…

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

6.2. CREAR UN NUEVO PROYECTO DE REPORTES

Hacemos clic en Archivo luego en Nuevo, finalmente Proyecto.

Page 102: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Se abre el cuadro de diálogo Nuevo proyecto, hacemos clic en Proyecto de Servidor de

Informes.

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

Se creó el Proyecto Karen.

Page 103: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 diálogo Propiedades de origen de datos compartidos y para crear

una cadena de conexión hacemos clic en editar.

Page 104: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

En el cuadro propiedades de la conexión, en el nombre del servidor escribimos “.”

(punto), escogemos la base de datos northwind; finalmente aceptamos.

En la siguiente ventana también elegimos aceptar.

Se creó el origen de datos compartidos

Page 105: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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.

Page 106: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 diálogo Propiedades del conjunto de datos, en origen de datos

hacemos clic en Nueva.

Se abre el cuadro del origen de datos, como ya habíamos creado un origen de datos

compartido, seleccionamos la opción Utilizar referencia de origen de datos

compartidos; en este caso seleccionamos DataSource1. Finalmente aceptamos.

Page 107: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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.

Page 108: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 diseño

Por ejemplo el elemento Matriz.

Por ejemplo el elemento Gráfico, donde se puede elegir el gráfico del cuadro

Selección tipo de gráfico y aceptamos, logrando ver el gráfico.

Page 109: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

más de un reporte.

Otro elemento es Tabla muy utilizado en muchos reportes.

Page 110: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

y, a continuación, arrastramos campos de conjunto de datos al elemento; que puede

ser de tres maneras:

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

Eligiendo en las filas los datos:

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

Page 111: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Observamos el reporte en manera de diseño con todos los datos pedidos.

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

celdas de las filas o columnas.

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

Page 112: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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.

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

Page 113: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 conexión

para todos los informes.

1. Crear el informe (En Visual Studio):

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

CategoryName

Código en SQL:

Reporting services:

En modo de diseño:

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

Page 114: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 categoría; deberá ser filtrado por categoría.

Código en SQL:

Reporting Service:

Para dar los valores a la categoría debemos agregar un nuevo conjunto de datos

(dataset2). En esta ocasión hacemos una consulta de tipo Texto.

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

escogemos Propiedades del parámetro.

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

Page 115: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

En Propiedades de parámetro de informe, en la parte general llenamos lo que se

nos pide: Pedir datos, Tipo de datos, etc.

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

en conjunto de datos elegimos DataSet2.

Page 116: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 diseño:

En modo de vista previa:

Page 117: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Informe final de la categoría 1:

3. Crear un reporte usando reporting service que muestre el nombre del producto, el

nombre de la compañía del proveedor, precio, seleccionar el nombre de la

empresa y mostrar los productos del proveedor seleccionado.

Código en SQL:

create proc informe02

@s int

as

select p.ProductName,s.CompanyName,p.UnitPrice

from Products as p inner join Suppliers as s on

p.SupplierID=s.SupplierID

where s.SupplierID=@s

select SupplierID,CompanyName

from Suppliers

order by SupplierID

Page 118: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Reporting Services:

En modo de diseño:

En modo de vista previa:

Informe final:

Page 119: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

4. Mostrar el número de productos vendidos en cada mes por cada empleado.

Código en SQL:

Reporting Services:

En modo de diseño:

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

Page 120: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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, número de la orden, fecha de

la orden, nombre del proveedor, filtrar por el empleado que hizo la orden.

Código en SQL:

create proc ordeNES_empleado

@e INT

as

select c.ContactName, lastname+' '+firstname as Empleado, o.OrderID,

OrderDate, s.ContactName

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

inner join Products as p on p.ProductID=od.ProductID inner join

Customers as c on c.CustomerID=o.CustomerID inner join Employees

as e on e.EmployeeID=o.EmployeeID inner join Suppliers as s on

s.SupplierID=p.SupplierID

where E.EmployeeID=@e

create proc empleados

as

SELECT EmployeeID,FirstName+' '+FirstName

FROM Employees

ORDER BY EmployeeID

Page 121: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Reporting Services:

En modo de diseño:

En modo de vista previa:

Informe final:

Page 122: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

PRÁCTICA

Crear los siguientes informes: en SQL SERVER.

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

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

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

Código en SQL:

Reporting Services:

En modo de diseño:

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

Page 123: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

En modo de vista previa:

Informe final:

Page 124: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

2.

Precio 10 y 30

Código en SQL:

Reporting Services:

En modo de diseño:

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

Page 125: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

En modo de vista previa:

Informe final:

Page 126: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

3. Proveedores (mostrar

companyname)

Categoría (mostrar categoryname)

Productname Categoryname Companyname unitsinstock

Código en SQL:

Reporting Services:

En modo de diseño:

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

Page 127: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 gráfico y en una tabla el número de productos por categorías

2 2

3

5

0

1

2

3

4

5

6

Categoría A Categoría B Categoría C Categoría D …

Productos

Page 128: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Código en SQL:

Reporting Services:

En modo de diseño:

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

Page 129: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

Meses

1 2 3 4 … 12

Juan Torres

Pedro León

Ana Díaz

María Huamán

Empleados (Nombre y apellidos)

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

Código en SQL:

Reporting Services:

En modo de diseño:

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)

Page 130: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

En modo de vista previa:

Informe final:

6. Mes Año

0

1

2

3

4

5

6

Emp 1 Emp 2 Emp 3 Emp 4 …

me

ro d

e ó

rde

ne

s re

aliz

adas

Total de Órdenes

Page 131: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Código en SQL:

Reporting Services:

En modo de diseño:

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)

Código para el color de las

barras:

=IIf(Fields!name.Value="Andrew

Fuller",

"Khaki",IIf(Fields!name.Value="Anne

Dodsworth","Orange",IIf(Fields!name

.Value="Janet

Leverling","Pink",IIf(Fields!name.V

alue="Laura

Callahan","SlateBlue",IIf(Fields!na

me.Value="Margaret

Peacock","CornflowerBlue",IIf(Field

s!name.Value="Michael

Suyama","Blue",IIf(Fields!name.Valu

e="Nancy

Davolio","MediumAquamarine",IIf(Fie

lds!name.Value="Robert

King","PaleTurquoise","Plum")))))))

)

Page 132: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

En modo de vista previa:

Informe final:

Page 133: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

7. Empleados (nombres y apellidos del empleado)

Código en SQL:

Reporting Services:

En modo de diseño:

0

1

2

3

4

5

6M

on

to T

ota

l V

en

did

o

Monto total vendido en cada año por un epleado

Años

create proc empleado

@nom nvarchar (40)

as

select distinct year(OrderDate) as año, LastName+' '+FirstName as

Nombre, sum(Quantity*UnitPrice) as monto_total

from Employees as e inner join Orders as o on

o.EmployeeID=e.EmployeeID

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

where (LastName+' '+FirstName)=@nom

group by LastName+' '+FirstName,year(OrderDate)

create proc employs

as

select LastName+' '+FirstName as Nombre

from Employees

group by LastName+' '+FirstName

Page 134: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

En modo de vista previa:

Informe final:

Page 135: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

8.

ProductName UnitPrice UnitInStock

0

10

2

4

35

Código en SQL:

Reporting Services:

En modo de diseño:

En modo de vista previa:

create proc Stock_cero

as

select ProductName,UnitPrice,UnitsInStock

from Products

order by ProductName

Código 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.

Page 136: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

9.

ProductName UnitPrice Discontinued

Código en SQL:

Reporting Services:

En modo de diseño:

En modo de vista previa:

create proc D_V

as

select ProductName,UnitPrice,Discontinued

from Products

order by ProductName

Código para el texto de mostrar Discontinuado

o Vigente

=iif(Fields!Discontinued.Value="True

","Discontinuado","Vigente")

Mostrar: Discontinuado o vigente

Page 137: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 diseño:

Que en modo de Vista previa se muestra así:

Vamos a agrupar por categorías; para esto hacemos anticlic en la fila, elegimos

Agregar grupo, seguidamente seleccionamos Grupo primario:

Page 138: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Seleccionamos el campo por el que vamos a agrupar, también seleccionamos

Agregar encabezado de grupo, como también Agregar pie de grupo.:

Se observará así:

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

Visibilidad de fila.

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

visualización se puede activar… Finalmente aceptamos:

Page 139: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

En vista previa se muestra así:

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

Page 140: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 diseño.

o Modo Vista previa.

Hacemos anti clic en el campo que va a servir de enlace para ir a otro informe y

hacemos clic en Propiedades de cuadro de texto…

Para que lleve al siguiente informe:

Page 141: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 acción, en

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

Seleccionamos el informe al que vamos a ir:

Page 142: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Al agregar un parámetro debemos seleccionar lo siguiente:

Cuando hacemos clic en una de las celdas, se abrirá el siguiente informe enlazado

a éste al pasarle el parámetro.

Page 143: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

IMPLEMENTACIÓN DE REPORTING SERVICE EN IIS

Implementar el report service en iis(internet information service) /* Videos 22062011

origen de datos compartidos*/

Instalar el iis

Crear una data set

Pie de grupo para hacer cálculos

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

Generar(¿2° opción?) ASP

LocalhostURL donde va dirección 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:

Page 144: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Escribimos la página http://localhost/reportserver:

Implementar el informe:

Copiamos el URL que aparece en la generación:

Abrimos en el internet explore:

Page 145: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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:

Page 146: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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:

Page 147: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

Mostrar el

+CategoryName

ProductName UnitPrice CategoryId Descuento % Descuento S/.

A

B

C

+CategoryName

Descuento:

Cat 110% Cat 430%

Cat 215% Else0%

Cat 323%

Código en SQL:

Reporting Services:

En modo de diseño:

select CategoryName,ProductName,UnitPrice,c.CategoryID

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

order by c.CategoryID

Código 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%"))))

Código 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"))))

Page 148: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

En modo de vista previa:

Informe la categoría 4:

2.

Informe x Informe y

Código en SQL:

LISTA DE EMPLEADOS

CÓDIGO NOMBRES Y APELLIDOS

XXXXX

XXXXXX

Años Ventas Totales

0

50

100

2008 2009 2010 2011

select employeeid, FirstName+' '+LastName as Nombre

from Employees

Page 149: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Reporting Services:

En modo de diseño:

En modo de vista previa:

Código en SQL:

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

as anio, sum(Quantity) as VentaTotal

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

od.OrderID=o.OrderID inner join Employees as e on

e.EmployeeID=o.EmployeeID

where e.EmployeeID=@e

group by YEAR(orderdate), FirstName+' '+LastName

Page 150: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Reporting Services:

En modo de diseño:

En modo de vista previa:

Page 151: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Informes Integrados:

Reporting Services:

En modo de diseño:

En modo de vista previa:

3. +HP(CompayName-Suppliers)

ProductId ProductName UnitPrice UnitInStock

+IBM

Código en SQL:

select CompanyName, productId, productname,

UnitsInStock

from Suppliers as s inner join Products as p

on s.SupplierID=p.SupplierID

Page 152: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Reporting Services:

En modo de diseño:

En modo de vista previa:

Informe final:

Page 153: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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, Código del Producto, Nombre del

Producto, nombre de la categoría y el nombre de la compañía proveedora.

Código 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

Page 154: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 categoría

por cada año. Adicionalmente al costado del grafico debe salir una tabla con los

mismos datos.

Código 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)

Page 155: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

3. Crear un Grafico que muestre los años, los empleados y el Monto total ingresado

por los pedidos. Filtrar por años que se mostrara desde una lista desplegable.

Código en SQL:

create proc report3

@anio datetime

as

select YEAR(OrderDate) as anio, LastName+' '+FirstName as NOMBRE,

SUM(Quantity*UnitPrice) as Monto_Total

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

o.OrderID=od.OrderID

inner join Employees as e on e.EmployeeID=o.EmployeeID

where YEAR(OrderDate)=@anio

group by YEAR(OrderDate), LastName+' '+FirstName

select distinct YEAR(OrderDate) as anio

from Orders

Page 156: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Reporting Services:

4. Crear un Grafico que muestre los años, los meses y el numero de productos

pedidos de un cliente (solo considerar los productos videntes). Escogiendo el

cliente de una lista desplegable, donde se mostrara el nombre de la compañía del

cliente.

Código en SQL:

create proc report4

@nom nvarchar(40)

as

select CompanyName, YEAR(OrderDate) as anio,month(OrderDate) as mes,

SUM(Quantity) as Productos_pedidos

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

inner join Employees as e on e.EmployeeID=o.EmployeeID

inner join Products as p on p.ProductID=od.ProductID

inner join Customers as c on c.CustomerID=o.CustomerID

where Discontinued=0 and CompanyName=@nom

group by CompanyName, YEAR(OrderDate),month(OrderDate)

Page 157: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Reporting Services:

select CompanyName

from Customers

order by CompanyName

Page 158: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

intersección el numero de productos pedidos, solo considerar los productos

vigentes.

Código 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)

Page 159: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

6. En una matriz mostrar los años (filas), los meses (columnas) y en la intersección el

monto vendido. Filtrar por empleados, mostrando en una lista desplegable el

Nombre y Apellido de los Empleados.

Código en SQL:

Reporting Services:

create proc reports6

@e int

as

select CompanyName,year(OrderDate) as año, MONTH(OrderDate) as mes,

SUM(Quantity*od.UnitPrice) as Monto_Total

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

inner join Employees as e on e.EmployeeID=o.EmployeeID

inner join Products as p on p.ProductID=od.ProductID

inner join Customers as c on c.CustomerID=o.CustomerID

where e.EmployeeID=@e

group by CompanyName,month(OrderDate),year(OrderDate)

select EmployeeID, LastName+' '+FirstName as Nombre

from Employees

order by LastName+' '+FirstName

Page 160: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

7. Mostrar el nombre del producto, nombre de la categoría y nombre de la empresa

proveedora. Mostrar toda la fila de un registro en color amarillo si son de las

categorías 1 y 2, en color verde las categorías 3 y 4, en color azul las categorías 5

y 6, y en color rojo el resto de categorías.

Código en SQL:

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

Page 161: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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, Código del

Producto, Nombre del Producto, precio, cantidad comprada, sub total (Precio *

cantidad) y en el pie del grupo el monto total pagado por orden de compra

Código en SQL:

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

Page 162: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

ADMINISTRACIÓN DE USUARIOS

He aquí algunos códigos para crear usuarios con store procedure:

o Creación de login y borrado del mismo:

create proc InicioSesion

as

declare @c as int

declare @n as varchar(20)

declare @a as varchar(20)

set @c=1

while (@c<=9)

begin

select @n=rtrim(lower(firstname)),

@a=rtrim(lower(lastname))

from employees

where EmployeeID=@c

exec sp_addlogin @n,@a,'master', 'spanish'

--exec sp_adduser @n,@

set @c=@c+1

end

///////////////////////////////////////////////////////

////

create proc borrar

as

declare @c as int

declare @n as varchar(20)

set @c=1

while(@c<=9)

begin

select @n=RTRIM(firstname)

from Employees

where EmployeeID=@c

set @c=@c+1

exec sp_droplogin @n

end

o Creación de usuarios y borrado del mismo:

create proc usuario2

as

declare @c as int

declare @n as varchar(20)

set @c=1

while (@c<=9)

begin

select @n=rtrim(lower(firstname))

Page 163: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 164: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

CREACIÓN DE VISTAS

Código en SQL:

Seleccionar la vista:

Código en SQL:

create view v_todoproducts

as

select *

from products

select *

from v_todoproducts

Page 165: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Seleccionar la vista:

Código 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

Page 166: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Seleccionar la vista:

Código en SQL:

select *

from vista03

drop view vista02

Page 167: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

STORE PROCEDURE

Código en SQL:

create proc Inicio_seccion

as

declare @c as int

declare @n as varchar(20)

declare @a as varchar(20)

set @c=1

while (@c<=9)

begin

select @n=rtrim(lower(firstname)), @a=rtrim(lower(lastname))

from employees

where EmployeeID=@c

exec sp_addlogin @n,@a,'master', 'spanish'

--exec sp_adduser @n,@

set @c=@c+1

end

exec Inicio_seccion

Page 168: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

Código 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

Page 169: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

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

Código 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

Page 170: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

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

Código en SQL:

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

use Northwind

go

select name

from SYSUSERS

where year(createdate)=YEAR(GETDATE()) and

month(createdate)=month(GETDATE())

and day(createdate)=day(GETDATE())

order by name

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

Page 171: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

FUNCIONES

Cambiar a Mayúsculas:

Código en SQL:

Convierte a ninúsculas:

Código en SQL:

select UPPER ('juan')

select UPPER(companyname)

from Suppliers

select LOWER('KArEEf')

select lower(customerid)

from Customers

Page 172: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Elimina los espacios de la izquierda de un texto.

Código en SQL:

Elimina los espacios de la derecha de un texto.

Código en SQL:

A la longitude del texto:

Código en SQL:

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

Código en SQL:

Encuentra la posición de un paracter.

Código 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)

Page 173: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Datepart

Código en SQL:

Getdate(), Dateadd

Código en SQL:

Datediff

Código en SQL:

Nombre de la fecha.

Código en SQL:

select datepart(yy,GETDATE())

select datepart(yy,DATEADD(YY,-3,GETDATE()))

/*agregar años al año, 1 un año,fecha ala cual quiero

agregar*/

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 añade, diff resta*/

select DATENAME(MM,GETDATE())

select DATENAME(dd,GETDATE())

Page 174: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

¿Es fecha?

Código en SQL:

¿Es número?

Código en SQL:

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

Código 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

Page 175: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

@@rowcount con update

Código en SQL:

RESTRICCIONES

Crearemos una tabla para hacer las restricciones:

Para crear una restricción hacemos:

update Products

set UnitPrice=100

where CategoryID=1

/*set @nr=@@rowcount*/

select @@rowcount

Page 176: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

Manual de SQL Server 2008 2012

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

Page 177: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 función que devuelva el IGV

Create function fn_IGV

(@monto money)

returns money

as

begin

declare @sol money

set @sol=@monto*0.19

return @sol

Page 178: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 función que devuelva el precio en soles.

create function fn_precio

(@MD money, @TC money)

returns money

as

begin

declare @MS money

set @MS=@MD*@TC

return @MS

end

select unitprice, dbo.fn_precio(unitprice,2.05)

from Products

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

salida: Marzo

alter function fn_meses

(@mes datetime)

returns char(40)

as

begin

declare @text char(40)

set @text=datename(mm,@mes)

return @text

end

select '9', dbo.fn_meses ('14/9/2100')

4. Crear una función que pase como parámetro el fax, si no existe fax entonces que

se muestre 'no especificado', caso contrario que muestre el número de fax.

create function veri_fax

Page 179: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 función que me permita cambiar la clave de un usuario si se graba bien

devolver 1 y sino devolver 0

create function fn_veri_user

(@u varchar(15),@p varchar(20))

returns int

as

begin

declare @nr int

select @nr=count(*)

from usuarios_db

where usuario=@u and clave=@p

return @nr

end

/////

select dbo.fn_veri_user('juan2011','1234')

select dbo.fn_veri_user('karenjea','753159')

create function fn_clavenueva

(@u varchar(15),@c_act varchar(20),@c_nue varchar(20))

as

begin

update usuarios_db

Page 180: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 función que nos permita seleccionar un Proveedor de manera aleatoria.

--crear una vista que almacene el numero aleatorio

create view v_rand

as

select rand() as number

/*

select number from v_rand*/

/* select cast(number*5 as int) from v_rand*/

-- FUNCION

create function fn_aleatorio()

returns varchar(20)

as

begin

declare @nreg int,@reg varchar(20),@rnd float

select @nreg=count(*)

from suppliers

set @rnd=(select number from v_rand)

select @reg=companyname

from suppliers

where supplierid=cast((@rnd*@nreg+1) as int)

return @reg

end

select dbo.fn_aleatorio()

Escalar: retorna un solo valor (prohibido update) funciones(devuelve tabla

de múltiples instrucciones): se llama desde un from no prohíbe update---

Con valores de tablas de con varias instrucciones

Page 181: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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

Page 182: Youblisher.com 368313-manual de-sql_server_2008_reporting_service

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 COMPAÑIA',10,1)

ROLLBACK TRANSACTION

END

probar:

UPDATE SUPPLIERS

SET COMPANYNAME ='JUAN'

WHERE SUPPLIERID = 2

5. Crear una tabla historico que vaya guardando el nombre de la compania (actual nombre

y nuevo nombre) de los proveedores. Tabla: historico (id, actual, nuevo) el id es identity.

CREATE TRIGGER A6

ON SUPPLIERS

FOR UPDATE

AS

IF UPDATE(COMPANYNAME)

BEGIN

DECLARE @C_ACT VARCHAR(50)

DECLARE @C_NEW VARCHAR(50)

SELECT @C_ACT=COMPANYNAME FROM DELETED

SELECT @C_NEW=COMPANYNAME FROM INSERTED

INSERT INTO HISTORICO (ACTUAL,NUEVO)

VALUES (@C_ACT,@C_NEW)

END

Probarlo:

UPDATE SUPPLIERS

SET COMPANYNAME ='JUAN'

WHERE SUPPLIERID = 2