Está en la página 1de 10

FACULTAD DE INGENIERIA

ESCUELA ACADÉMICO PROFESIONAL


INGENIERÍA DE SISTEMAS

Base de Datos avanzada

Mendoza Cotrina, Jhamil Saúl


CICLO:
V (QUINTO) – tercer año académico
DOCENTE:
Carlos Enrique Aparicio Arteaga

Cajamarca 2019

1
Contenido

CONSULTAR LA BASE DE DATOS:........................................................................................ 3


FUNCION GROUP BY: ............................................................................................................... 3
FUNCION GROUP BY CON SENTENCIA HAVING: .............................................................. 4
PROCEDIMIENTOS ALMACENADOS : .................................................................................. 5
FUNCTION UPDATE: ................................................................................................................. 7
FUNCTION INSERT: .................................................................................................................. 8
FUNCTION DELETE: ................................................................................................................. 8
TRIGGERS: .................................................................................................................................. 9

2
MANUAL DE BASE DE DATOS AVANZADA
Que es SQL: El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos
normalizado, utilizado por los diferentes motores de bases de datos para realizar
determinadas operaciones sobre los datos o sobre la estructura de los mismos.

CONSULTAR LA BASE DE DATOS:

BUSQUEDA SIMPLE

SELECT …. FROM …… WHERE …… ETC

SELECT (CAMPOS) FROM (TABLAS) WHERE (CONDICIONES)….


EJEMPLOS:
Select ProductID, ProductName, Discontinued
from Products as p
where Discontinued=0

select OrderID, OrderDate


from Orders as o
where YEAR(OrderDate)='1996'

BUSQUEDA CON INNER JOIN


Sirve para relacionar varias tablas entre si.
Select S.SupplierID, CompanyName, Address, City, country, ProductID, ProductName,
Discontinued
from Products as p
inner join Suppliers as s
on s.SupplierID=p.SupplierID
where Discontinued=0

select orderid, OrderDate, FirstName, LastName, c.CustomerID,CompanyName from


orders as O
inner join Employees as E on E.EmployeeID=o.EmployeeID
inner join Customers as C on c.CustomerID = o.CustomerID
where YEAR(OrderDate)=1996

FUNCION GROUP BY:

La cláusula GROUP BY unida a un SELECT permite agrupar filas según las columnas
que se indiquen como parámetros, y se suele utilizar en conjunto con las funciones de
agrupación, para obtener datos resumidos y agrupados por las columnas que se necesiten.

Ejemplos
--Mostrar el # de productos que hay en cada categoria

3
--(Mostrar nombre de la compañia)
select categoryname , COUNT(*) as '# de Productos'
from Categories as C
inner join Products as P on p.CategoryID=c.CategoryID
group by CategoryName

--Cuantas Ordenes se han realizado en cada año.


select year(OrderDate) as 'Año', COUNT(*) as 'Ordenes por año'
from Orders as O
inner join [Order Details] as OD on OD.OrderID=O.OrderID
group by YEAR(OrderDate)
--Cuantas Ordenes se han realizado en cada mes.
select month(OrderDate) as 'Mes', COUNT(*) as 'Ordenes por mes'
from Orders as O
inner join [Order Details] as OD on OD.OrderID=O.OrderID
group by month(OrderDate)
--Cuantas ordenes se han realizado en cada mes y año
select Year(OrderDate) as 'Año', MONTH(OrderDate) as 'Mes', COUNT(*) as 'Ordenes
por mes'
from Orders as O
inner join [Order Details] as OD on OD.OrderID=O.OrderID
group by year(OrderDate), Month(OrderDate)

--MOSTRAR EL MONTO TOTAL (DINERO)QUE GENERÓ CADA CLIENTE (cOMPANYnAME) EN CADA


AÑO
select c.CompanyName as 'Cliente', SUM(UnitPrice*Quantity) as 'monto total',
year(orderdate) as año
from [Order Details] as OD
join Orders as O on o.OrderID =OD.OrderID
join Customers as C on c.CustomerID=o.CustomerID
group by c.CompanyName, year(orderdate)

--MOSTRAR CUANTOSPRODUCTOS SE ORDENARON (VENDIERON) EN CADA PAIS DE LOS CLIENTES


select Country as PAIS, sum(Quantity) as CANTIDAD
from Customers as C
join Orders as O on o.CustomerID=c.CustomerID
join [Order Details] as OD on od.OrderID=o.OrderID
group by Country
order by country

--MOSTRAR CUANTOS PRODUCTOS VENDIDOS POR CADA EMPLEADO EN CADA MES


select FirstName+' '+LastName as 'Empleado', SUM(quantity) as cantidad ,
DATENAME(MM,OrderDate)
from Employees as E
join Orders as O on o.EmployeeID=e.EmployeeID
join [Order Details] as OD on OD.OrderID=O.OrderID
group by FirstName+' '+LastName, DATENAME(MM,OrderDate)
ORDER BY FirstName+' '+LastName

FUNCION GROUP BY CON SENTENCIA HAVING:

La función HAVING se utiliza para incluir condiciones con alguna función SQL del tipo
SUM, MAX, .. Como la cláusula WHERE no se puede utilizar con funciones SQL del
tipo SUM, MAX, entonces utilizamos en su lugar,HAVING

--calcular cuantos clientes existen en cada pais


select Country, COUNT(*) 'Cantidad de Clientes'

4
from Customers
group by Country
having Country ='USA' or Country = 'UK'
--Mostrar el numero de proveedores que hay en cada ciudad
select City, COUNT(*) 'numero de proveedore'
from Suppliers
group by City
having COUNT(*)<=2
-- Mostrar el número de productos que suministra cada proveedor (companyname de
sppliers). Sólo número de productos menores a 3.
SELECT CompanyName 'Proveedor', COUNT(*) 'Nº de Productos'
FROM Products P
INNER JOIN Suppliers S ON S.SupplierID=P.SupplierID
GROUP BY CompanyName
HAVING COUNT(*) < 3
ORDER BY 1
-- Mostrar cuántos productos (cantidad de productos) se han evndido en cada mes
por cada cliente.
-- Solamente el primer semestre (de enero a junio) y la cantidad de productos
antre 50 y 200 (incluidos)
SELECT ContactName 'Cliente', DATENAME(MM,OrderDate)'Mes', SUM(Quantity)'Nº
Productos'
FROM Customers C
INNER JOIN Orders O ON C.CustomerID=O.CustomerID
INNER JOIN [Order Details] OD ON O.OrderID=OD.OrderID
WHERE MONTH(OrderDate) BETWEEN 1 AND 6
GROUP BY ContactName, DATENAME(MM,OrderDate)
HAVING SUM(Quantity) BETWEEN 50 AND 200

PROCEDIMIENTOS ALMACENADOS :

Un procedimiento almacenado de SQL Server es un grupo de una o varias


instrucciones Transact-SQL o una referencia a un método de Common Runtime
Language (CLR) de Microsoft .NET Framework. Los procedimientos se asemejan a las
construcciones de otros lenguajes de programación, porque pueden:

 Aceptar parámetros de entrada y devolver varios valores en forma de parámetros


de salida al programa que realiza la llamada.
 Contener instrucciones de programación que realicen operaciones en la base de
datos. Entre otras, pueden contener llamadas a otros procedimientos.
 Devolver un valor de estado a un programa que realiza una llamada para indicar si
la operación se ha realizado correctamente o se han producido errores, y el motivo
de estos.

EJEMPLOS

-CREAR UN STOCK PROCIDOIO PARA MOSTRAR LOS EMPLEADOS DE LA EMPRESA


ALTER procedure pa_mostrar_empleados
as
select EmployeeID, FirstName,LastName
from Employees

-- Si quiero modificarlo de tal manera que salgan productos con los CategoryID
que deseo
ALTER PROCEDURE PA_Mostrar_Productos
@CATE INT -- Creo un parámetro que tendrá el CategoryID que yo
quiero

5
AS
SELECT*
FROM Products
WHERE CategoryID=@CATE
-- Lo ejecutamos
EXEC PA_Mostrar_Productos 1 --El 1 es el Category ID que yo quiero

--mMUESTRE LOS PEDIDOS DE UN MES Y AÑO INGRESADOS


ALTER PROCEDURE PA_ORDENPORAÑO_MES @A DATETIME, @M INT
AS
SELECT *
FROM Orders
WHERE YEAR(OrderDate)=@A AND MONTH(OrderDate)=@M

EXEC PA_ORDENPORAÑO_MES 1997,1

--1.- MOSTRAR LOS CLIENTES (COMPANYNAME) QUE CONTENGA EN SU NOMBRE UNA LETRA
--O LETRAS INGRESADOS
CREATE PROCEDURE PA_CLIENTESXLETRA @L VARCHAR(30)
AS
SELECT CompanyName
FROM Customers
WHERE CompanyName LIKE '%'+@L+'%'

EXEC PA_CLIENTESXLETRA A
--2.- MOSTRAR LOS CLIENTES DE UN PAIS INGRESADO
ALTER PROCEDURE PA_CLIENTES_X_PAIS @P VARCHAR(15)
AS
SELECT *
FROM Customers
WHERE Country= @P

EXEC PA_CLIENTES_X_PAIS MEXICO

-- 4.- QUE INSERTE REGISTROS DE LA TABLA EMPLEADOS


ALTER PROCEDURE PA_INGRESAR_DATOS @COD CHAR(4), @nom varchar(25), @APE
VARCHAR(25), @DIR VARCHAR(35), @CITY VARCHAR(35)
AS
insert empleados (CodEmpleado,NomEmpleado,ApeEmpleado,Dir,Ciudad)
values (@COD,@nom,@APE,@DIR,@CITY)

EXEC PA_INGRESAR_DATOS J,JHAMIL,MENDOZA,RAFAEL,CAJAMARCA


SELECT *
FROM empleados

-- Crea un SP que permita insertar un registro en la tabla "Empleados" generarndo


el código:
-- X001, X002, X003 ... automáticamente, donde "X" es el primer caracter el
apellido
ALTER PROC PA_Insertar_Empleado
@nom varchar(25),
@APE VARCHAR(25),
@DIR VARCHAR(35),
@CITY VARCHAR(35),
@FEC DATETIME
AS

DECLARE @COD CHAR(4)


DECLARE @NR INT

SELECT @NR = COUNT(*) + 1


from Empleados

6
IF @NR <=9
SET @COD = SUBSTRING(@APE,1,1)+'00' + LTRIM(STR(@NR))
ELSE IF @NR < 100
SET @COD = SUBSTRING(@APE,1,1)+'0' + LTRIM(STR(@NR))
ELSE
SET @COD = SUBSTRING(@APE,1,1) + LTRIM(STR(@NR))

insert into empleados


values (@COD,@nom,@APE,@DIR,@CITY,@FEC)

SELECT *
FROM empleados

exec PA_Insertar_Empleado'MARCO', 'ARSENAS', 'RAFAEL NARVAES 123', 'CAJAMARCA',


'11/04/1998'

--CREAR UNA FUNCION QUE VUELVA LA SUMA DE N TERMINOS DE LA SERIE


-- 1,2,3,4,...
ALTER FUNCTION SUMA_nPRIMEROS
(@NT INT)
RETURNS INT
BEGIN
DECLARE @SUMA INT
DECLARE @S INT
SET @SUMA=0
SET @S=1
WHILE (@S<=@NT)
BEGIN
SET @SUMA=@SUMA+2*@S
SET @S=@S+1
END
RETURN @SUMA
END
SELECT DBO.SUMA_nPRIMEROS (3)

FUNCTION UPDATE:

La sentencia UPDATE se utiliza para modificar valores en una tabla. La sintaxis de


SQL UPDATE es:

UPDATE nombre_tabla
SET columna1 = valor1, columna2 = valor2
WHERE columna3 = valor3

La cláusula SET establece los nuevos valores para las columnas indicadas. La cláusula
WHERE sirve para seleccionar las filas que queremos modificar. Ojo: Si omitimos la
cláusula WHERE, por defecto, modificará los valores en todas las filas de la tabla.

EJEMPLOS

UPDATE Customers
SET Address = 'Jr. Huánuco 144'
WHERE CustomerID='ALFKI'

7
-- Reducir el precio (UnitPrice) de los productos en 10%, a los productos de las
categorías 2 y 4
UPDATE Products
SET UnitPrice = (UnitPrice*0.90)
WHERE CategoryID IN (2,4)
-- Aumentar el stock en 200 prodcutos más, en cada producto que suministra los
proveedores 1,5 y 7.
UPDATE Products
SET UnitsInStock = (UnitsInStock+200)
WHERE SupplierID IN (1,5,7)
--Cambiar las órdenes o pedidos del año 1998 y colocarles el código de empleado
5.
UPDATE Orders
SET EmployeeID = 5
WHERE YEAR(OrderDate)=1998

FUNCTION INSERT:

La sentencia INSERT INTO se utiliza para insertar nuevas filas en una tabla. Es posible
insertar una nueva fila en una tabla de dos formas distintas:

INSERT INTO nombre_tabla


VALUES (valor1, valor2, valor3, .)

INSERT INTO nombre_tabla (columna1, columna2, columna3,.)


VALUES (valor1, valor2, valor3, .)

EJEMPLO

-- E insertar en la tabla 'Empleados' con comandos 3 registros:


INSERT INTO Empleados
VALUES (1,'Miguel', 'Alayo', 'Jr. Manuel seoane 372','Cajamarca',11/04/1998),
(2,'Juan', 'Rabanal', 'Jr. Sucre 490','Trujillo',03/03/1977),
(3,'Francisco', 'Cachi', 'Av. Atahualpa 560','Cajamarca',13/05/2000)
SELECT* FROM Empleados

INSERT INTO Employees (LastName, FirstName)


VALUES('Torres', 'José')

FUNCTION DELETE:

La sentencia DELETE sirve para borrar filas de una tabla. La sintaxis de SQL
DELETE es:

DELETE FROM nombre_tabla


WHERE nombre_columna = valor

Si queremos borrar todos los registros o filas de una tabla, se utiliza la sentencia:

8
DELETE * FROM nombre_tabla;

EJEMPLO

-- Delete no elimina registros que están compartidos son otras tablas--


DELETE FROM Orders
WHERE OrderID=10248

TRIGGERS:
Los triggers o disparadores son objetos de la base de datos que ejecutan acciones cuando
se producen ciertos eventos (tanto DML como DDL) (inserciones, modificaciones,
borrados, creación de tablas, etc).
CREATE TRIGGER ACTUALIZAR_STOCK_INSERT
ON [ORDER DETAILS]
FOR INSERT
AS
DECLARE @ID INT, @Q INT

SELECT @ID=ProductID, @Q=Quantity


FROM inserted
UPDATE Products
SET UnitsInStock=UnitsInStock - @Q
WHERE ProductID=@ID

----------------OTRA FORMA------------------
AS
UPDATE Products
SET UnitsInStock=UnitsInStock-I.QUANTITY
FROM Products P
JOIN inserted I ON P.ProductID=I.ProductID

--SEGUNDO EJERCICIO
ALTER TRIGGER ACTUALIZAR_STOCK_DELETED
ON [ORDER DETAILS]
FOR DELETE
AS
DECLARE @ID INT, @Q INT

SELECT @ID=ProductID, @Q=Quantity


FROM deleted
UPDATE Products
SET UnitsInStock=UnitsInStock + @Q
WHERE ProductID=@ID

DELETE [Order Details]


WHERE OrderID=10262 AND ProductID=7

----TECER EJERCICIO----UPDATEEE------
CREATE TRIGGER ACTUALIZAR_STOCK_UPDATE
ON [ORDER DETAILS]
FOR UPDATE
AS
Update Products
set UnitsInStock=UnitsInStock+D.Quantity
from products as P inner join

9
DELETED as D on D.ProductID=P.ProductID

Update Products
set UnitsInStock = UnitsInStock - D.Quantity
from products as P inner join
INSERTED as D on D.ProductID=P.ProductID

10

También podría gustarte