Advertisement
S_Madanska

26.01.22

Jan 26th, 2022 (edited)
1,157
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -------------------------------------------------------------------------------------------
  2. ----------------------------------homework check-------------------------------------------
  3. -------------------------------------------------------------------------------------------
  4. --Пример 4-1.
  5. --Да се изведат имената, датите на назначаване и заплатите на всички служители.
  6. SELECT FNAME, LNAME, HIRE_DATE, SALARY
  7.   FROM EMPLOYEES
  8.  
  9. /*Пример 4-2.
  10. Да се изведат всички данни за продуктите, с цена по-голяма от 2000.
  11. Резултатът нека бъде подреден по цена на продукт възходящо.*/
  12.   SELECT *
  13.     FROM PRODUCTS
  14.    WHERE PRICE > 2000
  15. ORDER BY PRICE
  16.  
  17. --Пример 4-4.
  18. --Да се изведе броя служители, групирани по отдела, в който работят.
  19.   SELECT DEPARTMENT_ID,
  20.          COUNT(EMPLOYEE_ID) AS EMP_COUNT      
  21.     FROM EMPLOYEES
  22. GROUP BY DEPARTMENT_ID
  23.  
  24. --4.2.1. Задачи
  25. --Задача 4-1.
  26. --Да се изведат имената, заплатите и идентификаторите на длъжностите на
  27. --служителите, работещи в отдели 50 и 80. Резултатът да е подреден по фамилия на служител във възходящ ред.
  28.   SELECT FNAME,
  29.          LNAME,
  30.          SALARY,
  31.          JOB_ID
  32.     FROM EMPLOYEES
  33.    WHERE DEPARTMENT_ID = 50 OR DEPARTMENT_ID = 80
  34. ORDER BY LNAME ASC
  35.  
  36. ------------------------------------------------------------------------------------------
  37. --------------------------------условия на търсене----------------------------------------
  38. ------------------------------------------------------------------------------------------
  39.  
  40. --Обхват – BETWEEN, NOT BETWEEN
  41. SELECT *
  42.  FROM PRODUCTS
  43. WHERE PRICE NOT BETWEEN 1 AND 1000
  44.  ------------------------------------------------------
  45.  
  46. --Принадлежност към множество – IN, NOT IN.
  47. SELECT *
  48.  FROM CUSTOMERS
  49. WHERE COUNTRY_ID in ('BG', 'DE')
  50.  ------------------------------------------------------
  51. --Търсене на неизвестни стойности – IS [NOT] NULL.
  52.  
  53.  /*Поле със стойност NULL е празно поле. Това е липса на стойност.
  54.  Стойността на NULL е различна от 0 или интервал.  Ако column в
  55. таблица е разрешено да сърържа null стойности можете да вмъкнете нов запис или да
  56. актуализирате запис, без да добавите стойност в нея. Тогава полето ще бъде запазено с NULL стойност.
  57. Не е. възможно да се тестват стойности за NULL с оператори за сравнение =, <, <>.
  58.  Вместо тях използваме операторите IS NULL и IS NOT NULL.
  59. */
  60. select *
  61.   from EMPLOYEES
  62.  where MANAGER_ID is not null
  63.  
  64. select *
  65.   from EMPLOYEES
  66.  where MANAGER_ID is  null
  67.   ------------------------------------------------------
  68. /*Наколко условия за търсене се обединяват с AND или/и OR.
  69.  
  70. Приоритетът на логическите оператори е
  71. 1). NOT
  72. 2). AND
  73. 3). OR
  74. Скобите променят приоритета.
  75. */
  76.  
  77. SELECT *
  78.   FROM Customers
  79.  WHERE COUNTRY_ID='BG'
  80.   AND (GENDER='F' OR LNAME='Петров')
  81.  
  82. ---Wildcards [more info: --https://www.w3schools.com/sql/sql_wildcards.asp ]
  83. SELECT * FROM Customers
  84. WHERE ADDRESS LIKE '%, София%'
  85.  
  86. --_
  87. --%
  88.  
  89.  
  90. -------------------------------------------------------------------------------------------
  91. -------------------------------------Set operators-----------------------------------------
  92. ---------------------------------------UNION ----------------------------------------------
  93. /*  Резултатните набори, които се обединяват, трябва да отговарят на следните условия:
  94.         -Всяка заявка в оператора UNION трябва да има еднакъв брой колони;
  95.         -Колоните трябва да имат съвместими типове от данни;
  96.         -В целия израз може да присъства само една клауза ORDER BY накрая,
  97.         сортираща обединения резултат.
  98. */
  99.  
  100. --Пример 4-5.
  101.     --Да се изведат идентификаторите на държавите, в които има клиенти или отдели на фирмата.
  102.         SELECT COUNTRY_ID FROM CUSTOMERS
  103.         UNION
  104.         SELECT COUNTRY_ID FROM DEPARTMENTS
  105.  
  106. --Пример 4-6.
  107.     --Да се изведат идентификаторите на държавите, в които има клиенти или отдели на фирмата.
  108.     --Нека в резултатния набор участват и дублиращите се записи.
  109.         SELECT COUNTRY_ID FROM CUSTOMERS
  110.         UNION ALL
  111.         SELECT COUNTRY_ID FROM DEPARTMENTS
  112.  
  113. /*
  114. 4.3.1. Задачи
  115. Задача 4-4.
  116.     Да се изведат всички малки имена на клиенти и служители с евентуалните
  117.     повторения, сортирани в низходящ ред по име. */
  118.     SELECT FNAME FROM CUSTOMERS
  119.     UNION ALL
  120.     SELECT FNAME FROM EMPLOYEES
  121.     ORDER BY 1 DESC
  122.  
  123. /*Задача 4-5.
  124.     Да се изведат име и фамилия на клиенти и служители без повторения, а като
  125.     трета колона за клиентите да се използва израз, генериращ низа „Клиент
  126.     (<идентификатор>)“, за служителите – „Служител (<идентификатор>)“. */
  127.  
  128.     SELECT FNAME, LNAME, 'Клиент (' + COUNTRY_ID + ')' AS ID
  129.     FROM CUSTOMERS
  130.     UNION
  131.     SELECT FNAME, LNAME, 'Служител (' + CAST (DEPARTMENT_ID AS varchar) + ')'
  132.     FROM EMPLOYEES
  133.     ORDER BY 2 DESC
  134.  
  135. ----------------------------------INTERSECT(сечение)---------------------------------------
  136. /*резултата съдържа общите за двата резултатни набора редове, без дубликати.
  137. условия:
  138.      -Броят на колоните във всички заявки трябва да бъде еднакъв;
  139.      -Колоните трябва да бъдат от съвместими типове от данни.
  140.  
  141. Пример 4-7.
  142.     Да се изведат id на държавите, в които има клиенти и отдели на фирмата едновременно.
  143. */
  144. --1
  145. SELECT COUNTRY_ID FROM CUSTOMERS
  146. INTERSECT
  147. SELECT COUNTRY_ID FROM DEPARTMENTS
  148.  
  149. --2
  150. SELECT DISTINCT COUNTRY_ID
  151. FROM CUSTOMERS
  152. WHERE COUNTRY_ID IN (SELECT COUNTRY_ID FROM DEPARTMENTS)
  153.  
  154. --3
  155. SELECT DISTINCT COUNTRY_ID
  156. FROM CUSTOMERS
  157. WHERE COUNTRY_ID = ANY (SELECT COUNTRY_ID FROM DEPARTMENTS)
  158.  
  159. --4
  160. SELECT DISTINCT COUNTRY_ID
  161. FROM CUSTOMERS
  162. WHERE EXISTS (SELECT * FROM DEPARTMENTS
  163.               WHERE DEPARTMENTS.COUNTRY_ID = CUSTOMERS.COUNTRY_ID)
  164.  
  165. --Задача 4-6.
  166. --  Да се изведат общите собствени имена на клиенти и служители.
  167. SELECT FNAME FROM CUSTOMERS
  168. INTERSECT
  169. SELECT FNAME FROM EMPLOYEES
  170.  
  171. ----------------------------------EXCEPT---------------------------------------------------
  172. /*връща редовете, върнати от първата заявка, които не се срещат измежду редове от втората.
  173. условия:
  174.     -Броят на колоните във двете заявки трябва да бъде еднакъв;
  175.     -Колоните трябва да бъдат от съвместими типове от данни. */
  176.  
  177. --Пример 4-8.
  178. --  Изведи id на държавите, в които има клиенти и в същото време няма отдели на фирмата.
  179. --1
  180. SELECT COUNTRY_ID FROM CUSTOMERS
  181. EXCEPT
  182. SELECT COUNTRY_ID FROM DEPARTMENTS
  183.  
  184. --2
  185. SELECT DISTINCT COUNTRY_ID
  186. FROM CUSTOMERS
  187. WHERE COUNTRY_ID NOT IN (SELECT COUNTRY_ID FROM DEPARTMENTS)
  188.  
  189. --3
  190. SELECT DISTINCT COUNTRY_ID
  191. FROM CUSTOMERS
  192. WHERE COUNTRY_ID <> ALL (SELECT COUNTRY_ID FROM DEPARTMENTS)
  193.  
  194. --4
  195. SELECT DISTINCT COUNTRY_ID
  196. FROM CUSTOMERS
  197. WHERE NOT EXISTS (SELECT * FROM DEPARTMENTS
  198.                    WHERE DEPARTMENTS.COUNTRY_ID = CUSTOMERS.COUNTRY_ID)
  199.  
  200. /*4.5.1. Задачи
  201. Задача 4-7.
  202.     Да се изведат собствени имена на клиенти, които не се срещат сред тези на служители.*/
  203.  
  204.     SELECT FNAME FROM EMPLOYEES
  205.     WHERE FNAME ='Александър'
  206.  
  207.     SELECT FNAME FROM CUSTOMERS
  208.     WHERE FNAME LIKE '%Александър'
  209.  
  210.     SELECT TRIM(FNAME) FROM CUSTOMERS
  211.     EXCEPT
  212.     SELECT TRIM(FNAME) FROM EMPLOYEES
  213.  
  214.  
  215. -------------------------------------------------------------------------------------------
  216. ------------------------------------ JOIN -------------------------------------------------
  217. --JOIN се използва за извличане на данни от две или повече таблици, като редовете им се
  218. --комбинират чрез логическа връзка между таблиците, която може да бъде във FROM или WHERE.
  219. --Обикновено тази връзка е първичен/външен ключ, но не задължително.
  220.  
  221.     -------------------------------------
  222.         --join types:
  223.     -------------------------------------
  224.         --1. INNER JOIN
  225.         --2. OUTER JOIN
  226.                         --2.1 RIGHT
  227.                         --2.2 LEFT
  228.                         --2.3 FULL
  229.         --3. CROSS JOIN
  230.     -------------------------------------
  231.  
  232.  
  233. -------------------------------------INNER JOIN или просто JOIN-----------------------------
  234. --Извеждат редовете от две/повече таблици, които имат съвпадащи стойности в колоните,
  235. --посочени в условието за сравнение.
  236.  
  237.         -------------------------------------
  238.         --INNER JOIN ONLY: [SYNTAX 2 TYPES]
  239.         -------------------------------------
  240.         --- [1.]  T1 ,    T2  WHERE  _____
  241.         --- [2.]  T1 JOIN T2  ON     _____
  242.  
  243.  
  244. --Пример 4-10.
  245. --  Да се изведат държавите и регионите, в които се намират.
  246. SELECT * FROM COUNTRIES              --29 ROWS
  247. SELECT * FROM REGIONS                --6 ROWS
  248.  
  249.  
  250. --- T1 JOIN T2  ON  _____
  251. SELECT *                             ---27 ROWS
  252. FROM COUNTRIES JOIN REGIONS
  253. ON COUNTRIES.REGION_ID = REGIONS.REGION_ID
  254. --WHERE REGIONS.NAME = 'Северен полюс'
  255.  
  256.  
  257. --- T1 ,    T2  WHERE  _____
  258. SELECT *
  259. FROM COUNTRIES C , REGIONS R
  260. WHERE C.REGION_ID = R.REGION_ID
  261.  
  262.  
  263.  
  264.  
  265. --Пример 4-11.
  266. --  Изведи имена на клиенти, имена на държавите от които са и имена на регионите на държавите.
  267.  
  268. --- T1 JOIN T2  ON  _____
  269. ---    JOIN T3  ON  _____
  270.  
  271.  
  272. --С ЦЕЛИТЕ ИМЕНА НА ТАБЛИЦИ:
  273. SELECT CUSTOMERS.FNAME +' '+ CUSTOMERS.LNAME AS клиент,
  274.        COUNTRIES.NAME                        AS [име на държава],
  275.        REGIONS.NAME                          AS [име на регион]
  276.   FROM CUSTOMERS JOIN  COUNTRIES ON CUSTOMERS.COUNTRY_ID = COUNTRIES.COUNTRY_ID
  277.                  JOIN REGIONS    ON COUNTRIES.REGION_ID = REGIONS.REGION_ID
  278.  
  279.  
  280. --С ЛОКАЛНИ ЗА ЗАЯКАТА ИМЕНА НА ТАБЛИЦИ
  281. SELECT CU.FNAME +' '+ CU.LNAME AS клиент,
  282.        CO.NAME                 AS [име на държава],
  283.        R.NAME                  AS  [име на регион]
  284.   FROM CUSTOMERS CU JOIN  COUNTRIES CO ON CU.COUNTRY_ID = CO.COUNTRY_ID
  285.                     JOIN  REGIONS R    ON CO.REGION_ID = R.REGION_ID
  286.  
  287.  
  288.  
  289. --- T1 ,  T2, T3  WHERE _____ AND _____
  290. SELECT CU.FNAME +' '+ CU.LNAME AS клиент,
  291.        CO.NAME AS [име на държава],
  292.        R.NAME AS  [име на регион]
  293.   FROM CUSTOMERS CU ,  COUNTRIES CO, REGIONS R
  294.  WHERE CU.COUNTRY_ID = CO.COUNTRY_ID AND  CO.REGION_ID = R.REGION_ID
  295.  
  296.  
  297.  
  298. --------------------------------Homework----------------------------------------------------
  299. --Изведи идентификаторите на всички продукти, които не са поръчвани по поне 2 начина
  300. --P.S. без да използваш OUTER JOIN
Advertisement
Advertisement
Advertisement
RAW Paste Data Copied
Advertisement