Advertisement
S_Madanska

2.2

Feb 2nd, 2022 (edited)
1,081
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 7.52 KB | None | 0 0
  1. -----------------------------------------------------------------------------------------
  2. --------------------------------Homework--CHECK------------------------------------------
  3. -----------------------------------------------------------------------------------------
  4. --Изведи идентификаторите на всички продукти, които не са поръчвани [по поне 2 начина]
  5.     --1
  6.     SELECT PRODUCT_ID FROM PRODUCTS
  7.     EXCEPT
  8.     SELECT PRODUCT_ID FROM ORDER_ITEMS
  9.  
  10.     --2
  11.     SELECT DISTINCT PRODUCT_ID, NAME
  12.     FROM PRODUCTS
  13.     WHERE PRODUCT_ID NOT IN (SELECT PRODUCT_ID FROM ORDER_ITEMS)
  14.  
  15.     --3
  16.     SELECT DISTINCT PRODUCT_ID, NAME
  17.     FROM PRODUCTS
  18.     WHERE PRODUCT_ID <> ALL (SELECT PRODUCT_ID FROM ORDER_ITEMS)
  19.  
  20.     --4
  21.     SELECT DISTINCT PRODUCT_ID, NAME
  22.     FROM PRODUCTS P
  23.     WHERE NOT EXISTS (SELECT * FROM ORDER_ITEMS OI
  24.                       WHERE OI.PRODUCT_ID = P.PRODUCT_ID )
  25.  
  26.     --5. OUTER JOIN - LEFT/RIGHT/FULL
  27.     SELECT P.*
  28.     FROM PRODUCTS P LEFT JOIN ORDER_ITEMS OI
  29.     ON P.PRODUCT_ID = OI.PRODUCT_ID
  30.     WHERE OI.PRODUCT_ID IS NULL
  31.  
  32.  
  33. -----------------------------------------------------------------------------------------
  34. -------------------------------Видове OUTER JOIN-----------------------------------------
  35. -----------------------------------------------------------------------------------------
  36.  
  37.     --Пример 4-12.
  38.     --  Да се изведат регионите и държавите, които се намират в тях. Резултатният
  39.     --  набор да включва и регионите, в които няма въведени държави.
  40.     SELECT *
  41.     FROM REGIONS R LEFT JOIN COUNTRIES C
  42.     ON R.REGION_ID = C.REGION_ID
  43.  
  44.     SELECT *
  45.     FROM COUNTRIES C RIGHT JOIN REGIONS R
  46.     ON R.REGION_ID = C.REGION_ID
  47.  
  48.  
  49.     --Пример 4-13.
  50.     --  Да се изведат държавите и регионите, в които се намират.
  51.     --  Резултатният набор да включва държавите, за които няма въведен регион.
  52.     SELECT *
  53.     FROM REGIONS R RIGHT JOIN COUNTRIES C
  54.     ON R.REGION_ID = C.REGION_ID
  55.  
  56.  
  57.     /*Пример 4-14.
  58.     Да се изведат държавите и регионите, в които се намират.
  59.     Резултатният набор да включва държавите, за които няма въведен регион и регионите,
  60.     за които няма въведени държави.*/
  61.     SELECT *
  62.     FROM REGIONS R FULL JOIN COUNTRIES C
  63.     ON R.REGION_ID = C.REGION_ID
  64.  
  65.     -------------------------------------------------------------------------------------
  66.     -------------------  Задачи за препитване и самопрепитване --------------------------
  67.     -------------------------------------------------------------------------------------
  68.  
  69.     -- 1. Наименуванията на длъжностите с минимална заплата > 5000.
  70.     --    Сортирай резултатния набор по мин. заплата низходящо.
  71.              SELECT J.JOB_TITLE,
  72.                        J.MIN_SALARY
  73.                   FROM JOBS J
  74.                  WHERE J.MIN_SALARY > 5000
  75.               ORDER BY 2 DESC
  76.  
  77.     -- 2. Имената на регионите, както и колко държави има в тях.
  78.        SELECT R.NAME,
  79.               COUNT(C.COUNTRY_ID) [COUNTRY COUNT]
  80.          FROM REGIONS R JOIN COUNTRIES C
  81.            ON R.REGION_ID = C.REGION_ID
  82.      GROUP BY R.NAME
  83.  
  84.     -- 3. Извлечи имената и броя поръчки, които са изпълнили служителите,
  85.     --    като резултатният набор да включва всички служители и тези, които все още
  86.     --    не са изпълнявали поръчки. Сортирай по броя на поръчките във възходящ ред.
  87.         SELECT E.FNAME,
  88.                E.LNAME,
  89.                COUNT(O.ORDER_ID) [ORDERS COUNT]
  90.           FROM EMPLOYEES E LEFT JOIN ORDERS O
  91.             ON E.EMPLOYEE_ID = O.EMPLOYEE_ID
  92.       GROUP BY E.LNAME, E.FNAME
  93.       ORDER BY 3 ASC
  94.  
  95.  
  96. -----------------------------------------------------------------------------------------
  97. /*----------------------------4.6.6. Други JOIN вариации---------------------------------
  98. -----------------------------------------------------------------------------------------
  99.  
  100.     Пример 4-15.
  101.         Да се изведат държавите и регионите, в които се намират.*/
  102.         --EQUI-JOIN /=/
  103.         SELECT *
  104.         FROM COUNTRIES C, REGIONS R
  105.         WHERE R.REGION_ID = C.REGION_ID
  106.  
  107.     /*Пример 4-16.
  108.         Да се изведат отделите, в които има назначени служители.*/
  109.         --SEMI-JOIN /IN/EXISTS/
  110.         SELECT NAME
  111.         FROM DEPARTMENTS
  112.         WHERE DEPARTMENT_ID IN (SELECT DEPARTMENT_ID FROM EMPLOYEES)
  113.  
  114.     --Пример 4-17.
  115.     --  Да се изведат имената на клиентите, които все още не са правили поръчки.
  116.     --ANTI-JOIN /NOT IN/NOT EXISTS/
  117.     SELECT FNAME, LNAME
  118.     FROM CUSTOMERS C
  119.     WHERE NOT EXISTS (SELECT *
  120.                       FROM ORDERS O
  121.                       WHERE O.CUSTOMER_ID= C.CUSTOMER_ID)
  122.  
  123.     --Пример 4-18.
  124.     --  Да се изведат комбинациите от всички региони и държави, сортирани по име на държава.
  125.     --CROSS (CARTESIAN) JOIN
  126.     SELECT * FROM REGIONS, COUNTRIES
  127.     SELECT * FROM REGIONS CROSS JOIN COUNTRIES
  128.  
  129.     --4.6.7. Задачи
  130.  
  131.     --Задача 4-8.
  132.     --  Извлечи идентификатори, дати на поръчките и имена на служители, които са ги обработили.
  133.     SELECT ORDER_ID,
  134.            ORDER_DATE,
  135.            CONCAT(FNAME, ' ', LNAME) AS служител
  136.     FROM ORDERS O JOIN EMPLOYEES E
  137.     ON E.EMPLOYEE_ID = O.EMPLOYEE_ID
  138.  
  139.  
  140. -----------------------------------------------------------------------------------------
  141. ---------------------------------4.7.1. TOP ---------------------------------------------
  142. --  TOP връща първите N реда в неопределен ред, за желаната подредба използваме ORDER BY!
  143. -----------------------------------------------------------------------------------------
  144.     --#1 На коя дата е първата направена поръчка за фирмата?
  145.     SELECT TOP 1 WITH TIES *
  146.     FROM ORDERS
  147.     ORDER BY ORDER_DATE DESC
  148.  
  149.     -- Пример 4-19.
  150.     -- 7-те продукта с най-ниска цена.
  151.     SELECT TOP 7 *
  152.     FROM PRODUCTS
  153.     ORDER BY PRICE
  154.  
  155.     SELECT TOP 7 WITH TIES *
  156.     FROM PRODUCTS
  157.     ORDER BY PRICE
  158.  
  159. -----------------------------------------------------------------------------------------
  160. --------------------------------Homework-------------------------------------------------
  161. -----------------------------------------------------------------------------------------
  162.  
  163.     -- Задача.
  164.     -- Имена, заплата и длъжност на служителите, които работят в отдел 80
  165.     -- и не са обработвали поръчки до момента;
  166.  
  167.     -- Задача 4-9.
  168.     -- Да се изведат имената на всички клиенти и id на поръчките им.
  169.     -- В резултатния набор да участват и клиентите, които все още не са правили поръчки.
  170.  
  171.     -- Задача 4-11.
  172.     -- Да се изведат имената на всички клиенти, които са от държави в регион „Западна Европа“
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement