You are on page 1of 15

Universidad Laica

Eloy Alfaro de Manab

FACULTAD DE CIENCIAS INFORMTICAS


ADMINISTRACIN DE BASE DE DATOS
TEMAS:

Funciones de agregado
Procedimientos almacenados
Consultas
Tablas temporales
Cursores
Variable tipo tabla
Commit, rolback, errores, try cach.

Presenta:

Pinargote Garca Christian


Pinargote Mendoza Wendy
Laz Arteaga Anthony

Docente:
Ing. Cesar Cedeo
Curso:
Quinto Nivel B

Funciones de Agregacin
Las funciones de agregacin son funciones que toman una coleccin (un conjunto o
multiconjunto) de valores como entrada y producen un nico valor como salida.
SQL proporciona cinco funciones de agregacin primitivas:
Media: avg
Mnimo: min
Mximo: max
Total: sum
Cuenta: count
La entrada a sum y avg debe ser una coleccin de nmeros, pero los otros operadores
pueden operar sobre colecciones de datos de tipo no numrico, tales como las cadenas.

Media: avg
Devuelve el promedio de los valores de un grupo. Se omiten los valores null.
Sintaxis

AVG ( [ ALL | DISTINCT ] expression )


OVER ( [ partition_by_clause ] order_by_clause )

Ejemplo
A. Usar las funciones SUM y AVG para los clculos
En el ejemplo siguiente se calcula el promedio de horas de vacaciones y la suma de horas
de baja por enfermedad que han utilizado los vicepresidentes de Adventure Works
Cycles. Cada una de estas funciones de agregado produce un valor nico de resumen para
todas las filas recuperadas. En el ejemplo se usa la base de datos AdventureWorks2012.
SELECT AVG(VacationHours)AS 'Average vacation hours',
SUM(SickLeaveHours) AS 'Total sick leave hours'
FROM HumanResources.Employee
WHERE JobTitle LIKE 'Vice President%';

El conjunto de resultados es el siguiente:

B.
Usar las funciones
SUM y AVG con una clusula
GROUP BY

Cuando se utiliza con una clusula GROUP BY, cada funcin de agregado produce un solo
valor para cada grupo, en vez de para toda la tabla. En el ejemplo siguiente se obtienen
valores de resumen para cada territorio de ventas de la base de datos
AdventureWorks2012. El resumen muestra el promedio de bonificaciones recibidas por
los vendedores de cada territorio y la suma de las ventas realizadas hasta la fecha en cada
territorio.
SELECT TerritoryID, AVG(Bonus)as 'Average bonus',
SUM(SalesYTD) as 'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO

El conjunto de resultados es el siguiente:

C. Usar AVG con DISTINCT


En la instruccin siguiente se devuelve el precio de venta promedio de los productos de
la base de datos AdventureWorks2012. Si se especifica DISTINCT, solo se tienen en
cuenta valores nicos en el clculo.
SELECT AVG(DISTINCT ListPrice)
FROM Production.Product;

El conjunto de resultados es el siguiente:

D. Usar la clusula OVER


En el ejemplo siguiente se usa la funcin AVG con la clusula OVER para proporcionar una
media mvil de ventas anuales para cada territorio de la tabla Sales.SalesPerson de la
base de datos AdventureWorks2012. Se crean particiones de los datos por TerritoryID y
se ordenan lgicamente por SalesYTD. Esto significa que la funcin AVG se calcula para

cada territorio en funcin del ao de ventas. Observe que para TerritoryID 1, solo hay dos
filas para el ao de ventas 2005, que representan los dos vendedores con ventas durante
ese ao. Se calculan las ventas medias de estas dos filas y la tercera fila que representa
las ventas durante el ao 2006 se incluye en el clculo.

SELECT BusinessEntityID, TerritoryID


,DATEPART(yy,ModifiedDate) AS SalesYear
,CONVERT(varchar(20),SalesYTD,1) AS SalesYTD
,CONVERT(varchar(20),AVG(SalesYTD) OVER (PARTITION BY TerritoryID
ORDER BY
DATEPART(yy,ModifiedDate)
),1) AS MovingAvg
,CONVERT(varchar(20),SUM(SalesYTD) OVER (PARTITION BY TerritoryID
ORDER BY
DATEPART(yy,ModifiedDate)
),1) AS CumulativeTotal
FROM Sales.SalesPerson
WHERE TerritoryID IS NULL OR TerritoryID < 5
ORDER BY TerritoryID,SalesYear;

El conjunto de resultados es el siguiente:

Mnimo: min
Devuelve el valor mnimo de la expresin. Puede ir seguida de la clusula OVER.
Sintaxis
MIN ( [ ALL | DISTINCT ] expression )
OVER ( [ partition_by_clause ] order_by_clause )
Tipos devueltos

Devuelve un valor igual a expression.

Comentarios
MIN pasa por alto los valores NULL.
En el caso de columnas de datos de caracteres, MIN busca el valor ms bajo en la
secuencia de ordenacin.
MIN es una funcin determinista cuando se utiliza sin las clusulas OVER y ORDER BY. Es
no determinista si se especifica con las clusulas OVER y ORDER BY. Para obtener ms
informacin.
Ejemplos
A. Ejemplo sencillo
En el ejemplo siguiente se devuelve la tasa de impuestos ms baja (mnima).
SELECT MIN(TaxRate)
FROM Sales.SalesTaxRate;
GO

El conjunto de resultados es el siguiente.

B. Usar la clusula OVER


En el ejemplo siguiente se usan las funciones MIN, MAX, AVG y COUNT con la clusula
OVER para proporcionar los valores agregados de cada departamento de la tabla
HumanResources.Department de la base de datos AdventureWorks2012.

SELECT DISTINCT Name


, MIN(Rate) OVER (PARTITION BY edh.DepartmentID) AS
MinSalary
, MAX(Rate) OVER (PARTITION BY edh.DepartmentID) AS
MaxSalary
, AVG(Rate) OVER (PARTITION BY edh.DepartmentID) AS
AvgSalary
,COUNT(edh.BusinessEntityID) OVER (PARTITION BY
edh.DepartmentID) AS EmployeesPerDept
FROM HumanResources.EmployeePayHistory AS eph
JOIN HumanResources.EmployeeDepartmentHistory AS edh
El conjunto
resultados es el siguiente:
ONdeeph.BusinessEntityID
= edh.BusinessEntityID
JOIN HumanResources.Department AS d
ON d.DepartmentID = edh.DepartmentID
WHERE edh.EndDate IS NULL

Mximo: Max
Devuelve el valor mximo de la expresin.
Sintaxis

MAX ( [ ALL | DISTINCT ] expression )


OVER ( [ partition_by_clause ] order_by_clause )

Tipos devueltos
Devuelve un valor igual a expresin.
Comentarios
MAX pasa por alto los valores NULL.
Para las columnas de caracteres, MAX busca el valor ms alto de la secuencia de
intercalacin.
MAX es una funcin determinista cuando se utiliza sin las clusulas OVER y ORDER BY. Es
no determinista si se especifica con las clusulas OVER y ORDER BY. Para obtener ms
informacin.

Ejemplos
A. Ejemplo sencillo
El ejemplo siguiente devuelve el tipo impositivo mayor (mximo) de la base de datos
AdventureWorks2012.
SELECT MAX(TaxRate)
FROM Sales.SalesTaxRate;
GO

El conjunto de resultados es el siguiente:

B. Usar la clusula OVER


En el ejemplo siguiente se usan las funciones MIN, MAX, AVG y COUNT con la clusula
OVER para proporcionar los valores agregados de cada departamento de la tabla
HumanResources.Department de la base de datos AdventureWorks2012.

SELECT DISTINCT Name


, MIN(Rate) OVER (PARTITION BY edh.DepartmentID) AS
MinSalary
, MAX(Rate) OVER (PARTITION BY edh.DepartmentID) AS
MaxSalary
, AVG(Rate) OVER (PARTITION BY edh.DepartmentID) AS
AvgSalary
,COUNT(edh.BusinessEntityID) OVER (PARTITION BY
edh.DepartmentID) AS EmployeesPerDept
FROM HumanResources.EmployeePayHistory AS eph
JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON eph.BusinessEntityID = edh.BusinessEntityID
JOIN HumanResources.Department AS d
ON d.DepartmentID = edh.DepartmentID
WHERE edh.EndDate IS NULL
ORDER BY Name;

El conjunto de resultados es el siguiente.

Total: sum
Devuelve la suma de todos los valores o solo de los valores DISTINCT de la expresin. SUM
solo puede utilizarse con columnas numricas. Se omiten los valores NULL.
Sintaxis
SUM ( [ ALL | DISTINCT ] expression )
OVER ( [ partition_by_clause ] order_by_clause )

Comentarios
SUM es una funcin determinista cuando se utiliza con las clusulas OVER y ORDER BY.
Es no determinista si se especifica con las clusulas OVER y ORDER BY. Para obtener ms
informacin.
Ejemplos
A. Usar SUM para devolver datos de resumen
En los ejemplos siguientes se muestra cmo usar la funcin SUM para devolver datos de
resumen de la base de datos AdventureWorks2012.

SELECT Color, SUM(ListPrice), SUM(StandardCost)


FROM Production.Product
WHERE Color IS NOT NULL
AND ListPrice != 0.00
AND Name LIKE 'Mountain%'
GROUP BY Color
ORDER BY Color;
GO

El conjunto de resultados es el siguiente.

Cuenta: count
Devuelve el nmero de elementos de un grupo. COUNT funciona como la funcin
COUNT_BIG. La nica diferencia entre ambas funciones est en los valores devueltos.
COUNT siempre devuelve un valor de tipo de datos int. COUNT_BIG siempre devuelve un
valor de tipo de datos bigint.
Sintaxis
COUNT ( { [ [ ALL | DISTINCT ] expression ] | * }
)
OVER ( [ partition_by_clause ]
order_by_clause )

Ejemplos
A. Usar COUNT y DISTINCT
En el ejemplo siguiente se muestra el nmero de cargos diferentes que puede tener un
empleado que trabaja en Adventure Works Cycles.
SELECT COUNT(DISTINCT Title)
FROM HumanResources.Employee;
GO

El conjunto de resultados es el siguiente.

B. Usar COUNT(*)
En el ejemplo siguiente se muestra el nmero total de empleados que trabajan en
Adventure Works Cycles.
SELECT COUNT(*)
FROM HumanResources.Employee;
GO

El conjunto de resultados es el siguiente.

PROCEDIMIENTOS ALMACENADOS
Procedimiento almacenado para ingresar datos a la tabla empleado
create procedure insertarEmpleado
@Nombre Varchar(50),
@Apellido Varchar(50),
@Sueldo Decimal(5,2)
as
insert into dbo.Empleado(Nombre,Apellido,Sueldo)
values(@Nombre,@Apellido,@Sueldo);
go
Ejecucin del procedimiento almacenado
execute insertarEmpleado 'Anthony','Arteaga',200.00
Procedimiento almacenado para actualizar datos a la tabla empleado
create procedure actualizarEmpleado
@id int,
@Nombres Varchar(50),
@Apellido Varchar(50),
@Sueldo Decimal(5,2)
as
update dbo.Empleado set Nombre=@Nombres,
Apellido=@Apellido,Sueldo=@Sueldo where id=@id;
go

Ejecucin del procedimiento almacenado


execute actualizarEmpleado 1,'Anthony','Laz',250.00
go

Procedimiento almacenado para eliminar datos a la tabla empleado


create procedure eliminarEmpleadonto
@id int
as
delete dbo.Empleado where id=@id;
go
Ejecucin del procedimiento almacenado
execute eliminarEmpleado 6
go
Procedimiento almacenado para consultar datos a la tabla empleado
create procedure consultaApellido
@Apellido Varchar(50)
as
select Nombre,Apellido,Sueldo from dbo.Empleado where
Apellido=@Apellido;
go
Ejecucin del procedimiento almacenado
execute consultaApellido 'Laz';
go

TABLAS TEMPORALES
Tabla temporal seleccionando todos las propiedades y datos de la tabla empleado
El nombre de la tabla temporal empieza con # siempre
select * into #Empleado1 from dbo.Empleado
go
Tabla temporal seleccionando todas las propiedades de la tabla empleado
El nombre de la tabla temporal empieza con # siempre
create table #Empleado2 (
id int identity (1,1) NOT NULL,
Nombre varchar (50),
Apellido varchar (50),
SueldoPromedio decimal(5,2)
constraint empleado_pk primary key (id)
);
go

Cursores
create table Empleado (
id int identity (1,1) NOT NULL,
Nombre varchar (50),
Apellido varchar (50),
Email Varchar(50),
Sueldo decimal(5,2)
constraint empleado_pk primary key (id)
);
insert into dbo.Empleado(Nombre,Apellido,Sueldo)values('Anthony','Arteaga',200.00)
insert into dbo.Empleado(Nombre,Apellido,Sueldo)values('Borracho','Pinargote',300.00)
insert into dbo.Empleado(Nombre,Apellido,Sueldo)values('Wendy','Pinargote',300.00)
insert into dbo.Empleado(Nombre,Apellido,Sueldo)values('Kerly','Delgado',300.00)
insert into dbo.Empleado(Nombre,Apellido,Sueldo)values('Juanito','Perez',300.00)
insert into dbo.Empleado(Nombre,Apellido,Sueldo)values('Gonzalo','Zambrano',300.00)
Creacin del cursor
declare @id int
declare @nombre varchar(50)
declare @apellido varchar(50)
declare cursor1 scroll cursor for
select id,Nombre,Apellido from Empleado
open cursor1
fetch next from cursor1 into @id,@nombre, @apellido
while @@fetch_status=0
Begin
update Empleado
set Email=
Lower(SUBSTRING(@nombre,1,1)+@Apellido+'@hotmail.com')
where id=@id;
fetch next from cursor1 into @id, @nombre, @apellido
END
close cursor1
Deallocate cursor1
VARIABLE DE TIPO TABLA
Se crea una variable tipo tabla con sus columnas
El nombre de la tabla siempre empieza con el @
DECLARE @MyTableVar table(
EmpID int NOT NULL,
OldVacationHours int,
NewVacationHours int,
ModifiedDate datetime);
UPDATE TOP (10) HumanResources.Employee

SET VacationHours = VacationHours * 1.25


OUTPUT INSERTED.BusinessEntityID,
DELETED.VacationHours,
INSERTED.VacationHours,
INSERTED.ModifiedDate
INTO @MyTableVar;
Para mortrar los datos modificados en la nueva tabla.
SELECT EmpID, OldVacationHours, NewVacationHours, ModifiedDate
FROM @MyTableVar;
GO
Para mostrar la tabla original
SELECT TOP (10) BusinessEntityID, VacationHours, ModifiedDate
FROM HumanResources.Employee;
GO

ROLLBACK , COMMIT Y ERRORES


Creacin de la table para poder trabajar
CREATE TABLE Cliente(
numCedula INT PRIMARY KEY,
nombre VARCHAR(20) NOT NULL,
apellidos VARCHAR(20),
numCelular varchar(10),
direccion varchar(20),
dinero int);
GO
COMMIT TRANSACTION (Transact-SQL): Marca el final de una transaccin correcta,
implcita o explcita. Si @@TRANCOUNT es 1, COMMIT TRANSACTION hace que todas las
modificaciones efectuadas sobre los datos desde el inicio de la transaccin sean parte
permanente de la base de datos, libera los recursos mantenidos por la transaccin y
reduce @@TRANCOUNT a 0. Si @@TRANCOUNT es mayor que 1, COMMIT
TRANSACTION solo reduce @@TRANCOUNT en 1 y la transaccin sigue activa.
Sintaxis
COMMIT [ { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable ] ] [
WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]
[;]
Ejemplo: Creacin del procedimiento almacenado insertar normal
create PROCEDURE insertarCliente @PriKey INT, @2 CHAR(20),@3 CHAR(20),
@4 CHAR(10), @5 CHAR(20), @6 int AS
BEGIN TRANSACTION InProc
INSERT INTO Cliente VALUES (@PriKey, @2, @3, @4, @5, @6)
INSERT INTO Cliente VALUES (@PriKey+1, @2, @3, @4, @5, @6)
COMMIT TRANSACTION InProc;

ROLLBACK TRANSACTION (Transact-SQL)


Revierte una transaccin explcita o implcita hasta el inicio de la transaccin o hasta un
punto de retorno dentro de la transaccin. Puede usar ROLLBACK TRANSACTION para
borrar todas las modificaciones de datos realizadas desde el inicio de la transaccin o
hasta un punto de retorno. Tambin libera los recursos que mantiene la transaccin.
Sintaxis
ROLLBACK { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable
| savepoint_name | @savepoint_variable ]
[;]

Ejemplo de rollback
BEGIN TRANSACTION OutOfProc; /* Starts a transaction */
GO
EXEC insertarCliente 1315604366, 'Christian','Pinargote','0992323734','Manta',
5;
SELECT * FROM Cliente;
GO si sucede un error en la transaccin elimina los cambios hechos antes
ROLLBACK TRANSACTION OutOfProc; /* Rolls back the outertransaction */
GO
Ejemplo de rollback con error
declare @Error int
begin tran
update Cliente set dinero=10
where numCedula=1315604366
insert into Cliente values (1315604361,
'Gonzalo','Pinargote','0992323734','Manta', 10)
set @Error=@Error
if(@Error<>0)
begin tran
rollback si sucede un error en la transaccin elimina los cambios
hechos antes
print 'No se pudo completar la transaccin debido a un error'
go
TRY...CATCH (Transact-SQL)
Implementa un mecanismo de control de errores para Transact-SQL que es similar al
control de excepciones en los lenguajes Microsoft Visual C# y Microsoft Visual C++. Se
puede incluir un grupo de instrucciones Transact-SQL en un bloque TRY. Si se produce un
error en el bloque TRY, el control se transfiere a otro grupo de instrucciones que est
incluido en un bloque CATCH.

Sintaxis
BEGIN TRY
{ sql_statement | statement_block }
END TRY
BEGIN CATCH
[ { sql_statement | statement_block } ]
END CATCH
[;]

Ejemplo: Creacin del procedimiento almacenado insertar con Try/cath


create PROCEDURE insertarCliente2
@PriKey INT,
@2 CHAR(20),
@3 CHAR(20),
@4 CHAR(10),
@5 CHAR(20),
@6 int AS
BEGIN TRY
INSERT INTO Cliente VALUES (@PriKey, @2, @3, @4, @5, @6)
END TRY
BEGIN CATCH -- si sucede un error en la transaccin no se reza ningn cambio en la BD
select ERROR_NUMBER() AS 'Nmero del error', ERROR_MESSAGE() as 'Descripcin'
muestra EL NUMNERO DE ERROR Y EL MENSAJE DEL ERROR
END CATCH
GO;

Ejecucin del procedimiento


EXEC insertarCliente2 1315604366, 'Christian','Pinargote','0992323734','Manta', 5;
GO

You might also like