0% found this document useful (0 votes)
15 views20 pages

MODULO03

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views20 pages

MODULO03

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 20

LTORRES SQL SERVER 2017

MODULO 2 – TRANSACT SQL


TEMAS

- Opciones de búsqueda en clausula WHERE


(=,like,between,in, is null)
- Operadores lógicos (and, or,not)
- Funciones matemáticas (suma, promedio, mínimo,
máximo, contar)
- Order by
- Joins (Left Join, Rigth join, Inner join, full join)
- Consultas de agrupamiento (group by, having)
- Case when
- Update
- Creación de vistas
- Diseño de vistas
- Demostración de consulta con índices
LTORRES SQL SERVER 2017

SQL USE
USE [testDB]

SQL SELECT
SELECT * FROM [Person].[Person];
SELECT DISTINCT [FirstName]
FROM [Person].[Person];

SELECT *
FROM [Person].[Person]
WHERE [FirstName]='Gustavo'

SELECT *
FROM [Person].[Person]
WHERE LastName='Brooks' AND FIRSTNAME='Allison'

SELECT *
FROM [Person].[Person]
WHERE (FIRSTNAME='Ariana' OR FIRSTNAME='Arianna')

SELECT *
FROM [Person].[Person]
WHERE LastName='Brooks' and FIRSTNAME like 'Alex%'

SELECT *
FROM [Person].[Person]
WHERE LastName='Brooks' and FIRSTNAME like '%lyn'

SELECT *
FROM [Person].[Person]
WHERE LastName='Brooks' and FIRSTNAME like 'a%a'

SELECT *
FROM [Person].[Person]
WHERE FIRSTNAME LIKE '[mj]%';
SELECT *
FROM [Person].[Person]
WHERE (FIRSTNAME='Ariana' OR FIRSTNAME='Arianna') AND NOT
LastName='Brooks'

SELECT *
LTORRES SQL SERVER 2017

FROM [Person].[Person]
ORDER BY ModifiedDate
SELECT LastName,FirstName
FROM [Person].[Person]
ORDER BY LastName,FirstName

SELECT *
FROM [Person].[Person]
where MiddleName is not null

SELECT TOP 10 *
FROM [Person].[Person]
order by ModifiedDate desc;

SELECT TOP 20 percent *


FROM [Person].[Person]
order by ModifiedDate desc;

SELECT MIN(ModifiedDate)
FROM [Person].[Person]

SELECT MAX(ModifiedDate)
FROM [Person].[Person]

select count(*),sum(TotalDue),avg(TotalDue)
from [Sales].[SalesOrderHeader]
where SalesPersonID=279

select count(*),sum(TotalDue),avg(TotalDue)
from [Sales].[SalesOrderHeader]
where SalesPersonID=279
and ModifiedDate in ('2014-05-08','2014-05-07')

select count(*),sum(TotalDue),avg(TotalDue)
from [Sales].[SalesOrderHeader]
where SalesPersonID=279
and ModifiedDate between '2014-05-01' and '2014-05-31'

select count(*) as NroVentas,sum(TotalDue) as TotalVenta,avg(TotalDue)


PromedioVenta
from [Sales].[SalesOrderHeader]
where SalesPersonID=279
and ModifiedDate between '2014-05-01' and '2014-05-31'
LTORRES SQL SERVER 2017

SQL JOIN

select
from [AdventureWorks2017].[Person].[Person] a
left join [AdventureWorks2017].[Person].[BusinessEntityAddress] b on
a.BusinessEntityID=b.BusinessEntityID and b.AddressTypeID=2
--- 19972

select *
from [AdventureWorks2017].[Person].[Person] a
right join [AdventureWorks2017].[Person].[BusinessEntityAddress] b on
a.BusinessEntityID=b.BusinessEntityID and b.AddressTypeID=2
-- 19614

select *
from [AdventureWorks2017].[Person].[Person] a
inner join [AdventureWorks2017].[Person].[BusinessEntityAddress] b on
a.BusinessEntityID=b.BusinessEntityID and b.AddressTypeID=2
--- 18,774

select *
from [AdventureWorks2017].[Person].[Person] a
full join [AdventureWorks2017].[Person].[BusinessEntityAddress] b on
a.BusinessEntityID=b.BusinessEntityID and b.AddressTypeID=2
--- 20,812
LTORRES SQL SERVER 2017

SQL GROUP BY
SELECT LastName,COUNT(*)
FROM [Person].[Person]
GROUP BY LastName

SELECT LastName,Firstname,COUNT(*) as Cantidad


FROM [Person].[Person]
GROUP BY LastName,Firstname

SELECT TerritoryID,count(*) as Cantidad,sum(TerritoryID) as MontoVenta


from [Sales].[SalesOrderHeader]
group by TerritoryID

SQL HAVING
SELECT LastName,COUNT(*)
FROM [Person].[Person]
GROUP BY LastName
having COUNT(*) >100

SELECT TerritoryID,count(*) as Cantidad,sum(TerritoryID) as MontoVenta


from [Sales].[SalesOrderHeader]
group by TerritoryID
having count(*)>1000

SQL ORDER BY
SELECT LastName,COUNT(*)
FROM [Person].[Person]
GROUP BY LastName
having COUNT(*) >100
order by LastName asc

SELECT TerritoryID,count(*) as Cantidad,sum(TerritoryID) as MontoVenta


from [Sales].[SalesOrderHeader]
group by TerritoryID
having count(*)>1000
order by sum(TerritoryID) desc
LTORRES SQL SERVER 2017

select SUBSTRING(CONVERT(NVARCHAR,ModifiedDate,102),1,7) as
PERIODO,count(*) as NroVentas,sum(TotalDue) as TotalVenta,avg(TotalDue)
PromedioVenta
from [Sales].[SalesOrderHeader]
WHERE ModifiedDate between '2014-01-01' and '2014-12-31'
GROUP BY SUBSTRING(CONVERT(NVARCHAR,ModifiedDate,102),1,7)
ORDER BY SUBSTRING(CONVERT(NVARCHAR,ModifiedDate,102),1,7) ASC

select SUBSTRING(CONVERT(NVARCHAR,ModifiedDate,102),1,7) as
PERIODO,SalesPersonID,count(*) as NroVentas,sum(TotalDue) as
TotalVenta,avg(TotalDue) PromedioVenta
from [Sales].[SalesOrderHeader]
where SalesPersonID=279
GROUP BY SUBSTRING(CONVERT(NVARCHAR,ModifiedDate,102),1,7),SalespersonID
ORDER BY SUBSTRING(CONVERT(NVARCHAR,ModifiedDate,102),1,7) ASC
LTORRES SQL SERVER 2017

SQL CASE WHEN


SELECT *
FROM HumanResources.Department

SELECT D.*,
(CASE WHEN d.Name = 'Production' THEN 'PRD'
WHEN d.Name = 'Engineering' THEN 'ING'
WHEN d.Name = 'Marketing' THEN 'MKT'
ELSE NULL END) Nombre_siglas
FROM HumanResources.Department d
WHERE d.Name IN ('Production', 'Engineering', 'Marketing')

SELECT D.*,
(CASE WHEN d.Name = 'Production' THEN 1
WHEN d.Name = 'Engineering' THEN 1
WHEN d.Name = 'Marketing' THEN 1
ELSE 0 END) Nombre_siglas
FROM HumanResources.Department d
LTORRES SQL SERVER 2017

SELECT D.*,
(CASE WHEN d.Name = 'Production' THEN 1 ELSE 0 END) AS Production,
(CASE WHEN d.Name = 'Engineering' THEN 1 ELSE 0 END) AS Engineering,
(CASE WHEN d.Name = 'Marketing' THEN 1 ELSE 0 END) AS Marketing
FROM HumanResources.Department d
WHERE d.Name IN ('Production', 'Engineering', 'Marketing')

SELECT * FROM HumanResources.EmployeeDepartmentHistory


WHERE BusinessEntityID=4

SELECT * FROM HumanResources.Shift

-- CONSULTA DE LOS EMPLEADOS Y EL DEPARTAMENTO VIGENTE DONDE LABORAN


(FILTRANDO A 3 DEPTOS)
SELECT H.*,s.Name AS ShiftName, D.NAME
FROM HumanResources.EmployeeDepartmentHistory h INNER JOIN
HumanResources.Department d ON h.DepartmentID = d.DepartmentID
INNER JOIN HumanResources.Shift s ON h.ShiftID = s.ShiftID
WHERE h.EndDate IS NULL
AND d.Name IN ('Production', 'Engineering', 'Marketing')
LTORRES SQL SERVER 2017

-- RESUMEN PIVOTEADO DE TURNOS Y CANTIDAD DE TRABAJADORES POR DEPARTAMENTO


SELECT s.Name AS ShiftName,
SUM(CASE WHEN d.Name = 'Production' THEN 1 ELSE 0 END) AS Production,
SUM(CASE WHEN d.Name = 'Engineering'THEN 1 ELSE 0 END) AS Engineering,
SUM(CASE WHEN d.Name = 'Marketing' THEN 1 ELSE 0 END) AS Marketing
FROM HumanResources.EmployeeDepartmentHistory h INNER JOIN
HumanResources.Department d ON h.DepartmentID = d.DepartmentID
INNER JOIN HumanResources.Shift s ON h.ShiftID = s.ShiftID
WHERE h.EndDate IS NULL
AND d.Name IN ('Production', 'Engineering', 'Marketing')
GROUP BY s.Name;

UPDATE
Tener mucha precaución, si se omite la condición “where” se
actualizará toda la tabla !!!

SELECT * FROM [dbo].[Persons]


where PersonID=285
-- Address
-- 7484 Roundtree Drive

UPDATE [dbo].[Persons]
SET Address = '7448 Roundtree Drive'
WHERE PersonID=285;
(1 row affected)

SELECT * FROM [dbo].[Persons]


where PersonID=285

UPDATE [dbo].[Persons]
SET Address = '7448 Roundtree Drive', FirstName='Abas'
WHERE PersonID=285;
(1 row affected)

SELECT * FROM [dbo].[Persons]


where PersonID=285
LTORRES SQL SERVER 2017

UPDATE DESDE UNA TABLA

select * from [Sales].[SalesPerson]


WHERE BusinessEntityID=274

-- Actualizamos el territorio con una subconsulta a otra tabla


update [Sales].[SalesPerson]
set TerritoryID=( select top 1 TerritoryID
from [Sales].[SalesOrderHeader]
where SalesPersonID=274
group by TerritoryID
order by sum(totaldue) desc
)
where BusinessEntityID=274
LTORRES SQL SERVER 2017

CREACION DE VISTAS
select
BusinessEntityID,PersonType,NameStyle,Title,FirstName,MiddleName,La
stName,Suffix,EmailPromotion
into [Person]
from [AdventureWorks2017].[Person].[Person]

(19972 rows affected)

select *
into [SalesOrderDetail]
from [AdventureWorks2017].[Sales].[SalesOrderDetail]

(121317 rows affected)

select *
INTO [SalesOrderHeader]
from [AdventureWorks2017].[Sales].[SalesOrderHeader]

(31465 rows affected)

create view vVentas


as
SELECT *
FROM [SalesOrderHeader]

create view vVentas_Cliente as


SELECT
a.SalesOrderNumber,a.CustomerID,b.OrderQty,b.ProductID,b.LineTotal,
(case when C.FirstName is null then 'Tienda' else
ISNULL(C.FirstName,'')+' '+ISNULL(C.MiddleName,'')+'
'+ISNULL(LastName,'') end) as Nombre_Vendedor
FROM [SalesOrderHeader] A LEFT JOIN [SalesOrderDetail] B ON
A.[SalesOrderID]=B.[SalesOrderID]
LEFT JOIN [dbo].[Person] C ON
a.SalesPersonID=C.BusinessEntityID
LTORRES SQL SERVER 2017

DISEÑO DE UNA VISTA

DROP VIEW vVentas_Cliente


LTORRES SQL SERVER 2017

APLICACION DE INDICES
--- CARGAR BASE COMPARTIDA CON OPCION DE IMPORTACION DE ARCHIVOS PLANOS
LTORRES SQL SERVER 2017
LTORRES SQL SERVER 2017
LTORRES SQL SERVER 2017
LTORRES SQL SERVER 2017
LTORRES SQL SERVER 2017

select *
from [dbo].[historico_cliente_csv]
where id_asociado='43016' and id_periodo<='202107'
LTORRES SQL SERVER 2017

-- borrar todos los planes de memoria


DBCC freeproccache with no_infomsgs
-- vaciar la cache de datos
DBCC DROPCLEANBUFFERS with no_infomsgs

CREATE INDEX IDX_clienteca_id_aso on [historico_cliente_csv] (id_aso);


LTORRES SQL SERVER 2017

select *
from [dbo].[historico_cliente_csv]
where id_asociado='43016' and id_periodo<='202107'

drop index IDX_cliente_id_aso on [historico_cliente_csv];

You might also like