Advertisement
madanska

pizza_updated

Mar 1st, 2020
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 6.90 KB | None | 0 0
  1. -----------------------------------------------------------
  2. ---------------Създай база данни за Пицария----------------
  3. -----------------------------------------------------------
  4.  
  5. create database PIZZARIA
  6.  
  7. use  PIZZARIA
  8.  
  9. ---------------------------------------------------------
  10. -- 1.   Създаване на обектите от схемата.
  11. ---------------------------------------------------------
  12. create table PIZZAS
  13. (
  14.     PIZZA_ID int not null,
  15.     PIZZA_TYPE varchar(20) not null
  16.  
  17.     CONSTRAINT PK_PIZZAS PRIMARY KEY (PIZZA_ID)
  18. )
  19.  
  20.  
  21. create table CLIENTS
  22. (
  23.     CLIENT_ID int not null,
  24.     NAME varchar(30) not null,
  25.     PHONE varchar(15) null
  26.  
  27.     CONSTRAINT PK_CLIENTS PRIMARY KEY (CLIENT_ID)
  28. )
  29.  
  30.  
  31. create table PIZZA_ORDERS
  32. (
  33.     PIZZA_ID int not null,
  34.     CLIENT_ID int not null,
  35.     QUANTITY int not null,
  36.     SIZE char(1) not null check(SIZE='S' or SIZE='B'),
  37.     DATETIME datetime not null
  38.  
  39.     constraint PK_PIZZA_ORDERS primary key(PIZZA_ID, CLIENT_ID),
  40.     constraint FK_PO_PIZZAS foreign key (PIZZA_ID) references PIZZAS(PIZZA_ID),
  41.     constraint FK_PO_CLIENTS foreign key (CLIENT_ID) references CLIENTS(CLIENT_ID)
  42. )
  43.  
  44.  
  45. ---------------------------------------------------------
  46. -- 2.   Добавяне на атрибут PRICE от тип decimal(5,2)
  47. -- за цена в таблица PIZZA_ORDERS с ограничение
  48. -- на стойностите само положителни числа.
  49. ---------------------------------------------------------
  50. alter table PIZZA_ORDERS
  51.         add PRICE decimal(5,2) not null check(PRICE > 0)
  52.  
  53.  
  54. ---------------------------------------------------------
  55. --3.    Изтрий атрибут PHONE от таблица CLIENTS.
  56. ---------------------------------------------------------
  57. alter table CLIENTS
  58. drop column PHONE
  59.  
  60.  
  61. ---------------------------------------------------------
  62. --4.    Добавяне по един запис с произволни данни във всяка таблица.
  63. -- (по-добре повече от 1)
  64. ---------------------------------------------------------
  65. insert into PIZZAS(PIZZA_ID,PIZZA_TYPE)
  66.             values(1, 'Quatro Formaji'),
  67.                   (2, 'Americana'),
  68.                   (3, 'Margeritha'),
  69.                   (4, 'Broccoli Pizza'),
  70.                   (5, 'Bulgarian Pizza')
  71.                  
  72. insert into CLIENTS(CLIENT_ID,NAME)
  73.              values(100, 'Pamela Anderson'),
  74.                    (101, 'Mila Kunis'),
  75.                    (102, 'Veneta Raykova'),
  76.                    (103, 'Vasil Naidenov'),
  77.                    (104, 'Petar Stoyanov'),
  78.                    (105, 'Justin Timberlake')
  79.                    
  80. insert into PIZZA_ORDERS(PIZZA_ID, CLIENT_ID, QUANTITY, SIZE, DATETIME, price)
  81.                   values(1, 100, 3, 'S', convert(datetime,'20-01-2020',105), 4.00),
  82.                         (2, 100, 1, 'S', convert(datetime,'20-01-2020',105), 3.00),
  83.                         (3, 101, 5, 'B', convert(datetime,'20-02-2020',105), 2.50),
  84.                         (4, 104, 1, 'B', convert(datetime,'01-03-2020',105), 2.60),
  85.                         (5, 105, 10,'S', getdate(), 5.00),
  86.                         (5, 104, 1, 'S', convert(datetime,'10-02-2020',105), 5.00)
  87.  
  88. select * from PIZZAS
  89. select * from CLIENTS
  90. select * from PIZZA_ORDERS
  91.  
  92. ---------------------------------------------------------
  93. --5.    Промени количеството поръчана пица на 5 и размера
  94. -- на малка за първият въведен идентификатор на пица.
  95. ---------------------------------------------------------
  96. update PIZZA_ORDERS
  97.    set QUANTITY=5, SIZE='s'
  98.  where PIZZA_ID=1
  99.  
  100. --проверка:
  101. select * from PIZZA_ORDERS
  102.  
  103.  
  104. ---------------------------------------------------------
  105. -- 6.   Вече не се предлага пица с последният идентификатор,
  106. -- който сте попълнили – изтрийте я.
  107. ---------------------------------------------------------
  108. select * from PIZZA_ORDERS
  109.  
  110. -- (трием първо в таблицата, където последно е използван PIZZA_ID = 5
  111. delete from PIZZA_ORDERS
  112.       where PIZZA_ID = 5
  113.  
  114.  
  115. --  и след това в таблицата, в която е съзаден PIZZA_ID = 5)
  116. delete from PIZZAS
  117.       where PIZZA_ID = 5
  118.  
  119. --проверка:
  120. select * from PIZZA_ORDERS
  121. select * from PIZZAS
  122.  
  123. ---------------------------------------------------------
  124. -- 7.   Изведи от името на кои клиенти  
  125. -- и кога са направени поръчки на  малки пици.
  126. -- Подреди ги по име на клиент в низходящ ред.  
  127. ---------------------------------------------------------
  128.   SELECT C.NAME,
  129.          PO.DATETIME
  130.     FROM PIZZA_ORDERS PO JOIN CLIENTS C
  131.       ON PO.CLIENT_ID = C.CLIENT_ID
  132.    WHERE PO.SIZE = 'S'
  133. ORDER BY C.NAME DESC
  134.  
  135.  
  136. ---------------------------------------------------------
  137. --8.    Добави нов клиент, без да добавяш поръчка за него.  
  138. ---------------------------------------------------------
  139. insert into CLIENTS(CLIENT_ID, NAME)
  140.             values(107, 'Mira Ivanova')
  141.  
  142. ---------------------------------------------------------
  143. --9.    Изведи имената на клиентите и колко пъти са поръчвали пица.
  144. --В резултатния набор да се покажат и клиентите без поръчка.
  145. ---------------------------------------------------------
  146.   SELECT C.NAME,
  147.          COUNT(PO.PIZZA_ID) AS [PIZZA ORDS]
  148.     FROM CLIENTS C LEFT  JOIN PIZZA_ORDERS PO
  149.       ON C.CLIENT_ID = PO.CLIENT_ID
  150. GROUP BY C.NAME
  151.  
  152.  
  153. ---------------------------------------------------------
  154. -- 10.  Изведи типа и броя на поръчвани пици.
  155. -- Само ако са поръчвани в повече от една поръчки.
  156. ---------------------------------------------------------
  157.    SELECT P.PIZZA_TYPE,
  158.           COUNT(PO.PIZZA_ID)  as [Ordered Pizza Count]
  159.      FROM PIZZAS P JOIN PIZZA_ORDERS PO
  160.        ON P.PIZZA_ID=PO.PIZZA_ID
  161.  GROUP BY P.PIZZA_TYPE
  162.    HAVING COUNT(PO.PIZZA_ID) > 1
  163.  
  164. --  излиза, че нямаме пица, която да са поръчвали
  165. --  двама клиента, тоест да е участвала в две поръчки
  166.  
  167. -- затова ще проверим дали заявката ни работи като добавим
  168. -- още една поръчка с пица, която е поръчвана, но този път от различен клиент:
  169. insert into PIZZA_ORDERS(PIZZA_ID, CLIENT_ID, QUANTITY, SIZE, DATETIME, price)
  170.                   values(1, 103, 3, 'S', convert(datetime,'20-01-2020',105), 4.10)
  171.  
  172.  
  173. ---------------------------------------------------------
  174. --11.   Създай изглед за типа на пиците и сумарната им стойност в поръчка.
  175. ---------------------------------------------------------
  176. create view MyFirstView
  177. as
  178.   select p.PIZZA_TYPE,
  179.          sum(po.QUANTITY*po.PRICE) as Summary
  180.     from PIZZAS p join PIZZA_ORDERS po
  181.       on p.PIZZA_ID=po.PIZZA_ID
  182. group by p.PIZZA_TYPE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement