Advertisement
madanska

PIZZARIA

Nov 27th, 2019
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 4.92 KB | None | 0 0
  1. -----------------------------------------------------------
  2. ---------------Създай база данни за Пицария----------------
  3. -----------------------------------------------------------
  4.  
  5. -- 1.   Създаване на обектите от схемата.;
  6. CREATE DATABASE PIZZARIA
  7. USE PIZZARIA
  8.  
  9. CREATE TABLE PIZZAS
  10. (
  11.     PIZZA_ID int not null,
  12.     PIZZA_TYPE varchar(20) not null
  13.  
  14.     CONSTRAINT PK_PIZZAS PRIMARY KEY (PIZZA_ID)
  15. )
  16.  
  17. CREATE TABLE CLIENTS
  18. (
  19.     CLIENT_ID int not null,
  20.     NAME varchar(30) not null
  21.  
  22.     CONSTRAINT PK_CLIENTS PRIMARY KEY (CLIENT_ID)
  23. )
  24.  
  25. CREATE TABLE PIZZA_ORDERS
  26. (
  27.     PIZZA_ID int not null ,
  28.     CLIENT_ID int not null,
  29.     QUANTITY int not null,
  30.     SIZE char(1) not null CONSTRAINT CH_SIZE CHECK (SIZE IN('B','S')),
  31.     DATETIME datetime not null
  32.  
  33.     CONSTRAINT PK_ORDS PRIMARY KEY (PIZZA_ID, CLIENT_ID),
  34.     CONSTRAINT FK_ORD_PIZZA FOREIGN KEY (PIZZA_ID)
  35.         REFERENCES PIZZAS(PIZZA_ID),
  36.     CONSTRAINT FK_ORD_CLIENT FOREIGN KEY (CLIENT_ID)
  37.         REFERENCES CLIENTS(CLIENT_ID)
  38. )
  39.  
  40.  
  41. -- 2.   Добавяне на атрибут PRICE за цена с ограничение на
  42. --      стойностите cамо положителни числа в таблица PIZZA_ORDERS.;
  43.  
  44. ALTER TABLE PIZZA_ORDERS
  45. ADD PRICE DECIMAL(6,2) NOT NULL Check (PRICE> 0)
  46.  
  47.  
  48. --3.    Добавяне по един запис с произволни данни във всяка таблица.;
  49.  
  50. insert into PIZZAS(PIZZA_ID, PIZZA_TYPE)
  51.            values (101, 'Neapolitan'),
  52.                   (102, 'New York-Style Pizza'),
  53.                   (103, '4 Cheese')
  54.  
  55. insert into CLIENTS(CLIENT_ID,NAME)
  56.             values (1, 'Justin Timberlake'),
  57.                    (2, 'Pamela Anderson'),
  58.                    (3, 'Veneta Raykova')
  59.  
  60.  
  61. insert into PIZZA_ORDERS(PIZZA_ID,CLIENT_ID, QUANTITY, SIZE, DATETIME, PRICE)
  62.                  values (101, 1, 10, 'B', GETDATE(), 80.90),
  63.                         (102, 2, 50, 'S', convert(datetime,'24-12-2019',105), 245),
  64.                         (103, 3, 10, 'B', convert(datetime,'25-11-2019',105), 80.90),
  65.                         (102, 1, 1, 'S', convert(datetime,'26-11-2019',105), 4.90),
  66.                         (103, 2, 2, 'B', '01-01-2019', 9.80)
  67.  
  68.                         SELECT * FROM PIZZA_ORDERS
  69.  
  70. -- 4.   Промени количеството поръчана пица на 5 и размера и на малка.
  71. --      Там където имаш идентификатор 102 и идентификатор на клиент 1.;
  72. UPDATE PIZZA_ORDERS
  73.    SET QUANTITY = 5, SIZE = 'S'
  74.  WHERE PIZZA_ID = 102 AND CLIENT_ID = 1
  75.  
  76. -- 5.   Вече не се предлага пица с първия идентификатор – изтрийте я.;
  77.  
  78. DELETE FROM PIZZA_ORDERS  
  79.       WHERE PIZZA_ID = 101
  80.  
  81. DELETE FROM PIZZAS
  82.       WHERE PIZZA_ID = 101
  83.  
  84.  
  85. --6.    Изведи час на поръчка и име на клиент, само за тези клиенти,  
  86. --      които са поръчвали малка пица. Подреди ги по име на клиент в низходящ ред.;
  87.  
  88.   SELECT PO.DATETIME, C.NAME
  89.     FROM PIZZA_ORDERS PO JOIN CLIENTS C
  90.       ON PO.CLIENT_ID = C.CLIENT_ID
  91.    WHERE PO.SIZE = 'S'
  92. ORDER BY C.NAME DESC
  93.  
  94.  
  95. -- 7.   Изтрий поръчка на клиент с идентификатор 1 от таблицата с поръчките.;
  96. DELETE FROM PIZZA_ORDERS
  97.       WHERE CLIENT_ID = 1
  98.  
  99. -- 8.   Изведи имената на клиентите, колко пъти е поръчвана пица и кога.
  100. --      В резултатния набор да се покажат и клиентите без поръчка.;
  101.  
  102.   SELECT C.NAME,
  103.          PO.DATETIME,                  
  104.          COUNT(PO.PIZZA_ID) [Number of Pizzas]
  105.     FROM PIZZA_ORDERS PO RIGHT JOIN CLIENTS C
  106.       ON PO.CLIENT_ID = C.CLIENT_ID
  107. GROUP BY C.NAME, PO.SIZE, PO.DATETIME
  108.  
  109. -- В условието нямам предвид в резултатния набор да се включи и самият тип на пиците, но ако се
  110. -- изискваше да се покаже и типа на пицата - това става с Multiple Joins, защото ще свързваме 3 таблици:
  111. --  SELECT C.NAME,
  112. --       PO.DATETIME,                  
  113. --         COUNT(PO.PIZZA_ID) [Number of Pizzas],
  114. --       p.PIZZA_TYPE
  115. --    FROM PIZZA_ORDERS PO RIGHT JOIN CLIENTS C   ON PO.CLIENT_ID = C.CLIENT_ID
  116. --                        left join PIZZAS p    on p.PIZZA_ID = po.PIZZA_ID
  117. --GROUP BY C.NAME, PO.SIZE, PO.DATETIME , p.PIZZA_TYPE
  118.  
  119.  
  120. -- 9.   Изведи типа на пиците, сумарната им стойност в поръчка, броя на поръчвани пици.
  121. --      Но само на тези пици, които са поръчвани повече от веднъж.;
  122.   SELECT P.PIZZA_TYPE,
  123.          COUNT(PO.PIZZA_ID) [Number of Pizzas],
  124.          SUM(PO.QUANTITY * PO.PRICE) [Total Price]
  125.     FROM PIZZAS P JOIN PIZZA_ORDERS PO
  126.       ON PO.PIZZA_ID = P.PIZZA_ID
  127. GROUP BY P.PIZZA_TYPE
  128.   HAVING COUNT(PO.PIZZA_ID) > 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement