Advertisement
Guest User

CLASE 3 SQL

a guest
Nov 16th, 2019
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 25.96 KB | None | 0 0
  1. use AdventureWorks2016CTP3
  2. go
  3.  
  4. SELECT ProductID, NAME 'Nombre Producto' , MakeFlag 'FLAG' , ListPrice 'PRECIO'
  5. FROM Production.Product
  6. WHERE ListPrice > 0 AND ListPrice < 40
  7. ORDER BY ListPrice DESC
  8.  
  9. SELECT ProductID, NAME 'Nombre Producto' , MakeFlag 'FLAG' , ListPrice 'PRECIO' , WeightUnitMeasureCode 'CODGIO PESO'
  10. FROM Production.Product
  11. WHERE (WeightUnitMeasureCode ='G'
  12.       OR WeightUnitMeasureCode ='LB') AND (ProductID = 795 OR ProductID = 818)
  13.  
  14. SELECT P.Productid, P.ListPrice, P.COLOR
  15. FROM Production.Product P
  16. WHERE (P.ListPrice < 60 AND Color='Yellow') OR (p.ListPrice>231 and Color='Silver')
  17.  
  18. SELECT P.Productid, P.ListPrice, P.COLOR
  19. FROM Production.Product P
  20. WHERE P.Color is NOT NULL
  21.  
  22. SELECT P.ProductID, P.name,
  23.        P.ListPrice
  24. FROM Production.Product P
  25. WHERE P.ListPrice BETWEEN 0 AND 10 -- WHERE P.ListPrice >= 0 and P.ListPirce <=10 SON LO MISMO
  26. ORDER BY p.ListPrice
  27.  
  28. SELECT PE.LastName , PE.FirstName , PE.MiddleName
  29. FROM Person.Person PE
  30. --WHERE PE.MiddleName= 'A' OR PE.MiddleName = 'D' OR PE.MiddleName = 'R' ES LO MISMO QUE IN
  31. WHERE PE.MiddleName IN ('A' ,'D', 'R')
  32. ORDER BY PE.MiddleName
  33.  
  34. /* LABORATORIO RECUPERO DE DATOS */
  35.  
  36. --1 distinct
  37. SELECT DISTINCT ProductID
  38. FROM Sales.SalesOrderDetail
  39.  
  40. --1 union
  41. SELECT ProductID
  42. FROM Sales.SalesOrderDetail
  43. UNION ALL
  44. SELECT ProductID
  45. FROM Production.WorkOrder
  46. --2
  47. SELECT ProductID
  48. FROM Sales.SalesOrderDetail
  49. UNION
  50. SELECT ProductID
  51. FROM Production.WorkOrder
  52.  
  53. --1 Case
  54. SELECT BusinessEntityId,
  55.  Gender = CASE WHEN Gender='M' then 'Masculino'
  56.      WHEN Gender='F' then 'Femenino'
  57.      END
  58. FROM HumanResources.Employee
  59. --2
  60.  
  61. SELECT  [BusinessEntityID]
  62.         ,[SalariedFlag]
  63. FROM [HumanResources].[Employee]
  64. ORDER BY
  65.         CASE [SalariedFlag] WHEN 1 THEN [BusinessEntityID] END DESC  
  66.         ,CASE WHEN [SalariedFlag] = 0 THEN [BusinessEntityID] END;  
  67.  
  68.  
  69.  
  70.  
  71.  
  72. /* LABORATORIO OPERADORES */
  73.  
  74. --1
  75. SELECT HR.BusinessEntityID, HR.VacationHours
  76. FROM HumanResources.Employee HR
  77. WHERE HR.VacationHours > 90
  78.  
  79. --2
  80.  
  81. SELECT P.Name, P.ListPrice, P.ListPrice * 1.21 as 'PrecioConIva'
  82. FROM Production.Product P
  83. WHERE p.ListPrice <> 0
  84.  
  85. --3
  86.  
  87. SELECT P.ProductID, P.Name, P.ListPrice
  88. FROM Production.Product P
  89. WHERE ProductID between 776 and 778
  90.  
  91. --4
  92.  
  93. SELECT P.FirstName, P.LastName
  94. FROM Person.Person P
  95. WHERE P.LastName = 'johnson'
  96.  
  97. --5
  98.  
  99. SELECT P.Name, P.ListPrice, P.Color
  100. FROM Production.Product P
  101. WHERE (P.ListPrice < 150 AND P.Color='RED') OR (P.ListPrice > 500 AND P.Color='Black')
  102.  
  103. --6
  104.  
  105. SELECT HR.BusinessEntityID, HR.HireDate, HR.VacationHours, YEAR(HR.HireDate) AS 'Año'
  106. FROM HumanResources.Employee HR
  107. WHERE YEAR(HR.HireDate) >2000
  108.  
  109. --7
  110.  
  111. SELECT P.Name, P.ProductNumber, P.ListPrice, P.ListPrice * 1.10 as 'PrecioConAumento', GETDATE() as 'Fecha'
  112. FROM Production.Product P
  113. WHERE P.SellStartDate < GETDATE() AND p.ListPrice > 0
  114.  
  115. -- LABORATORIO CRITERIOS DE SELECCION --
  116.  
  117. -- LIKE --
  118.  
  119. --1
  120. SELECT P.Name, P.ListPrice, P.Color
  121. FROM Production.Product P
  122. WHERE P.ListPrice > 100 AND P.Name LIKE '%seat%'
  123.  
  124. --2
  125.  
  126. Select P.Name
  127. FROM Production.Product p
  128. where P.Name LIKE '%Mountain bike%'
  129.  
  130. --3
  131.  
  132. SELECT PP.LastName, PP.FirstName
  133. FROM Person.Person PP
  134. WHERE PP.FirstName LIKE 'Y%'
  135.  
  136. --4
  137.  
  138. SELECT PP.LastName, PP.FirstName
  139. FROM Person.Person PP
  140. WHERE PP.LastName LIKE '_S%'
  141.  
  142. --5
  143.  
  144. SELECT CONCAT (PP.LastName, ' ', PP.FirstName) as 'Nombre'
  145. FROM Person.Person PP
  146. WHERE PP.LastName like '%ez'
  147.  
  148. --6
  149.  
  150. Select *
  151. FROM Production.Product p
  152. WHERE P.Name LIKE '%[0-9]'
  153.  
  154. --7
  155.  
  156. SELECT *
  157. FROM Person.Person PP
  158. WHERE pp.FirstName like '[C-c]_[^d-g][j-w]%'
  159.  
  160. -- null --
  161.  
  162. --2
  163.  
  164. SELECT isnull(weight,0) as 'Weight' -- REMPLAZA EL NULL POR EL 0 PARA MOSTRAR, NO EN LA TABLE.
  165. FROM Production.Product
  166. Where Weight is null
  167.  
  168. -------------------------------------------------------------------------------------------------------------------------------
  169.  
  170. SELECT distinct color
  171. FROM Production.Product -- muestra los distintos de un campo
  172.  
  173. SELECT BusinessEntityID
  174. FROM Sales.SalesPerson
  175. UNION
  176. SELECT BusinessEntityID
  177. FROM HumanResources.Employee
  178. ORDER BY BusinessEntityID     -------- UNION JUNTA AMBOS Y ELMINIA DUPLICADOS ------ AL USAR UNION ALL, NO ELIMINA DUPLICADOS
  179.  
  180. --CASE
  181. SELECT  ProductLine,
  182.         Category = CASE ProductLine
  183.                         WHEN 'R' THEN 'Road'
  184.                         WHEN 'M' THEN 'Mountain' -- si el productline es R M o T lo cambia por lo marcado, si no pone not for sale.
  185.                         WHEN 'T' THEN 'Touring'
  186.                         ELSE 'Not for sale'
  187.                     END
  188. FROM Production.Product;
  189.  
  190. SELECT
  191.         CASE
  192.             WHEN EmailPromotion=0 then 'No tiene mail'
  193.             WHEN EmailPromotion=1 then 'Tiene mail'
  194.             WHEN EmailPromotion=2 then 'Tiene muchos mail' --  OTRA FORMA DE HACER LO DE ARRIBA
  195.             ELSE 'Desconocido'
  196.         END Mail
  197. FROM Person.Person;
  198.  
  199. SELECT   LastName
  200.         ,TerritoryName
  201.         ,CountryRegionName
  202. FROM Sales.vSalesPerson
  203. WHERE TerritoryName IS NOT NULL
  204. ORDER BY CASE CountryRegionName
  205.             WHEN 'United States' THEN TerritoryName -- si es usa, te dice la region, si no, te dice el nombre del pais. EL ELSE ES SITUACIONAL
  206.             ELSE CountryRegionName END;
  207.            
  208. --Función COUNT
  209. SELECT COUNT(*) AS Cantidad
  210. FROM HumanResources.EmployeeDepartmentHistory;         
  211.  
  212. --Función MAX
  213. SELECT MAX(ListPrice) AS Maximo
  214. FROM Production.Product;
  215.  
  216. --Función MIN
  217. SELECT MIN(ListPrice) AS Minimo
  218. FROM Production.Product;
  219.  
  220. --Función SUM
  221. SELECT SUM(ListPrice) AS Total
  222. FROM Production.Product;
  223.  
  224. --Función AVG
  225. SELECT AVG(ListPrice) AS Promedio
  226. FROM Production.Product;
  227.  
  228. --GROUP BY
  229. SELECT  ProductID,
  230.         MAX(LineTotal) as Maximo
  231.     FROM Sales.SalesOrderDetail
  232.     WHERE   ProductID>995
  233. GROUP BY    ProductID;
  234.  
  235. --HAVING
  236. SELECT  ProductID
  237.         ,MAX(LineTotal) as Maximo
  238. FROM    Sales.SalesOrderDetail
  239. WHERE   ProductID>995
  240. GROUP BY    ProductID
  241. HAVING  MAX(LineTotal)>3000;
  242.  
  243. --ROLLUP
  244. SELECT  ProductID
  245.         ,MAX(LineTotal) as Maximo
  246. FROM    Sales.SalesOrderDetail
  247. WHERE   ProductID>995
  248. GROUP BY    ProductID WITH ROLLUP
  249. HAVING  MAX(LineTotal)>3000;
  250.  
  251. ------------------------------------------------------------------------------------------------------------------------------
  252.  
  253. USE AdventureWorks2016CTP3
  254. GO
  255.  
  256. SELECT TOP 10 *
  257. FROM Person.Person
  258. SELECT TOP 10 *
  259. FROM Person.PersonPhone
  260.  
  261. SELECT P.BusinessEntityID as 'IDPERSONA',
  262.        P.FirstName 'NOMBRE',
  263.        PP.PhoneNumber 'NUMERO_TELOFONO'
  264. FROM Person.Person p
  265. INNER JOIN Person.PersonPhone PP
  266.    ON (PP.BusinessEntityID = p.BusinessEntityID)
  267. WHERE p.BusinessEntityID < 10 -- INNER JOIN, SOBRE BUSINESSENTITYID, TIENEN QUE ESTAR EN LAS 2 TABLAS
  268.  
  269. SELECT TOP 10 *
  270. FROM Production.Product
  271. SELECT TOP 10*
  272. FROM Sales.SalesOrderDetail
  273.  
  274. SELECT P.ProductID 'PRODUCTO_P',
  275.        S.ProductID 'PRODUCTO_S'
  276. FROM Production.Product P
  277. LEFT JOIN Sales.SalesOrderDetail S
  278.     ON (S.ProductID = P.ProductID)
  279. WHERE P.ProductID IN (897,389) -- LEFT JOIN, TODOS LOS QUE ESTAN EN LA TABLA IZQUIERDA  
  280.                                -- MAS LA INTERSECCION DE LA OTRA(RIGHT ES LO MISMO, PERO TODOS DE LA DERECHA)
  281.  
  282. ------------------------------------------------ TEORIA CLASE 3 --------------------------------------------------
  283.  
  284. USE AdventureWorks2016CTP3
  285. GO
  286.  
  287. CREATE TABLE dbo.tblA (idTablaA int not null, vchDescA varchar(10) not null)
  288. CREATE TABLE dbo.tblB (idTablaB int not null, idTablaA int null, intValorB int not null)
  289.  
  290. insert into dbo.tblA (idTablaA, vchDescA) values (1,'A')
  291. insert into dbo.tblA (idTablaA, vchDescA) values (2,'B')
  292. insert into dbo.tblA (idTablaA, vchDescA) values (3,'C')  
  293. insert into dbo.tblA (idTablaA, vchDescA) values (4,'D')  
  294.  
  295. insert into dbo.tblB (idTablaB, idTablaA, intValorB) values (1,1,10)
  296. insert into dbo.tblB (idTablaB, idTablaA, intValorB) values (2,1,20)
  297. insert into dbo.tblB (idTablaB, idTablaA, intValorB) values (3,4,40)  
  298. insert into dbo.tblB (idTablaB, idTablaA, intValorB) values (4,2,50)  
  299. insert into dbo.tblB (idTablaB, idTablaA, intValorB) values (5,NULL,100)  
  300.  
  301. SELECT * FROM dbo.tblA
  302. SELECT * FROM dbo.tblB
  303.  
  304. --INNER JOIN
  305. SELECT A.idTablaA, A.idTablaA, b.idTablaB, b.idTablaA, B.intValorB
  306. FROM dbo.tblA A
  307. INNER JOIN dbo.tblB B
  308.     ON (A.idTablaA = B.idTablaA)
  309.  
  310.  
  311. --left JOIN
  312. SELECT A.idTablaA, A.idTablaA, b.idTablaB, b.idTablaA, B.intValorB
  313. FROM dbo.tblA A
  314. left JOIN dbo.tblB B
  315.     ON (A.idTablaA = B.idTablaA)
  316.  
  317. --RIGHT JOIN
  318.     SELECT *
  319.     FROM dbo.tblA A
  320.     RIGHT JOIN dbo.tblB B
  321.         ON (A.idTablaA = B.idTablaA)
  322.  
  323. --FULL JOIN
  324. SELECT *
  325. FROM dbo.tblA A
  326. FULL JOIN dbo.tblB B
  327.     ON (A.idTablaA = B.idTablaA)
  328.  
  329. --CROSS JOIN
  330. SELECT *
  331. FROM dbo.tblA A
  332. CROSS JOIN dbo.tblB B -- PRODUCTO CARTESEANO
  333.  
  334.  
  335. --SELF JOIN
  336. IF OBJECT_ID('dbo.Empleados','U') IS NOT NULL
  337. BEGIN
  338.     DROP TABLE dbo.Empleados
  339. END
  340.  
  341. CREATE TABLE Empleados
  342. (
  343.     Codigo INT,
  344.     Nombre VARCHAR(50),
  345.     Puesto VARCHAR(50),
  346.     Supervisor INT
  347. );
  348.  
  349. INSERT INTO dbo.Empleados
  350. VALUES
  351.  (1, 'Juan','Lider de Proyecto', 3)
  352. ,(2, 'Pedro','Desarrollador', 1)
  353. ,(3, 'Maria','Jefa', NULL)
  354. ,(4, 'Martin','Diseñador', 1);
  355.  
  356. SELECT  p2.Codigo,
  357.         p2.Nombre,
  358.         p2.Puesto,
  359.         p1.Nombre AS Supervisor
  360. FROM Empleados p1
  361. INNER JOIN Empleados p2
  362.     ON p1.Codigo=p2.Supervisor
  363. WHERE p2.Supervisor IS NOT NULL;
  364.  
  365. SELECT  P1.*,P2.*
  366. FROM Empleados p1
  367. INNER JOIN Empleados p2
  368.     ON p1.Codigo=p2.Supervisor
  369. WHERE p2.Supervisor IS NOT NULL;
  370.  
  371. -- TABLAS TEMPORALES
  372.  
  373. CREATE TABLE #tblA (
  374.                     idTablaA int not null
  375.                     , vchDescA varchar(10) not null
  376.                     )                                -- TABLA TEMP LOCAL -- SOLO SIRVE PARA LA SESION (QUERY) ACTUAL
  377.  
  378. CREATE TABLE ##tblB (idTablaB int not null
  379.                      , idTablaA int null,
  380.                      intValorB int not null
  381.                      )                               -- TABLA TEMP GLOBAL -- SIRVE PARA CUALQUIER SESION (QUERY) ACTUAL
  382.  
  383.                      -- SI SE CIERRA LA QUERY, DESAPARECEN LAS TABLAS TEMP LOCALES Y GLOBALES.
  384.  
  385. SP_HELP 'HumanResources.Employee' -- brinda informacion de la tabla
  386.  
  387.  
  388. -- LABORATORIO RELACION Y CONJUNTOS --
  389.  
  390. -- JOINS --
  391.  
  392. -- 1 --
  393.  
  394. SELECT *
  395. FROM HumanResources.Employee HR
  396. INNER JOIN Sales.SalesPerson S
  397. ON (HR.BusinessEntityID = S.BusinessEntityID)
  398.  
  399. -- 2 --
  400.  
  401. SELECT HR.BusinessEntityID, P.FirstName, P.LastName
  402. FROM HumanResources.Employee HR
  403. INNER JOIN Person.Person P
  404. ON (HR.BusinessEntityID = P.BusinessEntityID)
  405. ORDER BY p.LastName, P.FirstName
  406.  
  407. -- 3 --
  408.  
  409. SELECT HR.LoginID, S.TerritoryID, S.Bonus, S.BusinessEntityID
  410. FROM HumanResources.Employee HR
  411. INNER JOIN Sales.SalesPerson S ON (S.BusinessEntityID = HR.BusinessEntityID)   
  412.  
  413. -- 4 --
  414.  
  415. SELECT PP.Name , PP.ProductCategoryID
  416. FROM Production.Product P
  417. INNER JOIN Production.ProductSubcategory PP ON (P.ProductSubcategoryID = PP.ProductSubcategoryID)
  418. WHERE PP.Name = 'Wheels'
  419.  
  420. -- 5 --
  421.  
  422. SELECT P.*, PS.Name
  423. FROM Production.Product P
  424. INNER JOIN Production.ProductSubcategory PS ON (PS.ProductSubcategoryID = P.ProductSubcategoryID)
  425. WHERE P.Name NOT LIKE '%bike%'
  426.  
  427. -- 6 --
  428.  
  429. SELECT distinct PP.ProductID, pp.Name, pp.ListPrice, sd.UnitPrice
  430. FROM Sales.SalesOrderDetail SD
  431. INNER JOIN Production.Product PP ON (PP.ProductID = SD.ProductID)
  432. WHERE SD.UnitPrice < pp.ListPrice
  433. order by pp.Name
  434.  
  435. -- 7 --
  436.  
  437. SELECT p1.ProductID, p1.name, p1.ListPrice,
  438.        p2.ProductID, p2.Name, p2.ListPrice
  439. FROM Production.Product P1
  440. inner join Production.Product P2 on (P2.ListPrice = P1.ListPrice)
  441. where p1.ProductID > p2.ProductID
  442. order by P1.ListPrice desc
  443.  
  444. -- 8 --
  445.  
  446. SELECT P.Name 'NOMBRE_PRODUCTO' , v.Name 'PROVEEDOR'
  447. FROM Production.Product P
  448. INNER JOIN Purchasing.ProductVendor PV ON (PV.ProductID = p.ProductID)
  449. INNER JOIN Purchasing.Vendor V on (PV.BusinessEntityID = v.BusinessEntityID)
  450. where p.ProductSubcategoryID = 15
  451. order by V.Name
  452.  
  453. -- 9 --
  454.  
  455. SELECT p.FirstName, p.LastName, ISNULL(HR.LoginID, ' SIN LOGIN' )
  456. FROM Person.Person P
  457. left join HumanResources.Employee hr ON (hr.BusinessEntityID = p.BusinessEntityID)
  458.  
  459.  
  460. -- LABORATORIO TABLAS TEMPORALES --
  461.  
  462. -- 1 --
  463.  
  464. select P.Name, P.Color, p.ListPrice
  465. into #productos
  466. from Production.Product P
  467.  
  468. select * from #productos
  469.  
  470. -- 2 --
  471.  
  472. SELECT BusinessEntityID, FirstName, LastName
  473. into dbo.personas33
  474. FROM Person.Person
  475. where 1=2 ---- SE USA EL 1=2 PARA CREAR ALGO IMPOSIBLE, CLONANDO LA TABLA SIN NINGUN REGISTRO
  476.  
  477.  
  478. --3)Eliminar si existe la tabla Productos
  479. --tablas: Productos
  480. IF OBJECT_ID (N'tempdb..#Productos', N'U') IS NOT NULL
  481.     DROP TABLE #Productos;
  482. GO
  483.  
  484. --4)Eliminar si existe la tabla Personas
  485. --tablas: Personas
  486. IF OBJECT_ID (N'tempdb..#Personas', N'U') IS NOT NULL
  487.     DROP TABLE #Personas;
  488. GO
  489.  
  490. --5)Crear una CTE con las órdenes de venta
  491.  
  492. --tablas: Sales.SalesOrderHeader
  493. --campos: SalesPersonID, SalesOrderID, OrderDate
  494.  
  495. WITH Sales_CTE (SalesPersonID, SalesOrderID, SalesYear)  
  496. AS    
  497. (  
  498.     SELECT  SalesPersonID
  499.             ,SalesOrderID
  500.             ,YEAR(OrderDate) AS Anio  
  501.     FROM Sales.SalesOrderHeader  
  502.     WHERE SalesPersonID IS NOT NULL  
  503. )  
  504. SELECT SalesPersonID, SalesOrderID, SalesYear
  505. FROM [Sales_CTE]  
  506.  
  507.  
  508. --------------------------- 4------------------------------------
  509.  
  510. SELECT  ProductID,
  511.         ListPrice,
  512.         (SELECT AVG(ListPrice)FROM Production.Product) AS 'PRECIO-PROMEDIO'
  513. FROM Production.Product;
  514.  
  515.  
  516. --SUBCONSULTA FROM
  517. SELECT  pp.ProductID,
  518.         pp.ListPrice,
  519.         x.promedio
  520. FROM Production.Product pp
  521. INNER JOIN (
  522.             SELECT ProductID,
  523.                     AVG(LineTotal) promedio
  524.                     FROM Sales.SalesOrderDetail
  525.                     GROUP BY ProductID
  526.                    
  527.             ) x
  528.     ON pp.ProductID=x.ProductID; -- SE LE DA EL ALIAS X AL PROMEDIO DE UN PRODUCTID. LA CONSLTA MUESTRA, PRODUCTID, PRECIO DE LISTA Y PROMEDIO POR PRODUCTO
  529.  
  530.  
  531. --Subconsultas correlacionadas
  532. SELECT  p1.ProductSubcategoryID,
  533.         p1.ProductID,
  534.         p1.ListPrice
  535.     FROM Production.Product p1
  536.     WHERE ListPrice =   (
  537.                         SELECT MIN (ListPrice)
  538.                             FROM Production.Product p2
  539.                             WHERE p2.ProductSubcategoryID = p1.ProductSubcategoryID
  540.                         )
  541.     ORDER BY p1.ProductSubcategoryID; -- PRECIO MINIMO DE LISTA DE CADA SUBCATEGORIA Y PRODUCTID
  542.  
  543. ------------------------------------------------------------- CLASE 4 ---------------------------------
  544.  
  545.  
  546. -------------------------------------------------------------------------------------------------------------
  547. --                                      SUBCONSULTAS CON [ANY|SOME - ALL]
  548. -------------------------------------------------------------------------------------------------------------
  549. CREATE TABLE _A (ID INT);
  550. CREATE TABLE _B (ID INT);
  551.  
  552. INSERT INTO _A VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
  553. INSERT INTO _B VALUES (1),(2),(3),(4),(5);
  554.  
  555. SELECT * FROM _A
  556. SELECT * FROM _B
  557.  
  558. ---------------------------------------------- ANY|SOME --------------------------------------
  559. --(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
  560. --(1),(2),(3),(4),(5);
  561.  
  562. ------------------------------------------------------------------------------------------
  563. --  = ANY ES EQUIVALENTE A IN
  564. ------------------------------------------------------------------------------------------
  565. SELECT ID
  566. FROM _A
  567. WHERE ID =ANY(SELECT ID FROM _B)
  568.  
  569. SELECT ID
  570. FROM _A
  571. WHERE ID >=ANY(SELECT ID FROM _B)
  572.  
  573. SELECT ID
  574. FROM _A
  575. WHERE ID >ANY(SELECT ID FROM _B)
  576.  
  577. SELECT ID
  578. FROM _A
  579. WHERE ID >ANY(SELECT MAX(ID) FROM _B)
  580.  
  581. SELECT ID
  582. FROM _B
  583. WHERE ID >ANY(SELECT MAX(ID) FROM _A)
  584.  
  585. ---------------------------------------------- ALL --------------------------------------
  586. --(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
  587. --(1),(2),(3),(4),(5);
  588. SELECT ID
  589. FROM _A
  590. WHERE ID =ALL(SELECT ID FROM _B)
  591.  
  592. SELECT ID
  593. FROM _A
  594. WHERE ID >ALL(SELECT ID FROM _B)
  595.  
  596. SELECT ID
  597. FROM _A
  598. WHERE ID <=ALL(SELECT ID FROM _B)
  599.  
  600. SELECT ID
  601. FROM _A
  602. WHERE ID >ALL(SELECT MAX(ID) FROM _B)
  603.  
  604. ------------------------------------------------------------------------------------------
  605. --  <> ALL ES EQUIVALENTE A NOT IN
  606. ------------------------------------------------------------------------------------------
  607. SELECT ID
  608. FROM _A
  609. WHERE ID <>ALL(SELECT ID FROM _B)
  610.  
  611. --INSERT
  612.  
  613. IF OBJECT_ID (N'dbo.Sectores', N'U') IS NOT NULL
  614. DROP TABLE dbo.Sectores;
  615. GO
  616.  
  617. CREATE TABLE dbo.Sectores
  618. (
  619. SectorID TINYINT NOT NULL IDENTITY(1,1)
  620. ,Gerencia VARCHAR(50)
  621. ,Sector VARCHAR(50) DEFAULT 'Sin Sector'
  622. );
  623.  
  624.  
  625. INSERT INTO dbo.Sectores DEFAULT VALUES;
  626. GO
  627.  
  628.  
  629. INSERT INTO dbo.Sectores
  630. VALUES ('Finanzas', 'Contaduria' )  -- inserta salteando sectorid ya que tiene identity
  631. GO
  632.  
  633. INSERT INTO dbo.Sectores
  634. VALUES ('Finanzas','Cobranzas'), -- insterta 2 valores
  635. ('Finanzas','Ventas')
  636. GO
  637.  
  638. INSERT INTO dbo.Sectores (Sector, Gerencia) -- inserta en distinto orden a la tabla
  639. VALUES ('Legales', 'Finanzas');
  640. GO
  641.  
  642. INSERT INTO dbo.Sectores
  643. SELECT 'Produccion', 'Manufactura'; -- inserta valores con una consulta
  644. GO
  645.  
  646. INSERT INTO dbo.Sectores (Gerencia, Sector)
  647. VALUES ('Finanzas', 'Ventas'); -- forma completa de insentar, cuando hay identity no se pone
  648. GO
  649.  
  650. SET IDENTITY_INSERT dbo.Sectores ON;
  651. GO                                    -- Permite editar el identity ID
  652.  
  653. INSERT INTO dbo.Sectores (SectorID, Gerencia, Sector)
  654. VALUES (100, 'Recursos Humanos', DEFAULT); -- Inserta con identity id, salteandose hacia el 100
  655. GO
  656.  
  657. SET IDENTITY_INSERT dbo.Sectores OFF;
  658. GO                                      -- Vuelve el identity al normal, desde 100
  659.  
  660. INSERT INTO dbo.Sectores (Gerencia, Sector)
  661. SELECT Name,GroupName
  662. FROM HumanResources.Department
  663. WHERE DepartmentID=1; -- Inserta datos con resultaods de una consulta
  664. GO
  665.  
  666. SELECT * FROM dbo.Sectores
  667.  
  668. --UPDATE
  669. IF OBJECT_ID (N'dbo.SectoresNuevo', N'U') IS NOT NULL
  670. DROP TABLE dbo.SectoresNuevo;
  671. GO
  672. CREATE TABLE dbo.SectoresNuevo
  673. (
  674. Sector VARCHAR(50)
  675. ,SectorNuevo VARCHAR(50)
  676. );
  677. INSERT INTO dbo.SectoresNuevo (sector, sectornuevo)
  678. VALUES ('Contaduria', 'tesoreria')
  679.  
  680. UPDATE s
  681.     SET Sector=sn.SectorNuevo
  682.     FROM Sectores s
  683.     INNER JOIN SectoresNuevo sn
  684.         ON S.Sector=sn.Sector  
  685.  
  686. SELECT * FROM dbo.Sectores;
  687.  
  688. --DELETE
  689. SELECT * FROM DBO.SectoresNuevo
  690. SELECT * FROM dbo.Sectores;
  691.  
  692. DELETE s
  693. FROM dbo.Sectores s
  694. INNER JOIN dbo.SectoresNuevo sn
  695. ON S.Sector=sn.SectorNuevo ;
  696.  
  697.  
  698. --TRUNCATE
  699. TRUNCATE TABLE dbo.Sectores; -- RESETEA IDENTITY SI HAY, EL DELETE NO.
  700.  
  701.  
  702.  
  703. ---------------------- LABORATORIO SUB CONSULTAS ---------------------------
  704.  
  705. --1--
  706.  
  707. SELECT P.Name, P.ListPrice
  708. FROM Production.Product P
  709. WHERE ListPrice < (SELECT AVG(ListPrice)
  710.                     From Production.Product
  711.                     )
  712.                    
  713. ORDER BY ListPrice DESC
  714.  
  715. --2--
  716.  
  717. SELECT Name,
  718.         ListPrice ' Precio De Lista' ,
  719.         (SELECT AVG(ListPrice) from Production.Product) ' Precio Promedio' ,
  720.         ListPrice - (Select AVG(ListPrice) FROM Production.Product) ' Diferencia De Precio'
  721.         FROM Production.Product
  722.  
  723. -- 3  --
  724.  
  725. SELECT ProductID, Name, ListPrice
  726. FROM Production.Product
  727. WHERE ListPrice = (SELECT MAX(ListPrice) From Production.Product)
  728.  
  729. -- 4 --
  730.  
  731. SELECT P.ProductID, P.NAME, P.ListPrice, P.ProductSubcategoryID
  732. FROM Production.Product P
  733. WHERE P.ListPrice = (SELECT MIN(P1.ListPrice)
  734.                     FROM Production.Product P1
  735.                     WHERE P1.ProductSubcategoryID = P.ProductSubcategoryID)
  736. ORDER BY P.ProductSubcategoryID, P.ListPrice
  737.  
  738. ------------ LABORATORIO EXISTS  - NOT EXSIST -------------
  739.  
  740. -- 1 --
  741.  
  742. SELECT ProductID,Name, p.ProductSubcategoryID
  743. FROM Production.Product P
  744. WHERE EXISTS (SELECT *
  745.                 FROM Production.ProductSubcategory PS
  746.                 WHERE ps.ProductSubcategoryID = p.ProductSubcategoryID AND
  747.                 NAME LIKE '%WHEELS%'
  748.             )
  749.  
  750. -- 2 --
  751. SELECT p.ProductID, p.Name
  752. FROM Production.Product P
  753. WHERE NOT EXISTS (SELECT *
  754.                     FROM SALES.SalesOrderDetail SD
  755.                     WHERE SD.ProductID = p.ProductID
  756.                     )
  757. order by p.ProductID
  758.  
  759. SELECT P.ProductID, P.Name
  760. FROM Production.Product p
  761. LEFT JOIN sales.SalesOrderDetail sd
  762.         on (sd.ProductID = p.ProductID)
  763. WHERE SD.ProductID IS NULL
  764. ORDER BY P.ProductID --- FORMA DE HACERLO CON UN JOIN ENVEZ DE NOT EXIST
  765.  
  766. -- 3 --
  767.  
  768. SELECT *
  769. FROM Person.Person P
  770. WHERE NOT EXISTS (SELECT *
  771.                 FROM sales.SalesPerson SP
  772.                 WHERE SP.BusinessEntityID = P.BusinessEntityID
  773.                 )
  774.  
  775. SELECT *
  776. FROM Person.Person p
  777. LEFT JOIN Sales.SalesPerson SP
  778.         ON (SP.BusinessEntityID = P.BusinessEntityID)
  779. WHERE SP.BusinessEntityID IS NULL -- MISMA FORMA , USANDO LEFT JOIN
  780.  
  781.  
  782. -- 4 --
  783.  
  784. SELECT P.BusinessEntityID,P.LastName,P.FirstName
  785. FROM Person.Person P
  786. WHERE EXISTS (SELECT *
  787.                 FROM SALES.SalesPerson S
  788.                 WHERE S.BusinessEntityID = P.BusinessEntityID AND
  789.                     S.TerritoryID IS NULL)
  790.  
  791. SELECT P.BusinessEntityID, P.LastName, P.FirstName
  792. FROM PERSON.Person P
  793. INNER JOIN SALES.SalesPerson SP
  794.     ON (SP.BusinessEntityID = P.BusinessEntityID)
  795. WHERE SP.TerritoryID IS NULL -- MISMA FORMA, CON INNER JOIN , (INNER JOIN TIENE MEJOR PERFORMANCE PARAL A PC)
  796.  
  797.  
  798. ------------- IN / NOT IN ---------
  799. -- 1 --
  800.  
  801.  
  802. SELECT *
  803. FROM SALES.SalesOrderHeader SO
  804. WHERE SO.TerritoryID IN (SELECT ST.TerritoryID
  805.                         FROM Sales.SalesTerritory ST
  806.                         WHERE CountryRegionCode = 'US')
  807.  
  808. -- 2 --
  809.  
  810. SELECT *
  811. FROM SALES.SalesOrderHeader SO
  812. WHERE SO.TerritoryID IN (SELECT ST.TerritoryID
  813.                         FROM Sales.SalesTerritory ST
  814.                         WHERE CountryRegionCode IN ('US','FR','GB'))
  815.  
  816.  
  817. -- 3 --
  818.  
  819. SELECT TOP 10 *
  820. FROM Production.Product
  821. ORDER BY ListPrice DESC
  822.  
  823. -- 4 --
  824.  
  825. SELECT *
  826. FROM Production.Product p
  827. WHERE P.ProductID IN (SELECT DISTINCT SO.ProductID
  828.                     FROM SALES.SalesOrderDetail SO
  829.                     WHERE SO.OrderQty >20
  830.                     )
  831.  
  832. --------------------------- LABORATORIO DML ---------------------
  833.  
  834. -- 1 --
  835.  
  836. SELECT ProductID, Name, Color, ListPrice
  837. INTO Productos
  838. FROM Production.Product
  839.  
  840. -- 2 --
  841.  
  842. UPDATE Productos
  843. set ListPrice = ListPrice * 1.20
  844.  
  845. -- 3 --
  846.  
  847. UPDATE P
  848.         SET P.ListPrice = P.ListPrice * 1.2
  849.         FROM Productos P
  850.         INNER JOIN Purchasing.ProductVendor PV
  851.         ON (PV.ProductID = P.ProductID)
  852.         WHERE pv.BusinessEntityID = 1540
  853.  
  854. -- 4 --
  855.  
  856. DELETE
  857. FROM Productos
  858. WHERE ListPrice = 0
  859.  
  860. -- 5 --
  861.  
  862. INSERT INTO Productos (Name, Color, ListPrice) VALUES
  863.                     (  
  864.                     'Bicicleta Mountain Bike',
  865.                     'Rojo',
  866.                     4000
  867.                     )
  868.  
  869. -- 6 --
  870. SELECT Name, ListPrice
  871. FROM Productos
  872. WHERE Name like '%pedal%'
  873.  
  874. UPDATE Productos
  875.         SET ListPrice = ListPrice * 1.15
  876.         WHERE Name like '%pedal%'
  877.  
  878. -- 7 --
  879.  
  880. SELECT *
  881. FROM Productos
  882. WHERE name like 'm%'
  883.  
  884. DELETE
  885. FROM Productos
  886. WHERE Name like 'm%'       
  887.  
  888. -- 8 --
  889.  
  890. TRUNCATE TABLE Productos       
  891.  
  892. -- 9 --    
  893.  
  894. DROP TABLE Productos
  895.  
  896.                
  897. ------------- LABORATORIO MANEJO VARIABLES ------------------
  898.  
  899. DECLARE @TotalVentas NUMERIC(38,6) = 0
  900. --SELECT @TotalVentas = 0
  901. --SET @TotalVentas = 0
  902.  
  903. SELECT @TotalVentas = SUM(LineTotal)
  904. FROM Sales.SalesOrderDetail
  905.  
  906.  
  907.     SELECT @TotalVentas AS 'TOTAL VENTA'-- formas de mostrar el valor
  908.     PRINT @TotalVentas
  909.  
  910. -- 1 --
  911.  
  912. DECLARE @TotalVentas NUMERIC(38,6) = 0
  913.  
  914.         SELECT @TotalVentas =SUM (SD.LINETOTAL)
  915.             FROM Sales.SalesOrderHeader SH
  916.             INNER JOIN SALES.SalesOrderDetail SD
  917.                 ON (SH.SalesOrderID = SD.SalesOrderID)
  918.          WHERE year(OrderDate) = '2014'
  919.          PRINT @TotalVentas
  920.  
  921. -- 2 --
  922.  
  923. DECLARE @Promedio MONEY = 0
  924.  
  925. SELECT @Promedio = AVG(LISTPRICE)
  926.     FROM Production.Product
  927.  
  928. SELECT *
  929.     FROM Production.Product
  930.     WHERE ListPrice < @Promedio
  931.     ORDER BY ListPrice
  932.  
  933. -- 3 --
  934.  
  935.  
  936. DECLARE @Promedio MONEY = 0
  937.  
  938. SELECT @Promedio = AVG(LISTPRICE)
  939.     FROM Production.Product
  940.  
  941. SELECT ProductID, Name, ListPrice
  942. INTO productos
  943.     FROM Production.Product
  944.     WHERE ListPrice < @Promedio
  945.     ORDER BY ListPrice
  946.  
  947. UPDATE productos
  948. SET ListPrice = ListPrice * 1.1
  949.  
  950.  
  951. SELECT p.ProductID, p.Name , p.ListPrice, po.ListPrice
  952. FROM PRODUCTION.Product P
  953. INNER JOIN productos po
  954.     on (po.ProductID = p.ProductID) -- comapra las dos tablas y muestra el aumento
  955.  
  956. -- 4 --
  957.  
  958. DECLARE @variableTabla TABLE (
  959.                             Categoria VARCHAR(50),
  960.                             SubCategoria VARCHAR(50)
  961.                             )
  962. INSERT INTO @variableTabla (Categoria, SubCategoria)
  963.         SELECT PC.Name, ps.Name
  964.         FROM Production.ProductSubcategory PS
  965.         INNER JOIN Production.ProductCategory PC
  966.             ON (PC.ProductCategoryID = PS.ProductCategoryID)   
  967.            
  968. SELECT * FROM @variableTabla               
  969.  
  970. -- 5 --
  971.  
  972. DECLARE @Promedio MONEY = 0
  973. SELECT @Promedio = AVG(listprice)
  974.         FROM Production.Product
  975.  
  976. IF (@Promedio < 500)
  977. BEGIN
  978.     PRINT 'PROMEDIO BAJO'
  979. END ELSE BEGIN
  980.     PRINT 'PROMEDIO ALTO'
  981. END
  982.  
  983.  
  984.  
  985. /************************************************************************************
  986. *                                                                                   *
  987. *                   INSERTAR MODIFICAR ELIMINAR REGISTROS CON MERGE                 *
  988. *                                                                                   *
  989. ************************************************************************************/
  990.  
  991. IF OBJECT_ID (N'dbo.usuarios', N'U') IS NOT NULL  
  992.     DROP TABLE dbo.usuarios;
  993. IF OBJECT_ID (N'dbo.UsuariosActual', N'U') IS NOT NULL  
  994.     DROP TABLE dbo.UsuariosActual;
  995.  
  996.  
  997. CREATE TABLE Usuarios
  998. (
  999.     Codigo INT PRIMARY KEY,
  1000.     Nombre VARCHAR(100),
  1001.     Puntos INT
  1002. )
  1003. GO
  1004. INSERT INTO Usuarios
  1005. VALUES
  1006.         (1,'Juan Perez',5),
  1007.         (2,'Marco Salgado',5),
  1008.         (3,'Carlos Soto',5),
  1009.         (4,'Alberto Ruiz',5),
  1010.         (5,'Alejandro Castro',5)
  1011. GO
  1012. CREATE TABLE UsuariosActual
  1013. (
  1014.         Codigo INT PRIMARY KEY,
  1015.         Nombre VARCHAR(100),
  1016.         Puntos INT
  1017. )
  1018. GO
  1019. INSERT INTO UsuariosActual
  1020. VALUES
  1021.         (1,'Juan Perez',10),
  1022.         (2,'Marco Salgado',10),
  1023.         (4,'Alberto Ruiz',10),
  1024.         (5,'Alejandro Castro',10),
  1025.         (6,'Pablo Ramos',10)
  1026.  
  1027. SELECT * FROM Usuarios
  1028. SELECT * FROM UsuariosActual
  1029.  
  1030.  
  1031. -- update target.codigo {1,10; 2,10; 4,10; 5,10}
  1032. -- insert target.codigo {6,10}
  1033. -- delete target.codigo {3,10}
  1034.  
  1035.  
  1036. MERGE Usuarios AS TARGET
  1037. USING UsuariosActual AS SOURCE
  1038. ON (TARGET.Codigo = SOURCE.Codigo)
  1039.  
  1040. --Cuandos los registros concuerdan se actualizan los puntos si tienen alguna variación
  1041. WHEN MATCHED AND TARGET.Puntos <> SOURCE.Puntos THEN
  1042. UPDATE SET TARGET.Puntos = SOURCE.Puntos
  1043.  
  1044.  
  1045. --Cuando solo existe en source se inserta en target
  1046.  
  1047. WHEN NOT MATCHED BY TARGET THEN
  1048. INSERT (Codigo, Nombre, Puntos)
  1049. VALUES (SOURCE.Codigo, SOURCE.Nombre, SOURCE.Puntos)
  1050.  
  1051.  
  1052. --Cuando solo existe en TARGET se elimina en target
  1053. WHEN NOT MATCHED BY source THEN
  1054. DELETE;
  1055.  
  1056. SELECT * FROM Usuarios
  1057. SELECT * FROM UsuariosActual
  1058.  
  1059.  
  1060. IF OBJECT_ID (N'dbo.usuarios', N'U') IS NOT NULL  
  1061.     DROP TABLE dbo.usuarios;
  1062. IF OBJECT_ID (N'dbo.UsuariosActual', N'U') IS NOT NULL  
  1063.     DROP TABLE dbo.UsuariosActual;
  1064.  
  1065.  
  1066. --TEORIA CLASE 5
  1067.  
  1068. DECLARE @indice INT;
  1069. SET @indice=0 ;
  1070.  
  1071. WHILE (@indice<=10)
  1072. BEGIN
  1073.     PRINT CAST(@indice AS VARCHAR(10))
  1074.     IF @indice=7
  1075.     BEGIN
  1076.         SET @indice=@indice+1;
  1077.         WAITFOR DELAY '00:00:05'
  1078.         CONTINUE;
  1079.     END
  1080.    
  1081.     ---- Dos formas de salir forzando el while
  1082.     IF @indice=4 GOTO mensaje;
  1083.     IF @indice=6 BREAK;
  1084.     ----------------------------------------
  1085.     SET @indice=@indice+1;
  1086. END
  1087. PRINT 'SALI DEL WHILE POR EL BREAK'
  1088. mensaje:
  1089. PRINT 'SALI DEL WHILE POR EL GOTO'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement