Advertisement
S_Madanska

2.6.R

Jun 2nd, 2021
600
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 7.24 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------
  2. ------------------------------------ JOIN -------------------------------------------------
  3. -------------------------------------------------------------------------------------------
  4. --др
  5. --Задача 4-11.
  6. --  Да се изведат имената на всички клиенти, които са от n държави в регион „Западна Европа“
  7. SELECT * FROM CUSTOMERS
  8. SELECT * FROM COUNTRIES
  9. SELECT * FROM REGIONS
  10.  
  11. --INNER JOIN
  12. ---SELECT ..... FROM ....JOIN.... ON
  13. ---SELECT ......FROM .....,...... WHERE
  14.  
  15. SELECT CU.FNAME,
  16.        CU.LNAME,
  17.        CO.NAME AS [COUNTRY NAME] ,
  18.        RE.NAME AS [REGION NAME]
  19. FROM CUSTOMERS CU, COUNTRIES CO, REGIONS RE
  20. WHERE RE.REGION_ID=CO.REGION_ID
  21.   AND CO.COUNTRY_ID=CU.COUNTRY_ID
  22.   AND RE.NAME ='Западна Европа'
  23.  
  24. -------------------------------------------------------------------------------------------
  25. -- Имена, заплата и длъжността на служителите, които работят в
  26. ---отдел 80 и не са обработвали поръчки до момента;
  27.  
  28. SELECT * FROM EMPLOYEES
  29. SELECT * FROM ORDERS
  30.  
  31. --НАЧИН 1
  32. --OUTER JOIN
  33. SELECT E.FNAME, E.LNAME, E.SALARY, E.JOB_ID, E.DEPARTMENT_ID , O.ORDER_ID
  34. FROM EMPLOYEES E LEFT JOIN ORDERS O
  35. ON E.EMPLOYEE_ID=O.EMPLOYEE_ID
  36. WHERE E.DEPARTMENT_ID=80
  37. AND O.ORDER_ID IS NULL
  38.  
  39. --НАЧИН 2
  40. --HAVING
  41. SELECT E.FNAME,
  42.        E.LNAME,
  43.        E.SALARY,
  44.        E.JOB_ID,
  45.        E.DEPARTMENT_ID,
  46.        COUNT(O.ORDER_ID) AS BROI
  47. FROM EMPLOYEES E LEFT JOIN ORDERS O
  48. ON E.EMPLOYEE_ID=O.EMPLOYEE_ID
  49. WHERE E.DEPARTMENT_ID=80
  50. GROUP BY E.FNAME,  E.LNAME,  E.SALARY,   E.JOB_ID,  E.DEPARTMENT_ID
  51. HAVING   COUNT(O.ORDER_ID) = 0
  52.  
  53. --НАЧИН 3
  54. SELECT E.FNAME, E.LNAME, E.SALARY, E.JOB_ID, E.DEPARTMENT_ID
  55. FROM EMPLOYEES E
  56. WHERE E.DEPARTMENT_ID= 80
  57. AND
  58. NOT EXISTS (SELECT * FROM ORDERS O WHERE E.EMPLOYEE_ID=O.EMPLOYEE_ID)
  59.  
  60. --------------------------------------------------------------------------------------
  61. -----------------------------------TOP -----------------------------------------------
  62. --------------------------------------------------------------------------------------
  63. -- TOP връща първите N реда в неопределен ред, което налага използване на ORDER BY,
  64. --за да е в желан ред.
  65.  
  66. -- Пример 4-19.
  67. -- 7-те продукта с най-ниска цена.
  68. SELECT TOP 7 *
  69. FROM PRODUCTS
  70. ORDER BY PRICE -- ASC DESC
  71.  
  72.  
  73. -- за да присъстват и продуктите с цена, равна на последната изведена,
  74. -- трябва да се използва TOP с WITH TIES
  75. SELECT TOP 7 WITH TIES *
  76. FROM PRODUCTS
  77. ORDER BY PRICE
  78.  
  79.  
  80. -- Доп.пример:
  81. -- a) Идентификаторът на най-поръчваният продукт  е ?
  82. SELECT TOP (1) PRODUCT_ID,
  83.                COUNT(PRODUCT_ID)
  84.  FROM ORDER_ITEMS
  85.  GROUP BY PRODUCT_ID
  86.  
  87.  
  88.  
  89. ---b) Името на най-поръчваният продукт  е ?
  90. SELECT * FROM ORDER_ITEMS
  91. SELECT * FROM PRODUCTS
  92.  
  93. SELECT TOP (1) P.NAME, P.PRODUCT_ID, COUNT(OI.PRODUCT_ID)
  94. FROM PRODUCTS P JOIN ORDER_ITEMS OI
  95. ON P.PRODUCT_ID=OI.PRODUCT_ID
  96. GROUP BY P.NAME, P.PRODUCT_ID
  97. ORDER BY 3 DESC
  98.  
  99.  
  100. -----------------------------------------------------------------------------------------
  101. ---------------------------------4.7.2. OFFSET и FETCH ----------------------------------
  102. -----------------------------------------------------------------------------------------
  103. /*
  104.    Пример 4-21.
  105.    петимата служители, започвайки от 10-ти ред, подредени по дата на постъпване.
  106.  
  107. */
  108.  
  109. --   Първата заявка ще покаже всички за демонстрация,
  110. SELECT EMPLOYEE_ID, FNAME, LNAME, SALARY, HIRE_DATE
  111. FROM EMPLOYEES
  112. ORDER BY HIRE_DATE DESC
  113.  
  114. ---втората ще извърши подбора.
  115. SELECT EMPLOYEE_ID, FNAME, LNAME, SALARY, HIRE_DATE
  116. FROM EMPLOYEES
  117. ORDER BY HIRE_DATE DESC
  118. OFFSET 9 ROWS
  119. FETCH NEXT 5 ROWS ONLY
  120.  
  121.  
  122. /* 4.7.3. Задачи
  123.  
  124.    Задача 4-12.
  125.    вторите 10 най-добре платени служители (подредени по заплата низходящо).
  126. */
  127. SELECT EMPLOYEE_ID, SALARY
  128. FROM EMPLOYEES
  129. ORDER BY SALARY DESC
  130. OFFSET 10 ROWS
  131. FETCH NEXT 10 ROWS ONLY
  132.  
  133. /*
  134.     Задача 4-13.
  135.    Да се изведат име, фамилия и пол на клиентите, направили последните 5 поръчки.
  136.  
  137. */
  138. SELECT * FROM CUSTOMERS
  139. SELECT * FROM ORDERS
  140.  
  141. SELECT C.FNAME, C.LNAME, C.GENDER, O.ORDER_DATE
  142. FROM CUSTOMERS C JOIN ORDERS O
  143. ON C.CUSTOMER_ID=O.CUSTOMER_ID
  144. ORDER BY O.ORDER_DATE DESC
  145. OFFSET 0 ROWS
  146. FETCH NEXT 5 ROWS ONLY
  147.  
  148.  
  149. --------------------------------------------------------------------------
  150. -----------------------------Изгледи = Views------------------------------
  151. --------------------------------------------------------------------------
  152.  
  153. --  Създаване на изгледи
  154.  
  155. --Пример 5-1. Да се създаде изглед, който съдържа име и фамилия на клиентите, както и
  156. --номер и дата на поръчките, които те са направили.
  157.  
  158. SELECT * FROM CUSTOMERS
  159. SELECT * FROM ORDERS
  160.  
  161.  
  162. CREATE VIEW CUSTOMERORDERS
  163. AS
  164. SELECT C.FNAME + ' ' + C.LNAME AS [CUSTOMER NAME],
  165.        O.ORDER_ID,
  166.        O.ORDER_DATE
  167. FROM ORDERS O, CUSTOMERS C
  168. WHERE O.CUSTOMER_ID=C.CUSTOMER_ID
  169.  
  170.  
  171. --Да се изведат данните от изгледа:
  172. SELECT * FROM CUSTOMERORDERS
  173.  
  174. --Пример 5-2. Да се модифицира горният изглед така, че да съдържа и колона с името на
  175. --съответния служител, обработил поръчката.
  176.  
  177. ALTER VIEW CUSTOMERORDERS
  178. AS
  179. SELECT C.FNAME + ' ' + C.LNAME AS [CUSTOMER NAME],
  180.        O.ORDER_ID,
  181.        O.ORDER_DATE,
  182.        E.FNAME + ' ' + E.LNAME AS [EMPLOYEE NAME]
  183. FROM ORDERS O, CUSTOMERS C, EMPLOYEES E
  184. WHERE O.CUSTOMER_ID=C.CUSTOMER_ID
  185.   AND E.EMPLOYEE_ID=O.EMPLOYEE_ID
  186.  
  187. --Да се изведат данните от изгледа:
  188. SELECT * FROM CUSTOMERORDERS
  189.  
  190.  
  191. --Пример 5-3.
  192. -- Да се модифицира горния изглед така, че да съдържа само поръчките,
  193. --обработени от служител с идентификатор = 167.
  194.  
  195.  
  196. ALTER VIEW CUSTOMERORDERS
  197. AS
  198. SELECT C.FNAME + ' ' + C.LNAME AS [CUSTOMER NAME],
  199.        O.ORDER_ID,
  200.        O.ORDER_DATE,
  201.        E.FNAME + ' ' + E.LNAME AS [EMPLOYEE NAME]
  202. FROM ORDERS O, CUSTOMERS C, EMPLOYEES E
  203. WHERE O.CUSTOMER_ID=C.CUSTOMER_ID
  204.   AND E.EMPLOYEE_ID=O.EMPLOYEE_ID
  205.   AND E.EMPLOYEE_ID = 167
  206.  
  207. --Да се изведат данните от изгледа:
  208. SELECT * FROM CUSTOMERORDERS
  209.  
  210.  
  211.  
  212. ------------------------------------------------------------------------------------
  213. --ДОМАШНА РАБОТА:
  214. --Пример 5-4.
  215. --Да се създаде изглед, съдържащ име и фамилия на служител и общата сума на
  216. --поръчките, които той е обработил.
  217.  
  218.  
  219.  
  220.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement