Advertisement
S_Madanska

26.05

May 26th, 2021
398
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 10.27 KB | None
  1. -------------------------------------------------------------------------------------------------
  2. -------------------------------------------------------------------------------------------------
  3. ------------------------------------ JOIN -------------------------------------------------------
  4. -------------------------------------------------------------------------------------------------
  5.  ------------------------------------------------------------------------------------------------
  6.  
  7. --JOIN се използва за извличане на данни от две или повече таблици, като редовете им се
  8. --комбинират чрез логическа връзка между таблиците, която може да бъде във FROM или WHERE.
  9. --Обикновено тази връзка е първичен/външен ключ, но не задължително.
  10.  
  11.  
  12.  -------------------------------------------------------------------------------------------------
  13. -------------------------------------INNER JOIN или просто JOIN-----------------------------------
  14.  -------------------------------------------------------------------------------------------------
  15. --Извеждат редовете от две/повече таблици, които имат съвпадащи стойности в колоните,
  16. --посочени в условието за сравнение.
  17.  
  18.  
  19. --Пример 4-10.
  20. --  Да се изведат държавите и регионите, в които се намират.
  21.  
  22. SELECT * FROM COUNTRIES
  23.  
  24. SELECT * FROM REGIONS
  25.  
  26. SELECT COUNTRIES.COUNTRY_ID,
  27.        COUNTRIES.NAME,
  28.        COUNTRIES.REGION_ID,
  29.        REGIONS.NAME
  30. FROM COUNTRIES JOIN REGIONS
  31. ON   COUNTRIES.REGION_ID = REGIONS.REGION_ID
  32.  
  33.  
  34. ---ВЪТРЕШЕН JOIN
  35. SELECT *
  36. FROM COUNTRIES JOIN REGIONS
  37. ON   COUNTRIES.REGION_ID = REGIONS.REGION_ID
  38.  
  39. SELECT *
  40. FROM COUNTRIES, REGIONS
  41. WHERE  COUNTRIES.REGION_ID = REGIONS.REGION_ID
  42.  
  43. ---SELECT * FROM .......   ,   ......... WHERE.........
  44. ---SELECT * FROM ........ JOIN ........ ON    .........
  45.  
  46.  
  47. --Пример 4-11.
  48. --  Изведи имена на клиенти, имена на държавите от които са, и имена на регионите на държавите.
  49. SELECT * FROM CUSTOMERS
  50. SELECT * FROM COUNTRIES
  51. SELECT * FROM REGIONS
  52.  
  53. SELECT CUSTOMERS.FNAME,
  54.        CUSTOMERS.LNAME,
  55.        COUNTRIES.NAME AS [COUNTRY NAME],
  56.        REGIONS.NAME AS [REGION NAME]
  57. FROM CUSTOMERS, COUNTRIES, REGIONS
  58. WHERE CUSTOMERS.COUNTRY_ID=COUNTRIES.COUNTRY_ID
  59.   AND COUNTRIES.REGION_ID=REGIONS.REGION_ID
  60.  
  61.   SELECT CUSTOMERS.FNAME,
  62.        CUSTOMERS.LNAME,
  63.        COUNTRIES.NAME AS [COUNTRY NAME],
  64.        REGIONS.NAME AS [REGION NAME]
  65. FROM CUSTOMERS JOIN COUNTRIES ON CUSTOMERS.COUNTRY_ID=COUNTRIES.COUNTRY_ID
  66.                          JOIN REGIONS ON COUNTRIES.REGION_ID=REGIONS.REGION_ID
  67.  
  68.  
  69.  -------------------------------------------------------------------------------------------------
  70. -------------------------------------Видове OUTER JOIN--------------------------------------------
  71.  -------------------------------------------------------------------------------------------------
  72.  
  73.  --ВЪТРЕШЕН JOIN
  74.  SELECT *
  75.  FROM REGIONS JOIN COUNTRIES
  76.  ON REGIONS.REGION_ID=COUNTRIES.REGION_ID
  77.  
  78. --Пример 4-12.
  79. --  Да се изведат регионите и държавите, които се намират в тях. Резултатният
  80. --  набор да включва и регионите, в които няма въведени държави.
  81.  SELECT *
  82.  FROM REGIONS LEFT JOIN COUNTRIES
  83.  ON REGIONS.REGION_ID=COUNTRIES.REGION_ID
  84.  
  85.   SELECT *
  86.  FROM COUNTRIES RIGHT JOIN REGIONS
  87.  ON REGIONS.REGION_ID=COUNTRIES.REGION_ID
  88.  
  89. --Пример 4-13.
  90. --  Да се изведат държавите и регионите, в които се намират.
  91. --  Резултатния набор да включва държавите, за които няма въведен регион.
  92.  
  93. SELECT *
  94. FROM COUNTRIES LEFT JOIN REGIONS
  95. ON COUNTRIES.REGION_ID=REGIONS.REGION_ID
  96.  
  97. SELECT *
  98. FROM REGIONS RIGHT JOIN  COUNTRIES
  99. ON COUNTRIES.REGION_ID=REGIONS.REGION_ID
  100.  
  101.  
  102. /*Пример 4-14.
  103.     Да се изведат държавите и регионите, в които се намират.
  104.     Резултатния набор да включва държавите, за които няма въведен регион и регионите,
  105.     за които няма въведени държави.*/
  106.  
  107. SELECT *
  108. FROM REGIONS FULL JOIN COUNTRIES
  109. ON COUNTRIES.REGION_ID=REGIONS.REGION_ID
  110.  
  111. -----------------------------------------------------------------------------------------------------
  112. --1. НАИМЕНОВАНИЯТА НА ДЛЪЖНОСТИТЕ С МИНИМАЛНА ЗАПЛАТА > 5000.
  113. --СОРТИРАЙ РЕЗУЛТАТНИЯ НАБОР ПО МИНИМАЛНА ЗАПЛАТА НИЗХОДЯЩО.
  114. SELECT JOB_TITLE, MIN_SALARY
  115. FROM JOBS
  116. WHERE MIN_SALARY > 5000
  117. ORDER BY MIN_SALARY DESC
  118. -----------------------------------------------------------------------------------------------------
  119. --2. ИМЕНАТА НА РЕГИОНИТЕ, КАКТО И КОЛКО ДЪРЖАВИ ИМА В ТЯХ.
  120. SELECT R.NAME,
  121.        COUNT(C.COUNTRY_ID) AS [COUNTRIES COUNT]
  122. FROM REGIONS R JOIN COUNTRIES C
  123. ON R.REGION_ID=C.REGION_ID
  124. GROUP BY R.NAME
  125. -----------------------------------------------------------------------------------------------------
  126. --3. ИМЕНАТА И БРОЯ ПОРЪЧКИ, КОИТО СА ИЗПЪЛНИЛИ СЛУЖИТЕЛИТЕ,
  127. --КАТО РЕЗУЛТАТНИЯТ НАБОР ДА ВКЛЮЧВА ВСИЧКИ СЛУЖИТЕЛИ И ТЕЗИ, КОИТО ВСЕ ОЩЕ НЕ СА ИЗПЪЛНЯВАЛИ ПОРЪЧКИ.
  128. --СОРТИРАЙ ПО БРОЯ НА ПОРЪЧКИТЕ ВЪВ ВЪЗХОДЯЩ РЕД.
  129. SELECT * FROM EMPLOYEES
  130. SELECT * FROM ORDERS
  131.  
  132. SELECT E.FNAME,
  133.        E.LNAME,
  134.        COUNT(O.ORDER_ID) AS [ORDERS COUNT]
  135. FROM EMPLOYEES E LEFT JOIN ORDERS O
  136. ON E.EMPLOYEE_ID = O.EMPLOYEE_ID
  137. GROUP BY E.FNAME, E.LNAME
  138. ORDER BY 3 ASC
  139.  
  140. -----------------------------------------------------------------------------------------------------
  141.  
  142.  
  143.  -------------------------------------------------------------------------------------------------
  144.  ----------------------------4.6.6. Други JOIN вариации-------------------------------------------
  145.   -------------------------------------------------------------------------------------------------
  146.  /*
  147. Пример 4-15. EQUI JOIN
  148.     Да се изведат държавите и регионите, в които се намират.*/
  149.     SELECT *
  150.     FROM REGIONS R, COUNTRIES C
  151.     WHERE R.REGION_ID=C.REGION_ID
  152.  
  153.  
  154. /*Пример 4-16.
  155.     Да се изведат отделите, в които има назначени служители.*/
  156.     SELECT * FROM EMPLOYEES
  157.     SELECT * FROM DEPARTMENTS
  158.  
  159.     SELECT *
  160.     FROM EMPLOYEES E JOIN DEPARTMENTS D
  161.     ON E.DEPARTMENT_ID=D.DEPARTMENT_ID
  162.  
  163.     --SEMI JOIN
  164.     -- IN/EXIST
  165.     SELECT *
  166.     FROM DEPARTMENTS
  167.     WHERE DEPARTMENT_ID IN (SELECT DEPARTMENT_ID FROM EMPLOYEES)
  168.  
  169. --Пример 4-17.
  170. --  Да се изведат имената на клиентите, които все още не са правили поръчки.
  171.  SELECT * FROM CUSTOMERS
  172.  SELECT * FROM ORDERS
  173.  
  174.  --SELECT *
  175.  --FROM CUSTOMERS C LEFT JOIN ORDERS O
  176.  --ON C.CUSTOMER_ID=O.CUSTOMER_ID
  177.  
  178.  --ANTI JOIN
  179.  --- NOT IN / NOT EXISTS
  180.  SELECT *
  181.  FROM CUSTOMERS
  182.  WHERE CUSTOMER_ID  NOT IN (SELECT CUSTOMER_ID FROM ORDERS)
  183.  
  184.  
  185.  SELECT *
  186.  FROM CUSTOMERS C
  187.  WHERE NOT EXISTS (SELECT *
  188.                    FROM  ORDERS O
  189.                    WHERE C.CUSTOMER_ID=O.CUSTOMER_ID)
  190.  
  191.  
  192. --Пример 4-18.
  193. --  Да се изведат комбинациите от всички региони и държави, сортирани по име на държава.
  194.  
  195.  --CROSS JOIN
  196.  --4
  197.  --6
  198.  --4X6=24
  199.  
  200.  SELECT * FROM REGIONS         --6
  201.  SELECT * FROM COUNTRIES       --29
  202.  
  203.  SELECT *
  204.  FROM REGIONS, COUNTRIES   --174
  205.  
  206.  
  207.  SELECT * FROM REGIONS CROSS JOIN COUNTRIES
  208.  
  209.  
  210.  -------------------------------------------------------------------------------------------------
  211. --4.6.7. Задачи
  212.  
  213. --Задача 4-8.
  214. --  Извлечи идентификатори, дати на поръчките и имена на служители, които са ги обработили.
  215.  
  216. SELECT * FROM ORDERS
  217. SELECT * FROM EMPLOYEES
  218.  
  219. SELECT ORDER_ID, ORDER_DATE, FNAME, LNAME
  220. FROM ORDERS O JOIN EMPLOYEES E
  221. ON O.EMPLOYEE_ID=E.EMPLOYEE_ID
  222.  
  223. --Задача 4-9.
  224. --  Да се изведат имената на всички клиенти и id на поръчките им.
  225. --  В резултатния набор да участват и клиентите, които все още не са правили поръчки.
  226. SELECT * FROM CUSTOMERS
  227. SELECT * FROM ORDERS
  228.  
  229. SELECT FNAME, LNAME, ORDER_ID
  230. FROM CUSTOMERS C LEFT JOIN ORDERS O
  231. ON C.CUSTOMER_ID=O.CUSTOMER_ID
  232.  
  233.  
  234. --Задача 4-10.
  235. --  Да се изведат имената на продуктите, които не са поръчвани до момента.
  236.  
  237. SELECT * FROM PRODUCTS
  238. SELECT * FROM ORDER_ITEMS
  239.  
  240. SELECT NAME
  241. FROM PRODUCTS P LEFT JOIN ORDER_ITEMS OIT
  242. ON P.PRODUCT_ID=OIT.PRODUCT_ID
  243.  
  244.  
  245. SELECT NAME
  246. FROM PRODUCTS P
  247. WHERE NOT EXISTS (SELECT PRODUCT_ID
  248.                     FROM ORDER_ITEMS OI
  249.                     WHERE P.PRODUCT_ID=OI.PRODUCT_ID)
  250.  
  251. SELECT NAME
  252. FROM PRODUCTS
  253. WHERE PRODUCT_ID NOT IN (SELECT PRODUCT_ID FROM ORDER_ITEMS)
  254.  
  255.  
  256. -----------------------------------------------------------------------------------------------
  257. -------------------------------------ЗА ДОМАШНА:-----------------------------------------------
  258. -----------------------------------------------------------------------------------------------
  259.  
  260. --Задача 4-11.
  261. --  Да се изведат имената на всички клиенти, които са от n държави в регион „Западна Европа“
  262. --ИМЕНА НА КЛИЕНТИ, ИМЕНА НА ДЪРЖАВИ И ИМЕНА НА РЕГИОНИ
  263. SELECT * FROM CUSTOMERS
  264. SELECT * FROM COUNTRIES
  265. SELECT * FROM REGIONS
  266.  
  267.  
  268. 'Западна Европа'
  269. -----------------------------------------------------------------------------------------------
  270.  
Advertisement
RAW Paste Data Copied
Advertisement