Advertisement
ArCiGo

ScriptsBlog

May 17th, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 10.28 KB | None | 0 0
  1. USE Tiendita
  2.  
  3. /*SELECT*/
  4.  
  5. SELECT cus.FirstName,
  6.         cus.LastName
  7. FROM Customer cus
  8.  
  9. SELECT *
  10. FROM Customer
  11.  
  12. SELECT (cus.FirstName + ' ' + cus.LastName) AS FullName --"Full Name"
  13. FROM Customer cus
  14.  
  15. ---------
  16.  
  17. /*AS*/
  18.  
  19. SELECT cus.FirstName,
  20.         cus.LastName
  21. FROM Customer cus
  22.  
  23. SELECT (cus.FirstName + ' ' + cus.LastName) AS FullName --"Full Name"
  24. FROM Customer cus
  25.  
  26. ---------
  27.  
  28. /*WHERE*/
  29.  
  30. SELECT *
  31. FROM [ORDER]
  32.  
  33. SELECT *
  34. FROM [ORDER] ord
  35. WHERE ord.CustomerId = 85 AND ord.OrderDate = '20131112'
  36.  
  37. SELECT *
  38. FROM [ORDER] ord
  39. WHERE ord.OrderDate = '20140101' OR ord.OrderDate = '20140130'
  40.  
  41. SELECT *
  42. FROM [ORDER] ord
  43. WHERE ord.CustomerId IN(85, 14, 1)
  44.  
  45. SELECT *
  46. FROM OrderItem ordit
  47. WHERE ordit.OrderId IN(1, 4)
  48.  
  49. SELECT *
  50. FROM Customer cus
  51. WHERE FirstName LIKE 'Maria'
  52.  
  53. SELECT *
  54. FROM Customer cus
  55. WHERE cus.FirstName LIKE 'A%'   --All names that starts with A
  56.  
  57. SELECT *
  58. FROM Customer cus
  59. WHERE cus.FirstName LIKE '%A'   --All names that ends with A
  60.  
  61. SELECT *
  62. FROM Customer cus
  63. WHERE cus.FirstName LIKE '%A%'  --All names with that pattern
  64.  
  65. SELECT *
  66. FROM Customer cus
  67. WHERE cus.FirstName LIKE '%Peter%'
  68.  
  69. SELECT *
  70. FROM [ORDER] ord
  71. WHERE ord.OrderDate BETWEEN '20130101' AND '20130228'
  72.  
  73. SELECT *
  74. FROM [ORDER] ord
  75. WHERE ord.OrderDate > '20140427'
  76.  
  77. ---------
  78.  
  79. /*ORDER BY*/
  80.  
  81. SELECT (cus.FirstName + ' ' + cus.LastName) AS "Full Name",
  82.         cus.City,
  83.         cus.Country,
  84.         cus.Phone
  85. FROM Customer cus
  86. ORDER BY cus.Id
  87.  
  88. ----------
  89.  
  90. /*SQL Functions*/
  91.  
  92. SELECT UPPER(cus.FirstName)
  93. FROM Customer cus
  94.  
  95. SELECT LOWER(cus.FirstName)
  96. FROM Customer cus
  97.  
  98. SELECT LEFT(cus.FirstName, 2)
  99. FROM Customer cus
  100.  
  101. SELECT RIGHT(cus.FirstName, 2)
  102. FROM Customer cus
  103.  
  104. SELECT LTRIM(' Removes trailing spaces.')
  105.  
  106. SELECT RTRIM('Removes trailing spaces. ')
  107.  
  108. SELECT SUBSTRING(cus.FirstName, 2, 3)
  109. FROM Customer cus
  110.  
  111. SELECT GETDATE()
  112.  
  113. SELECT DATEPART(yy, ord.OrderDate)
  114. FROM [ORDER] ord
  115.  
  116. SELECT DATEADD(mm, 1, GETDATE())
  117.  
  118. SELECT MONTH('20170426')
  119.  
  120. SELECT DAY('20170426')
  121.  
  122. SELECT YEAR('20170426')
  123.  
  124. SELECT DATENAME(weekday, GETDATE())
  125.  
  126. SELECT DATEDIFF(dd, '20170426', '20170725')
  127.  
  128. SELECT DATEFROMPARTS(2017, 04, 26)
  129.  
  130. SELECT ISNULL(CONVERT(VARCHAR(MAX), ord.OrderDate), 'Sin Fecha')
  131. FROM [ORDER] ord
  132.  
  133. SELECT NULLIF(100, 50*2)
  134. SELECT NULLIF(2*2, 2*7)
  135.  
  136. SELECT COALESCE(sup.Phone, sup.Fax) "Contacto"
  137. FROM Supplier sup
  138.  
  139. DECLARE @myDecimalValue FLOAT
  140. SET @myDecimalValue = 3.1415
  141. SELECT CAST(@myDecimalValue AS INT)
  142.  
  143. DECLARE @myDecimalValue FLOAT
  144. SET @myDecimalValue = 4521312.531
  145. SELECT CONVERT(INT, @myDecimalValue)
  146.  
  147. SELECT TOP 5 *
  148. FROM Customer
  149.  
  150. SELECT RAND(12)
  151.  
  152. ----------
  153.  
  154. /*JOINS*/
  155.  
  156. SELECT ord.OrderNumber,
  157.         ord.TotalAmount,
  158.         cus.FirstName,
  159.         cus.LastName,
  160.         cus.City,
  161.         cus.Country
  162. FROM [ORDER] ord
  163. INNER JOIN Customer cus ON ord.CustomerId = cus.Id
  164.  
  165. SELECT ord.OrderNumber,
  166.         ord.TotalAmount,
  167.         cus.FirstName,
  168.         cus.LastName,
  169.         cus.City,
  170.         cus.Country
  171. FROM Customer cus
  172. LEFT JOIN [ORDER] ord ON cus.Id = ord.CustomerId
  173. ORDER BY ord.TotalAmount
  174.  
  175. SELECT ord.TotalAmount,
  176.         cus.FirstName,
  177.         cus.LastName,
  178.         cus.City,
  179.         cus.Country
  180. FROM [ORDER] ord
  181. RIGHT JOIN Customer cus ON ord.CustomerId = cus.Id
  182. WHERE ord.TotalAmount IS NULL
  183.  
  184. ----------
  185.  
  186. /*Agrupadores*/
  187.  
  188. SELECT cus.Country, COUNT(cus.City) AS Quantity
  189. FROM Customer cus
  190. GROUP BY cus.Country
  191.  
  192. SELECT ord.CustomerId, SUM(ord.TotalAmount) Total
  193. FROM [ORDER] ord
  194. GROUP BY ord.CustomerId
  195. HAVING SUM(ord.TotalAmount) > 20000
  196.  
  197. /*Funciones matemáticas*/
  198.  
  199. SELECT TOP 10 ROUND(ord.TotalAmount, -1)
  200. FROM [ORDER] ord
  201.  
  202. SELECT TOP 10  ord.TotalAmount
  203. FROM [ORDER] ord
  204.  
  205. -- Be careful with decimal places. Maybe it could not be convenient use this function over monetary fields
  206.  
  207. SELECT CEILING(ord.TotalAmount)
  208. FROM [ORDER] ord
  209.  
  210. SELECT ord.TotalAmount
  211. FROM [ORDER] ord
  212.  
  213. SELECT FLOOR(ord.TotalAmount)
  214. FROM [ORDER] ord
  215.  
  216. SELECT ord.TotalAmount
  217. FROM [ORDER] ord
  218.  
  219. SELECT ABS(-12)
  220.  
  221. SELECT RAND(12)
  222.  
  223. /*Subqueries*/
  224.  
  225. SELECT cus.FirstName,
  226.         cus.LastName,
  227.         OrderCount = (SELECT COUNT(ord.Id) FROM [ORDER] ord WHERE ord.CustomerId = cus.Id)
  228. FROM Customer cus
  229.  
  230. SELECT ProductName
  231. FROM Product pro
  232. WHERE pro.Id IN (SELECT ordit.ProductId
  233.                     FROM OrderItem ordit
  234.                     WHERE ordit.Quantity > 100)
  235.  
  236. ----------
  237.  
  238. /*INSERT, UPDATE, DELETE*/
  239.  
  240. INSERT INTO Customer(FirstName, LastName, City, Country, Phone)
  241.     VALUES('Pedro', 'DiBella Nava', 'Tampico', 'México', '121-45-53')
  242.  
  243. SELECT *
  244. FROM Customer
  245.  
  246. INSERT INTO Customer (FirstName, LastName, City, Country, Phone)
  247.     SELECT LEFT(ContactName, CHARINDEX(' ',ContactName) - 1) AS FirstName,
  248.             SUBSTRING(ContactName, CHARINDEX(' ',ContactName) + 1, 100) AS LastName,
  249.             City,
  250.             Country,
  251.             Phone
  252.     FROM Supplier
  253.     WHERE Country = 'Canada'
  254.  
  255. UPDATE Customer
  256. SET LastName = 'Leal'
  257. WHERE Id = 92
  258.  
  259. DELETE Customer
  260. WHERE id = 92
  261.  
  262. -----------
  263.  
  264. /*Condicionales*/
  265.  
  266. IF DATENAME(weekday, GETDATE()) IN ('Saturday', 'Sunday')
  267.     SELECT 'Weekend'
  268. ELSE
  269.     SELECT 'Weekday'
  270.  
  271. SELECT ord.CustomerId,
  272.         cus.FirstName,
  273.         cus.LastName,
  274.         Payback =
  275.             CASE
  276.                 WHEN SUM(ord.TotalAmount) >= 10000 AND SUM(ord.TotalAmount) < 20000
  277.                     THEN
  278.                         SUM(ord.TotalAmount) * 0.25
  279.                 WHEN SUM(ord.TotalAmount) >= 20000 AND SUM(ord.TotalAmount) < 30000
  280.                     THEN   
  281.                         SUM(ord.TotalAmount) * 0.30
  282.                 WHEN SUM(ord.TotalAmount) >= 30000
  283.                     THEN
  284.                         SUM(ord.TotalAmount) * 0.40
  285.                 WHEN SUM(ord.TotalAmount) < 10000
  286.                     THEN
  287.                         0          
  288.             END
  289. FROM [ORDER] ord
  290. LEFT JOIN Customer cus ON ord.CustomerId = cus.Id
  291. GROUP BY ord.CustomerId, cus.FirstName, cus.LastName
  292.  
  293. SELECT ord.CustomerId, SUM(ord.TotalAmount) Total
  294. FROM [ORDER] ord
  295. WHERE ord.CustomerId = 4
  296. GROUP BY ord.CustomerId
  297.  
  298. ----------
  299.  
  300. /*Ciclos*/
  301.  
  302. DECLARE @intFlag INT
  303. SET @intFlag = 1
  304.  
  305. WHILE (@intFlag <=5)
  306.     BEGIN
  307.         PRINT @intFlag
  308.         SET @intFlag = @intFlag + 1
  309.     END
  310. GO
  311.  
  312. DECLARE @intFlag INT
  313. SET @intFlag = 1
  314.  
  315. WHILE (@intFlag <=5)
  316.     BEGIN
  317.         PRINT @intFlag
  318.         SET @intFlag = @intFlag + 1
  319.         IF @intFlag = 4
  320.             BREAK;
  321.     END
  322. GO
  323.  
  324. DECLARE @intFlag INT
  325. SET @intFlag = 1
  326.  
  327. WHILE (@intFlag <=5)
  328.     BEGIN
  329.         PRINT @intFlag
  330.         SET @intFlag = @intFlag + 1
  331.         CONTINUE;
  332.         IF @intFlag = 4 -- This will never executed
  333.             BREAK;
  334.     END
  335. GO
  336.  
  337. CREATE TABLE #tmpFechas(
  338.     Fecha   DATE
  339. )
  340.  
  341. DECLARE @fechaInicio    DATE,
  342.         @fechaFin       DATE
  343.        
  344. SET @fechaInicio = '20170501'
  345. SET @fechaFin = '20170531'
  346.  
  347. WHILE(@fechaInicio <= @fechaFin)
  348.     BEGIN
  349.         INSERT INTO #tmpFechas(Fecha)
  350.             VALUES(@fechaInicio)
  351.         SET @fechaInicio = DATEADD(DAY, 1, @fechaInicio)
  352.     END
  353.  
  354. SELECT *
  355. FROM #tmpFechas
  356.  
  357. DROP TABLE #tmpFechas
  358.  
  359. ----------
  360.  
  361. /*Índices*/
  362.  
  363. CREATE NONCLUSTERED INDEX IDX_Orders ON [ORDER](OrderDate)
  364.  
  365. SELECT *
  366. FROM [ORDER] ord
  367. WITH (INDEX(IDX_Orders))
  368. WHERE ord.OrderDate BETWEEN '20120828' AND '20120830'
  369.  
  370. DROP INDEX IDX_Orders ON [ORDER]
  371.  
  372. ---------
  373.  
  374. /*Cursores*/
  375.  
  376. SELECT *
  377. FROM [ORDER]
  378.  
  379. DECLARE @vFirstName     AS VARCHAR(MAX),
  380.         @vLastName      AS VARCHAR(MAX),
  381.         @vMoneySpent    AS MONEY
  382.  
  383. DECLARE @CustomerMoneySpent AS CURSOR
  384.  
  385. SET @CustomerMoneySpent = CURSOR FOR
  386. SELECT cus.FirstName,
  387.         cus.LastName,
  388.         SUM(ord.TotalAmount)
  389. FROM Customer cus
  390. LEFT JOIN [ORDER] ord ON cus.Id = ord.CustomerId
  391. GROUP BY cus.FirstName, cus.LastName
  392.  
  393. OPEN @CustomerMoneySpent;
  394. FETCH NEXT FROM @CustomerMoneySpent INTO @vFirstName, @vLastName, @vMoneySpent;
  395.  
  396. WHILE @@FETCH_STATUS = 0
  397.     BEGIN
  398.         PRINT @vFirstName + ' ' + @vLastName + ' ' + CAST(@vMoneySpent AS VARCHAR(10));
  399.         FETCH NEXT FROM @CustomerMoneySpent INTO @vFirstName, @vLastName, @vMoneySpent;
  400.     END
  401.  
  402. CLOSE @CustomerMoneySpent;
  403. DEALLOCATE @CustomerMoneySpent;
  404.  
  405. ----------
  406.  
  407. /*Triggrs*/
  408.  
  409. /*IF NOT EXISTS (SELECT * from sys.databases where name = 'db_test')
  410. BEGIN
  411.     CREATE DATABASE db_test;
  412. END
  413.  
  414. USE db_test;*/
  415.  
  416. IF NOT EXISTS(SELECT * FROM sys.sysobjects WHERE name='Expedientes' AND xtype='U')  
  417. CREATE TABLE expedientes (
  418.     Code                VARCHAR(15) NOT NULL,
  419.     State               VARCHAR(20) DEFAULT 'INICIO',
  420.     StateChangedDate    DATETIME,
  421.     CONSTRAINT          PK_Expedientes PRIMARY KEY(code)    
  422. )
  423.  
  424. DELETE FROM Expedientes WHERE Code IN ('exp1','exp2', 'exp3');
  425. INSERT INTO Expedientes(Code) VALUES('exp1');
  426. INSERT INTO Expedientes(Code) VALUES('exp2');
  427. INSERT INTO Expedientes(Code) VALUES('exp3');
  428.  
  429. IF NOT EXISTS (SELECT * FROM sys.sysobjects WHERE name='ExpStatusHistory' AND xtype='U')  
  430. CREATE TABLE ExpStatusHistory (
  431.     Id          INT IDENTITY,
  432.     Code        VARCHAR(15) NOT NULL,
  433.     State       VARCHAR(20) NOT NULL,
  434.     DATE        DATETIME DEFAULT GETDATE(),
  435.     CONSTRAINT  PK_ExpStatusHistory PRIMARY KEY(id)
  436. );
  437.  
  438. --IF EXISTS(SELECT 1 FROM sys.triggers WHERE name = 'StatusChangeDateTrigger')
  439. --  DROP TRIGGER StatusChangeDateTrigger
  440. --GO
  441. IF OBJECT_ID('StatusChangeDateTrigger', 'TR') IS NOT NULL
  442. BEGIN
  443.     DROP TRIGGER StatusChangeDateTrigger;
  444. END
  445. GO
  446.  
  447. CREATE TRIGGER StatusChangeDateTrigger ON Expedientes
  448. AFTER UPDATE AS
  449.     IF UPDATE(state)
  450.         BEGIN
  451.             UPDATE expedientes
  452.             SET stateChangedDate = GETDATE()
  453.             WHERE code = (SELECT code FROM inserted);
  454.  
  455.             INSERT INTO ExpStatusHistory(Code, State)
  456.             SELECT Code, State
  457.             FROM deleted
  458.             WHERE Code = deleted.Code
  459.         END
  460. GO      
  461.  
  462. SELECT *
  463. FROM Expedientes
  464.  
  465. UPDATE Expedientes
  466. SET State = 'PENDIENTE_COBRO'
  467. WHERE Code = 'exp1'
  468.  
  469. SELECT *
  470. FROM ExpStatusHistory
  471.  
  472. ----------
  473.  
  474. /*Stored Procedure*/
  475.  
  476. IF EXISTS(SELECT 1 FROM sys.procedures WHERE name = 'spCustomerIns')
  477.     DROP PROC spCustomerIns
  478. GO
  479. CREATE PROC spCustomerIns(
  480.     @pId        INT OUT,
  481.     @pFirstName NVARCHAR(MAX),
  482.     @pLastName  NVARCHAR(MAX),
  483.     @pCity      NVARCHAR(MAX),
  484.     @pCountry   NVARCHAR(MAX),
  485.     @pPhone     NVARCHAR(MAX)
  486. )
  487. AS
  488.     BEGIN
  489.         SELECT @pId = ISNULL(MAX(cus.Id), 0) + 1  FROM Customer cus
  490.  
  491.         INSERT INTO Customer(Id, FirstName, LastName, City, Country, Phone)
  492.             VALUES(@pId, @pFirstName, @pLastName, @pCity, @pCountry, @pPhone)
  493.     END
  494. GO
  495.  
  496. EXEC spCustomerIns 95, 'Pascual', 'DiBella Nava', 'Tampico', 'México', '212-98-43'
  497.  
  498. SELECT *
  499. FROM Customer
  500.  
  501. ----------
  502.  
  503. /*Functions*/
  504.  
  505. IF EXISTS(SELECT 1 FROM sys.objects WHERE name = 'StripWWWandCom')
  506.     DROP PROC StripWWWandCom
  507. GO
  508.  
  509. CREATE FUNCTION StripWWWandCom(
  510.     @pInput     VARCHAR(250)
  511. )
  512. RETURNS VARCHAR(250)
  513. AS
  514.     BEGIN
  515.         DECLARE @WORK VARCHAR(250)
  516.  
  517.         SET @WORK = @pInput
  518.         SET @WORK = REPLACE(@WORK, 'www.', '')
  519.         SET @WORK = REPLACE(@WORK, '.com', '')
  520.  
  521.         RETURN @WORK
  522.     END
  523.  
  524. DECLARE @vWebSite VARCHAR(MAX)
  525. SET @vWebSite = 'www.google.com'
  526. SELECT dbo.StripWWWandCom(@vWebSite)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement