S_Madanska

PIZZARIA/22/

Mar 2nd, 2022 (edited)
1,365
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 4.33 KB | None | 0 0
  1. --1. Създаване на обектите от схемата.
  2. CREATE TABLE PIZZAS
  3. (
  4.     PIZZA_ID INT NOT NULL PRIMARY KEY,
  5.     PIZZA_TYPE VARCHAR(20) NOT NULL
  6. )
  7.  
  8. CREATE TABLE CLIENTS
  9. (
  10.     CLIENT_ID INT NOT NULL PRIMARY KEY,
  11.     NAME VARCHAR(30) NOT NULL,
  12.     PHONE VARCHAR(10) NOT NULL
  13. )
  14.  
  15. CREATE TABLE PIZZA_ORDERS
  16. (
  17.     PIZZA_ID INT NOT NULL REFERENCES PIZZAS,
  18.     CLIENT_ID INT NOT NULL REFERENCES CLIENTS,
  19.     PRIMARY KEY(PIZZA_ID, CLIENT_ID),
  20.     QUNATITY INT NOT NULL,
  21.     SIZE CHAR(1) NOT NULL CHECK(SIZE IN ('S','B')),
  22.     DATETME DATETIME NOT NULL
  23.  
  24.     --CONSTRAINT FK_PO_P FOREIGN KEY (PIZZA_ID)
  25.     --  REFERENCES PIZZAS(PIZZA_ID),
  26.     --CONSTRAINT FK_PO_C FOREIGN KEY (CLIENT_ID)
  27.     --  REFERENCES CLIENTS (CLIENT_ID)
  28. )
  29.  
  30.  
  31. --2. Добавяне на атрибут PRICE от тип decimal(5,2)
  32. --за цена в таблица PIZZA_ORDERS с ограничение на
  33. --стойностите само положителни числа.
  34. ALTER TABLE PIZZA_ORDERS
  35. ADD PRICE decimal(5,2) NOT NULL
  36. CHECK(PRICE > 0)
  37.  
  38. SELECT * FROM PIZZA_ORDERS
  39.  
  40. --3. Изтрий атрибут PHONE от таблица CLIENTS.
  41. ALTER TABLE CLIENTS
  42. DROP COLUMN PHONE
  43.  
  44. SELECT * FROM CLIENTS
  45.  
  46. --4. Добавяне по един запис с произволни данни във всяка таблица.
  47. --(или повече)
  48. INSERT INTO PIZZAS(PIZZA_ID, PIZZA_TYPE)
  49. VALUES(1, 'Quatro Formaji'),
  50.       (2, 'Americana'),
  51.       (3, 'Bulgarian pizza'),
  52.       (4, 'Margeritha'),
  53.       (5, 'Vegan pizza')
  54.  
  55. INSERT INTO CLIENTS (CLIENT_ID, NAME)
  56. VALUES(100, 'Pamela Anderson'),
  57.        (101, 'Justin Timberlake'),
  58.        (102, 'Mila Kunis'),
  59.        (103, 'J Lo'),
  60.        (104, 'Vasil Ivanov'),
  61.        (105, 'Borovinka Malinkova')
  62.      
  63. INSERT INTO PIZZA_ORDERS
  64. (PIZZA_ID, CLIENT_ID, QUNATITY, SIZE, DATETME, PRICE)
  65. VALUES(1, 100, 1, 'S', GETDATE(), 2.50),
  66.       (1, 101, 5, 'B', CONVERT(DATETIME, '02-03-2022', 105), 5.50),
  67.       (3, 101, 2, 'S', CONVERT(DATETIME, '01-03-2022', 105), 2.60),
  68.       (2, 102, 5, 'B', CONVERT(DATETIME, '02-03-2022', 105), 2.50),
  69.       (4, 103, 1, 'S', CONVERT(DATETIME, '02-01-2022', 105), 1.50),
  70.       (5, 105, 1, 'B', CONVERT(DATETIME, '02-02-2022', 105), 3.50)
  71.  
  72. SELECT * FROM PIZZA_ORDERS
  73.  
  74. --5. Промени количеството поръчана пица на 5
  75. --и размера на малка за първият въведен идентификатор на пица.
  76. UPDATE PIZZA_ORDERS
  77. SET QUNATITY = 5, SIZE = 'S'
  78. WHERE PIZZA_ID = 1
  79.  
  80. SELECT * FROM PIZZA_ORDERS
  81.  
  82. --6. Вече не се предлага пица с последният идентификатор,
  83. --който сте попълнили – изтрийте я.
  84. DELETE FROM PIZZA_ORDERS
  85. WHERE PIZZA_ID = 5
  86.  
  87. DELETE FROM PIZZAS
  88. WHERE PIZZA_ID = 5
  89.  
  90. --7. Изведи от името на кои клиенти и кога са направени поръчки
  91. --на малки пици. Подреди ги по име на клиент в низходящ ред.
  92. SELECT C.NAME, PO.DATETME
  93. FROM CLIENTS C JOIN PIZZA_ORDERS PO
  94. ON PO.CLIENT_ID = C.CLIENT_ID
  95. WHERE PO.SIZE = 'S'
  96. ORDER BY C.NAME DESC
  97.  
  98. --8. Добави нов клиент, без да добавяш поръчка за него.
  99. INSERT INTO CLIENTS (CLIENT_ID, NAME)
  100. VALUES(106, 'Test Client')
  101.  
  102.  
  103. --9. Изведи имената на клиентите и колко пъти са поръчвали пица.
  104. --В резултатния набор да се покажат и клиентите без поръчка.
  105.  
  106. --/AGG FUNCTIONS: SUM, COUNT, MIN, MAX, AVG/
  107.  
  108. SELECT C.NAME, COUNT(PO.PIZZA_ID) ORDER_COUNT
  109. FROM CLIENTS C LEFT JOIN PIZZA_ORDERS PO
  110. ON PO.CLIENT_ID = C.CLIENT_ID
  111. GROUP BY C.NAME, C.CLIENT_ID
  112.  
  113. --10. Изведи типа и броя на поръчвани пици.
  114. --Само ако са поръчвани в повече от една поръчки.
  115. SELECT P.PIZZA_TYPE, COUNT(PO.PIZZA_ID) PIZZA_COUNT
  116. FROM PIZZAS P JOIN PIZZA_ORDERS PO
  117. ON PO.PIZZA_ID = P.PIZZA_ID
  118. GROUP BY P.PIZZA_TYPE, P.PIZZA_ID
  119. HAVING COUNT(PO.PIZZA_ID) > 1
  120.  
  121. --11. Създай изглед за типа на пиците и сумарната  им стойност в поръчка.
  122.  
  123. --/!ALL COOLUMNS HAVE NAMES/
  124.  
  125. CREATE VIEW TEST_VIEW
  126. AS
  127. SELECT P.PIZZA_TYPE, SUM(PO.QUNATITY*PO.PRICE) TOTAL
  128. FROM PIZZAS P JOIN PIZZA_ORDERS PO
  129. ON P.PIZZA_ID = PO.PIZZA_ID
  130. GROUP BY P.PIZZA_TYPE, PO.PIZZA_ID
Add Comment
Please, Sign In to add comment