Advertisement
S_Madanska

week7-10.11

Nov 10th, 2022
1,348
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 10.06 KB | None | 0 0
  1. -----------------------------------------------------------------------------------------
  2. ---------------------------------4.7.2. OFFSET и FETCH ----------------------------------
  3. -----------------------------------------------------------------------------------------
  4.     -- Пример 4-21.
  5.     -- Петимата служители, започвайки от 10-ти ред, подредени по дата на постъпване.
  6.     SELECT *
  7.     FROM EMPLOYEES
  8.     ORDER BY HIRE_DATE
  9.     OFFSET 9 ROWS
  10.     FETCH NEXT 5 ROWS ONLY
  11.  
  12.     -- Задача 4-12.
  13.     -- вторите 10 най-добре платени служители (подредени по заплата низходящо).
  14.     SELECT *
  15.     FROM EMPLOYEES
  16.     ORDER BY SALARY DESC
  17.     OFFSET 10 ROWS
  18.     FETCH NEXT 10 ROWS ONLY
  19.  
  20.     --#0
  21.     --В кой град се намира отделът, чийто служители получават най-голяма средна работна заплата.
  22.     SELECT TOP 1 D.CITY, E.DEPARTMENT_ID , AVG(SALARY)
  23.     FROM DEPARTMENTS D JOIN EMPLOYEES E
  24.     ON D.DEPARTMENT_ID = E.DEPARTMENT_ID
  25.     GROUP BY D.CITY, E.DEPARTMENT_ID
  26.     ORDER BY 3 DESC
  27.  
  28.     SELECT D.CITY, E.DEPARTMENT_ID , AVG(SALARY)
  29.     FROM DEPARTMENTS D JOIN EMPLOYEES E
  30.     ON D.DEPARTMENT_ID = E.DEPARTMENT_ID
  31.     GROUP BY D.CITY, E.DEPARTMENT_ID
  32.     ORDER BY 3 DESC
  33.     OFFSET 0 ROW
  34.     FETCH NEXT 1 ROW ONLY
  35.  
  36. -----------------------------------------------------------------------------------------
  37. --------------------------------Изгледи = Views------------------------------------------
  38. -----------------------------Създаване на изгледи----------------------------------------
  39. -----------------------------Промяна на изгледи------------------------------------------
  40.  
  41.     --Пример 5-1.
  42.     --Да се създаде изглед, който съдържа име и фамилия на клиентите, както и
  43.     --номер и дата на поръчките, които те са направили.
  44.     CREATE VIEW CUSTOMER_ORDER_DATE
  45.     AS
  46.     SELECT  FNAME, LNAME, ORDER_ID, ORDER_DATE
  47.     FROM CUSTOMERS C JOIN ORDERS O
  48.     ON C.CUSTOMER_ID = O.CUSTOMER_ID
  49.  
  50.      SELECT * FROM CUSTOMER_ORDER_DATE
  51.  
  52.     --Пример 5-2.
  53.     --Да се модифицира горният изглед така, че да съдържа и колона с името на
  54.     --съответния служител, обработил поръчката.
  55.     ALTER VIEW CUSTOMER_ORDER_DATE
  56.     AS
  57.     SELECT  C.FNAME + ' '+ C.LNAME AS CUSTOMER,
  58.             E.FNAME + ' ' + E.LNAME AS EMPLOYEE,
  59.              ORDER_ID, ORDER_DATE
  60.     FROM CUSTOMERS C JOIN ORDERS O ON C.CUSTOMER_ID = O.CUSTOMER_ID
  61.                      JOIN EMPLOYEES E ON E.EMPLOYEE_ID = O.EMPLOYEE_ID
  62.  
  63.     --Пример 5-3
  64.     --Да се модифицира горния изглед така, че да съдържа само поръчките,
  65.     --обработени от служител с идентификатор = 167.
  66.     ALTER VIEW CUSTOMER_ORDER_DATE
  67.     AS
  68.     SELECT  C.FNAME + ' '+ C.LNAME AS CUSTOMER,
  69.             E.FNAME + ' ' + E.LNAME AS EMPLOYEE,
  70.              ORDER_ID, ORDER_DATE
  71.     FROM CUSTOMERS C JOIN ORDERS O ON C.CUSTOMER_ID = O.CUSTOMER_ID
  72.                      JOIN EMPLOYEES E ON E.EMPLOYEE_ID = O.EMPLOYEE_ID
  73.     WHERE E.EMPLOYEE_ID = 167
  74.     ORDER BY ORDER_ID
  75.     OFFSET 0 ROWS
  76.  
  77.     SELECT *
  78.     FROM CUSTOMER_ORDER_DATE
  79.     ORDER BY ORDER_ID DESC
  80.  
  81.     --Пример 5-4.
  82.     --Да се създаде изглед, съдържащ име и фамилия на служител и общата сума на
  83.     --поръчките, които той е обработил.
  84.     CREATE VIEW TOTAL_SUM_EMPL
  85.     AS
  86.     SELECT E.FNAME, E.LNAME, SUM(UNIT_PRICE*QUANTITY) TOTAL
  87.     FROM EMPLOYEES E JOIN ORDERS O ON O.EMPLOYEE_ID = E.EMPLOYEE_ID
  88.                       JOIN ORDER_ITEMS OI ON OI.ORDER_ID = O.ORDER_ID
  89.     GROUP BY E.FNAME, E.LNAME, E.EMPLOYEE_ID
  90.  
  91.     SELECT *
  92.     FROM TOTAL_SUM_EMPL
  93.     --WHERE LNAME = 'ИВАНОВ'
  94.     ORDER BY TOTAL ASC
  95.  
  96.     --Пример 5-5.
  97.     --Да се създаде изглед, който съдържа имена, отдел и заплата на 5-мата
  98.     --служители с най-висока заплата.
  99.     CREATE VIEW TOP5_SALARIES
  100.     AS
  101.     SELECT TOP 5 FNAME, LNAME, DEPARTMENT_ID, SALARY
  102.     FROM EMPLOYEES
  103.     ORDER BY SALARY DESC
  104.  
  105.     --CREATE VIEW TOP5_SALARIES
  106.     --AS
  107.     --SELECT FNAME, LNAME, DEPARTMENT_ID, SALARY
  108.     --FROM EMPLOYEES
  109.     --ORDER BY SALARY DESC
  110.     --OFFSET 0 ROWS
  111.     --FETCH NEXT 5 ROWS ONLY
  112.  
  113.     SELECT * FROM TOP5_SALARIES
  114.  
  115.     ------------------------------------------------------------------------------------------
  116.     --#1
  117.     --Да се създаде изглед, съдържащ имената на служителите и имената на
  118.     --техните преки началници,
  119.     --нека в резултата участват и служителите, които нямат преки началници.
  120.     CREATE VIEW EMP_BOSS
  121.     AS
  122.     SELECT E.FNAME + ' ' + E.LNAME AS EMPLOYEE_NAME,
  123.            M.FNAME + ' ' + M.LNAME AS BOSS,
  124.            M.MANAGER_ID
  125.     FROM EMPLOYEES E LEFT JOIN EMPLOYEES M
  126.     ON E.MANAGER_ID = M.EMPLOYEE_ID
  127.     ORDER BY 2
  128.     OFFSET 0 ROWS
  129.  
  130.     SELECT * FROM EMP_BOSS
  131.        
  132.     --#2
  133.     --Да се създаде изглед, съдържащ информация за отделите, в които не работят
  134.     --никакви служители.
  135.     CREATE VIEW NULL_EMPL_DEPT
  136.     AS
  137.     SELECT D.* , E.EMPLOYEE_ID
  138.     FROM DEPARTMENTS D LEFT JOIN EMPLOYEES E
  139.     ON D.DEPARTMENT_ID = E.DEPARTMENT_ID
  140.     WHERE E.EMPLOYEE_ID IS NULL
  141.  
  142.     SELECT * FROM NULL_EMPL_DEPT
  143.  
  144.     --#3
  145.     --Създайте изглед с име, фамилия, телефон и име на длъжност на служителите,
  146.     --които работят в отдел 100.
  147.     CREATE VIEW DEPT_100_EMPL
  148.     AS
  149.     SELECT E.FNAME, E.LNAME, PHONE, J.JOB_TITLE, E.DEPARTMENT_ID
  150.     FROM EMPLOYEES E  JOIN JOBS J
  151.     ON  E.JOB_ID = J.JOB_ID
  152.     WHERE E.DEPARTMENT_ID = 100
  153.  
  154.     SELECT * FROM DEPT_100_EMPL
  155.  
  156.     --#4
  157.     --Модифицирайте горния изглед като конкатенирате в една колона
  158.     --име и фамилия на служител,
  159.     --и добавите колони заплата на служителя и идентификатора
  160.     --на неговия пряк ръководител (мениджър).
  161.     ALTER VIEW DEPT_100_EMPL
  162.     AS
  163.     SELECT E.FNAME + ' ' + E.LNAME AS EMPLOYEE,
  164.            PHONE,
  165.            SALARY,
  166.            J.JOB_TITLE,
  167.            E.DEPARTMENT_ID,
  168.            E.MANAGER_ID
  169.     FROM EMPLOYEES E  JOIN JOBS J
  170.     ON  E.JOB_ID = J.JOB_ID
  171.     WHERE E.DEPARTMENT_ID = 100
  172.  
  173.     SELECT * FROM DEPT_100_EMPL
  174.  
  175.     --#5
  176.     --Създайте изглед върху изгледа от предходната задача като
  177.     --в резултатния набор включите само колони:
  178.     --имена на служител и идентификатор на мениджър.
  179.    
  180.     CREATE VIEW VIEW_FROM_VIEW
  181.     AS
  182.     SELECT EMPLOYEE, MANAGER_ID
  183.     FROM DEPT_100_EMPL
  184.  
  185.     SELECT * FROM VIEW_FROM_VIEW
  186.  
  187.     --#6
  188.     --Да се създаде изглед, който съдържа десетимата клиенти с най-голям брой
  189.     --поръчки. Ако последният клиент има равен брой поръчки с други клиенти,
  190.     --те също да участват в изгледа.
  191.     CREATE VIEW TOP10_BY_ORDERS
  192.     AS
  193.     SELECT TOP 10 WITH TIES C.FNAME, C.LNAME , COUNT(O.ORDER_ID) COUNT_ORDERS
  194.     FROM CUSTOMERS C JOIN ORDERS O
  195.     ON O.CUSTOMER_ID = C.CUSTOMER_ID
  196.     GROUP BY C.FNAME, C.LNAME, C.CUSTOMER_ID
  197.     ORDER BY COUNT_ORDERS DESC
  198.  
  199.     SELECT * FROM TOP10_BY_ORDERS
  200.  
  201.     --#7
  202.     --Да се създаде изглед с имената на държавите с повече от 5 клиента от тях.
  203.     CREATE VIEW CUSTOMERS_BY_COUNTRY_MORE_5
  204.     AS
  205.     SELECT CO.NAME, COUNT(CUSTOMER_ID) CUSTOMER_COUNT
  206.     FROM COUNTRIES CO JOIN CUSTOMERS CU
  207.     ON CO.COUNTRY_ID = CU.COUNTRY_ID
  208.     GROUP BY  CO.NAME
  209.     HAVING COUNT(CUSTOMER_ID) > 5
  210.  
  211.     SELECT * FROM CUSTOMERS_BY_COUNTRY_MORE_5
  212.  
  213.  ------------------------------------------------------------------------------------------
  214.  
  215.     --Задача 5-1.
  216.     --Да се създаде изглед, който съдържа имената на продуктите и общо поръчано
  217.     --количество от продукт. Сортирайте спрямо количество низходящо.
  218.     CREATE VIEW TOTAL_QUANTITY_PRODUCTS
  219.     AS
  220.     SELECT P.NAME, SUM(QUANTITY) TOTAL_QUANTITY
  221.     FROM PRODUCTS  P JOIN ORDER_ITEMS OI
  222.     ON P.PRODUCT_ID = OI.PRODUCT_ID
  223.     GROUP BY P.NAME, P.PRODUCT_ID
  224.     ORDER BY  TOTAL_QUANTITY DESC
  225.     OFFSET 0 ROWS
  226.  
  227.     SELECT * FROM TOTAL_QUANTITY_PRODUCTS
  228.  
  229.     --------------------------------------------------------------------------
  230.     ------------------5.4.Манипулиране на данни чрез изглед ------------------
  231.     --------------------------------------------------------------------------
  232.     --Пример 5-6.1
  233.     --Създай изглед базиран на JOIN между таблиците COUNTRIES и CUSTOMERS
  234.      CREATE VIEW EXAMPLE
  235.      AS
  236.      SELECT CO.NAME,
  237.             CO.COUNTRY_ID AS CO_COUNTRY,
  238.             CU.COUNTRY_ID  AS CU_COUNTRY,
  239.             CU.CUSTOMER_ID,
  240.             CU.FNAME,
  241.             CU.LNAME,
  242.             CU.GENDER,
  243.             CU.EMAIL
  244.      FROM CUSTOMERS CU JOIN COUNTRIES CO
  245.      ON CO.COUNTRY_ID = CU.COUNTRY_ID
  246.  
  247.      SELECT * FROM EXAMPLE
  248.  
  249.     --Пример 5-6.2
  250.     --Да се добави нов запис в таблицата CUSTOMERS през изгледа от Пр. 5-6.1.
  251.     INSERT INTO EXAMPLE (CUSTOMER_ID, FNAME, LNAME, GENDER, EMAIL, CU_COUNTRY)
  252.     VALUES (10, 'Лорен', 'Гарнър', 'F', 'loreng@icloud.com', 'IT')
  253.  
  254.     SELECT * FROM EXAMPLE
  255.     SELECT * FROM CUSTOMERS
  256.  
  257.     ---Пример 5-7.
  258.     -- Да се промени фамилията на клиент с идентификатор 10.
  259.     UPDATE EXAMPLE
  260.     SET LNAME = LNAME + '-Пауъл'
  261.     WHERE CUSTOMER_ID = 10
  262.    
  263.     SELECT * FROM EXAMPLE
  264.     SELECT * FROM CUSTOMERS
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement