🗊Презентация Иерархия в SQL. Способы представления иерархических данных

Категория: Информатика
Нажмите для полного просмотра!
Иерархия в SQL. Способы представления иерархических данных, слайд №1Иерархия в SQL. Способы представления иерархических данных, слайд №2Иерархия в SQL. Способы представления иерархических данных, слайд №3Иерархия в SQL. Способы представления иерархических данных, слайд №4Иерархия в SQL. Способы представления иерархических данных, слайд №5Иерархия в SQL. Способы представления иерархических данных, слайд №6Иерархия в SQL. Способы представления иерархических данных, слайд №7Иерархия в SQL. Способы представления иерархических данных, слайд №8Иерархия в SQL. Способы представления иерархических данных, слайд №9Иерархия в SQL. Способы представления иерархических данных, слайд №10Иерархия в SQL. Способы представления иерархических данных, слайд №11Иерархия в SQL. Способы представления иерархических данных, слайд №12Иерархия в SQL. Способы представления иерархических данных, слайд №13Иерархия в SQL. Способы представления иерархических данных, слайд №14Иерархия в SQL. Способы представления иерархических данных, слайд №15Иерархия в SQL. Способы представления иерархических данных, слайд №16Иерархия в SQL. Способы представления иерархических данных, слайд №17Иерархия в SQL. Способы представления иерархических данных, слайд №18Иерархия в SQL. Способы представления иерархических данных, слайд №19Иерархия в SQL. Способы представления иерархических данных, слайд №20Иерархия в SQL. Способы представления иерархических данных, слайд №21Иерархия в SQL. Способы представления иерархических данных, слайд №22Иерархия в SQL. Способы представления иерархических данных, слайд №23Иерархия в SQL. Способы представления иерархических данных, слайд №24Иерархия в SQL. Способы представления иерархических данных, слайд №25Иерархия в SQL. Способы представления иерархических данных, слайд №26Иерархия в SQL. Способы представления иерархических данных, слайд №27Иерархия в SQL. Способы представления иерархических данных, слайд №28Иерархия в SQL. Способы представления иерархических данных, слайд №29Иерархия в SQL. Способы представления иерархических данных, слайд №30Иерархия в SQL. Способы представления иерархических данных, слайд №31Иерархия в SQL. Способы представления иерархических данных, слайд №32Иерархия в SQL. Способы представления иерархических данных, слайд №33Иерархия в SQL. Способы представления иерархических данных, слайд №34Иерархия в SQL. Способы представления иерархических данных, слайд №35Иерархия в SQL. Способы представления иерархических данных, слайд №36Иерархия в SQL. Способы представления иерархических данных, слайд №37Иерархия в SQL. Способы представления иерархических данных, слайд №38Иерархия в SQL. Способы представления иерархических данных, слайд №39Иерархия в SQL. Способы представления иерархических данных, слайд №40Иерархия в SQL. Способы представления иерархических данных, слайд №41Иерархия в SQL. Способы представления иерархических данных, слайд №42Иерархия в SQL. Способы представления иерархических данных, слайд №43Иерархия в SQL. Способы представления иерархических данных, слайд №44Иерархия в SQL. Способы представления иерархических данных, слайд №45Иерархия в SQL. Способы представления иерархических данных, слайд №46Иерархия в SQL. Способы представления иерархических данных, слайд №47Иерархия в SQL. Способы представления иерархических данных, слайд №48Иерархия в SQL. Способы представления иерархических данных, слайд №49Иерархия в SQL. Способы представления иерархических данных, слайд №50Иерархия в SQL. Способы представления иерархических данных, слайд №51Иерархия в SQL. Способы представления иерархических данных, слайд №52Иерархия в SQL. Способы представления иерархических данных, слайд №53Иерархия в SQL. Способы представления иерархических данных, слайд №54Иерархия в SQL. Способы представления иерархических данных, слайд №55Иерархия в SQL. Способы представления иерархических данных, слайд №56

Содержание

Вы можете ознакомиться и скачать презентацию на тему Иерархия в SQL. Способы представления иерархических данных. Доклад-сообщение содержит 56 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Иерархия в SQL
Описание слайда:
Иерархия в SQL

Слайд 2





Способы представления иерархических данных
родители-потомки
 тип hierarchyid
XML
Описание слайда:
Способы представления иерархических данных родители-потомки  тип hierarchyid XML

Слайд 3





Родители-потомки
CREATE TABLE Parent_Child (
	Id INT PRIMARY KEY,
	Par_id INT REFERENCES Parent_Child(Id),
	Name Char(20),
	…
	)
Описание слайда:
Родители-потомки CREATE TABLE Parent_Child ( Id INT PRIMARY KEY, Par_id INT REFERENCES Parent_Child(Id), Name Char(20), … )

Слайд 4





Найти каждому его руководителя
SELECT * 
FROM Parent_Child C JOIN Parent_Child P
ON C. Par_id = P.Id
Описание слайда:
Найти каждому его руководителя SELECT * FROM Parent_Child C JOIN Parent_Child P ON C. Par_id = P.Id

Слайд 5





Как найти всех подчиненных?
Описание слайда:
Как найти всех подчиненных?

Слайд 6





Обобщенные табличные выражения (CTE)

Обобщенные табличные выражения (CTE) можно представить себе как временные результирующие наборы, определенные в области выполнения единичных инструкций SELECT, INSERT, UPDATE, DELETE или CREATE VIEW. 
CTE не сохраняются в базе данных в виде объектов, время их жизни ограничено продолжительностью запроса. 
CTE могут ссылаться сами на себя, а на них один и тот же запрос может ссылаться несколько раз.
Описание слайда:
Обобщенные табличные выражения (CTE) Обобщенные табличные выражения (CTE) можно представить себе как временные результирующие наборы, определенные в области выполнения единичных инструкций SELECT, INSERT, UPDATE, DELETE или CREATE VIEW. CTE не сохраняются в базе данных в виде объектов, время их жизни ограничено продолжительностью запроса. CTE могут ссылаться сами на себя, а на них один и тот же запрос может ссылаться несколько раз.

Слайд 7





Структура CTE
WITH expression_name  ( column_name [,...n] ) 
AS
( CTE_query_definition )
Инструкция для обращения к ОТВ:
SELECT <column_list>
FROM expression_name;
Описание слайда:
Структура CTE WITH expression_name ( column_name [,...n] ) AS ( CTE_query_definition ) Инструкция для обращения к ОТВ: SELECT <column_list> FROM expression_name;

Слайд 8





CTE предназначены для:
Создания рекурсивных запросов. 
Группирования по столбцу, производного от скалярного подзапроса выборки 
Многократных ссылок на результирующую таблицу из одной и той же инструкции.
Описание слайда:
CTE предназначены для: Создания рекурсивных запросов. Группирования по столбцу, производного от скалярного подзапроса выборки Многократных ссылок на результирующую таблицу из одной и той же инструкции.

Слайд 9





Рекурсивное выполнение имеет следующую семантику:
разбиение CTE на закрепленный и рекурсивный элементы;
запуск закрепленных элементов с созданием первого вызова или базового результирующего набора (T0);
запуск рекурсивных элементов, где Ti — это вход, а Ti+1 — это выход;
повторение шага 3 до тех пор, пока не вернется пустой набор;
возвращение результирующего набора. Результирующий набор получается с помощью инструкции UNION ALL от T0 до Tn.
Описание слайда:
Рекурсивное выполнение имеет следующую семантику: разбиение CTE на закрепленный и рекурсивный элементы; запуск закрепленных элементов с созданием первого вызова или базового результирующего набора (T0); запуск рекурсивных элементов, где Ti — это вход, а Ti+1 — это выход; повторение шага 3 до тех пор, пока не вернется пустой набор; возвращение результирующего набора. Результирующий набор получается с помощью инструкции UNION ALL от T0 до Tn.

Слайд 10





Структура CTE
WITH expression_name  ( column_name [,...n] ) 
AS
( CTE_query_definition )
Инструкция для обращения к ОТВ:
SELECT <column_list>
FROM expression_name;
Описание слайда:
Структура CTE WITH expression_name ( column_name [,...n] ) AS ( CTE_query_definition ) Инструкция для обращения к ОТВ: SELECT <column_list> FROM expression_name;

Слайд 11





Create Employees table
CREATE TABLE Employees
(
    empid   int         NOT NULL
    ,mgrid   int         NULL
    ,empname varchar(25) NOT NULL
    ,salary  money       NOT NULL
    CONSTRAINT PK_Employees PRIMARY KEY(empid)
);
Описание слайда:
Create Employees table CREATE TABLE Employees ( empid int NOT NULL ,mgrid int NULL ,empname varchar(25) NOT NULL ,salary money NOT NULL CONSTRAINT PK_Employees PRIMARY KEY(empid) );

Слайд 12





Employees table - insert values
INSERT INTO Employees VALUES(1 , NULL, 'Nancy'   , $10000.00);
INSERT INTO Employees VALUES(2 , 1   , 'Andrew'  , $5000.00);
INSERT INTO Employees VALUES(3 , 1   , 'Janet'   , $5000.00);
INSERT INTO Employees VALUES(4 , 1   , 'Margaret', $5000.00);
INSERT INTO Employees VALUES(5 , 2   , 'Steven'  , $2500.00);
INSERT INTO Employees VALUES(6 , 2   , 'Michael' , $2500.00);
INSERT INTO Employees VALUES(7 , 3   , 'Robert'  , $2500.00);
INSERT INTO Employees VALUES(8 , 3   , 'Laura'   , $2500.00);
INSERT INTO Employees VALUES(9 , 3   , 'Ann'     , $2500.00);
INSERT INTO Employees VALUES(10, 4   , 'Ina'     , $2500.00);
INSERT INTO Employees VALUES(11, 7   , 'David'   , $2000.00);
INSERT INTO Employees VALUES(12, 7   , 'Ron'     , $2000.00);
INSERT INTO Employees VALUES(13, 7   , 'Dan'     , $2000.00);
INSERT INTO Employees VALUES(14, 11  , 'James'   , $1500.00);
Описание слайда:
Employees table - insert values INSERT INTO Employees VALUES(1 , NULL, 'Nancy' , $10000.00); INSERT INTO Employees VALUES(2 , 1 , 'Andrew' , $5000.00); INSERT INTO Employees VALUES(3 , 1 , 'Janet' , $5000.00); INSERT INTO Employees VALUES(4 , 1 , 'Margaret', $5000.00); INSERT INTO Employees VALUES(5 , 2 , 'Steven' , $2500.00); INSERT INTO Employees VALUES(6 , 2 , 'Michael' , $2500.00); INSERT INTO Employees VALUES(7 , 3 , 'Robert' , $2500.00); INSERT INTO Employees VALUES(8 , 3 , 'Laura' , $2500.00); INSERT INTO Employees VALUES(9 , 3 , 'Ann' , $2500.00); INSERT INTO Employees VALUES(10, 4 , 'Ina' , $2500.00); INSERT INTO Employees VALUES(11, 7 , 'David' , $2000.00); INSERT INTO Employees VALUES(12, 7 , 'Ron' , $2000.00); INSERT INTO Employees VALUES(13, 7 , 'Dan' , $2000.00); INSERT INTO Employees VALUES(14, 11 , 'James' , $1500.00);

Слайд 13





Employees
Описание слайда:
Employees

Слайд 14





Все дерево от корня
WITH tree1 (manager, employe, employe_name, emp_salary, emp_level)
AS 
(SELECT mgrid, empid, empname, salary, 0 FROM Employees
WHERE mgrid IS NULL				/* закрепленный элемент
UNION ALL
SELECT mgrid, empid, empname, salary, emp_level+1 FROM Employees 
JOIN tree1 ON mgrid= employe			/* рекурсивный элемент
)
SELECT * from tree1
ORDER BY manager;
Описание слайда:
Все дерево от корня WITH tree1 (manager, employe, employe_name, emp_salary, emp_level) AS (SELECT mgrid, empid, empname, salary, 0 FROM Employees WHERE mgrid IS NULL /* закрепленный элемент UNION ALL SELECT mgrid, empid, empname, salary, emp_level+1 FROM Employees JOIN tree1 ON mgrid= employe /* рекурсивный элемент ) SELECT * from tree1 ORDER BY manager;

Слайд 15





Задание 1 – добавить в выборку имя менеджера
Описание слайда:
Задание 1 – добавить в выборку имя менеджера

Слайд 16






Задание 2
Написать функцию, возвращающую таблицу всех подчиненных сотрудников с параметром Id менеджера.
Задание 3
Написать функцию, возвращающую сумму зарплаты всех подчиненных сотрудников с параметром Id менеджера.
Описание слайда:
Задание 2 Написать функцию, возвращающую таблицу всех подчиненных сотрудников с параметром Id менеджера. Задание 3 Написать функцию, возвращающую сумму зарплаты всех подчиненных сотрудников с параметром Id менеджера.

Слайд 17





Функция, возвращающая таблицу
CREATE FUNCTION dbo.fn_getsubtree(@empid AS INT) 
    RETURNS @TREE TABLE (
    empid   INT NOT NULL
    ,empname VARCHAR(25) NOT NULL
    ,mgrid   INT NULL
    ,lvl     INT NOT NULL
)
AS
BEGIN
…
  INSERT INTO @TREE
    SELECT * FROM Employees_Subtree;
  RETURN
END
Описание слайда:
Функция, возвращающая таблицу CREATE FUNCTION dbo.fn_getsubtree(@empid AS INT) RETURNS @TREE TABLE ( empid INT NOT NULL ,empname VARCHAR(25) NOT NULL ,mgrid INT NULL ,lvl INT NOT NULL ) AS BEGIN … INSERT INTO @TREE SELECT * FROM Employees_Subtree; RETURN END

Слайд 18





Departments
Описание слайда:
Departments

Слайд 19





Create Departments table and insert values
CREATE TABLE Departments
(
    deptid    INT NOT NULL PRIMARY KEY
    ,deptname  VARCHAR(25) NOT NULL
    ,deptmgrid INT NULL REFERENCES Employees
);
GO
INSERT INTO Departments VALUES(1, 'HR',           2);
INSERT INTO Departments VALUES(2, 'Marketing',    7);
INSERT INTO Departments VALUES(3, 'Finance',      8);
INSERT INTO Departments VALUES(4, 'R&D',          9);
INSERT INTO Departments VALUES(5, 'Training',     4);
INSERT INTO Departments VALUES(6, 'Gardening', NULL);
Описание слайда:
Create Departments table and insert values CREATE TABLE Departments ( deptid INT NOT NULL PRIMARY KEY ,deptname VARCHAR(25) NOT NULL ,deptmgrid INT NULL REFERENCES Employees ); GO INSERT INTO Departments VALUES(1, 'HR', 2); INSERT INTO Departments VALUES(2, 'Marketing', 7); INSERT INTO Departments VALUES(3, 'Finance', 8); INSERT INTO Departments VALUES(4, 'R&D', 9); INSERT INTO Departments VALUES(5, 'Training', 4); INSERT INTO Departments VALUES(6, 'Gardening', NULL);

Слайд 20





Оператор APPLY
позволяет вызывать возвращающую табличное значение функцию для каждой строки, возвращаемой внешним табличным выражением запроса. 
SELECT Tl.*, Tr.*
FROM Table AS Tl
    CROSS APPLY function(Tl.field1) AS Tr;
Описание слайда:
Оператор APPLY позволяет вызывать возвращающую табличное значение функцию для каждой строки, возвращаемой внешним табличным выражением запроса. SELECT Tl.*, Tr.* FROM Table AS Tl CROSS APPLY function(Tl.field1) AS Tr;

Слайд 21





Типы оператора APPLY
CROSS APPLY возвращает только строки из внешней таблицы, которые создает результирующий набор из возвращающего табличное значение функции. 
OUTER APPLY возвращает и строки, которые формируют результирующий набор, и строки, которые этого не делают, со значениями NULL в столбцах, созданных возвращающей табличное значение функцией.
Описание слайда:
Типы оператора APPLY CROSS APPLY возвращает только строки из внешней таблицы, которые создает результирующий набор из возвращающего табличное значение функции. OUTER APPLY возвращает и строки, которые формируют результирующий набор, и строки, которые этого не делают, со значениями NULL в столбцах, созданных возвращающей табличное значение функцией.

Слайд 22





Задание 4.
Вывести названия отделов и всех работников этих отделов
Описание слайда:
Задание 4. Вывести названия отделов и всех работников этих отделов

Слайд 23





 hierarchyid 
Описание слайда:
 hierarchyid 

Слайд 24





Таблица Employees
с полем hierarchyid
Описание слайда:
Таблица Employees с полем hierarchyid

Слайд 25






CREATE TABLE Emp_hierarchy
(
     Id hierarchyid PRIMARY KEY 
    ,empid   int         NOT NULL
    ,empname varchar(25) NOT NULL
    ,salary  money       NOT NULL
);
Описание слайда:
CREATE TABLE Emp_hierarchy ( Id hierarchyid PRIMARY KEY ,empid int NOT NULL ,empname varchar(25) NOT NULL ,salary money NOT NULL );

Слайд 26





Предложение OVER
Определяет секционирование и упорядочение набора строк до применения соответствующей оконной функции. То есть предложение OVER определяет окно или определяемый пользователем набор строк внутри результирующего набора запроса. 
OVER ( 
       [ <PARTITION BY clause> ]
       [ <ORDER BY clause> ] 
)
Описание слайда:
Предложение OVER Определяет секционирование и упорядочение набора строк до применения соответствующей оконной функции. То есть предложение OVER определяет окно или определяемый пользователем набор строк внутри результирующего набора запроса.  OVER ( [ <PARTITION BY clause> ] [ <ORDER BY clause> ] )

Слайд 27





Рассмотрим пример
 SELECT 
	id, dept, salary
  from Employees
Описание слайда:
Рассмотрим пример SELECT id, dept, salary from Employees

Слайд 28





Сумма нарастающим итогом
 SELECT 
	id, dept, salary
	, SUM(salary) OVER (ORDER BY id)  AS Running_Sum 
  from Employees
Описание слайда:
Сумма нарастающим итогом SELECT id, dept, salary , SUM(salary) OVER (ORDER BY id) AS Running_Sum from Employees

Слайд 29





Сумма с группировкой
 SELECT 
	id, dept, salary
	, SUM(salary) OVER (partition by dept)  AS Dept_Sum 
	, AVG(salary) OVER (partition by dept)  AS Dept_AVG
  from Employees
Описание слайда:
Сумма с группировкой SELECT id, dept, salary , SUM(salary) OVER (partition by dept) AS Dept_Sum , AVG(salary) OVER (partition by dept) AS Dept_AVG from Employees

Слайд 30





Сумма с группировкой
 SELECT 
	id, dept, salary
	, SUM(salary) OVER (partition by dept ORDER by id)  AS Dept_Sum 
	, AVG(salary) OVER (partition by dept)  AS Dept_AVG
  from Employees
Описание слайда:
Сумма с группировкой SELECT id, dept, salary , SUM(salary) OVER (partition by dept ORDER by id) AS Dept_Sum , AVG(salary) OVER (partition by dept) AS Dept_AVG from Employees

Слайд 31





ROW_NUMBER()
 SELECT 
  S.*, ROW_NUMBER() OVER (ORDER BY empName) AS RowNum 
FROM Employees S
Описание слайда:
ROW_NUMBER() SELECT S.*, ROW_NUMBER() OVER (ORDER BY empName) AS RowNum FROM Employees S

Слайд 32





Номер строки
 SELECT 
	id, dept, salary
	, ROW_NUMBER() OVER (ORDER BY id) AS RowNum 
  from Employees
Описание слайда:
Номер строки SELECT id, dept, salary , ROW_NUMBER() OVER (ORDER BY id) AS RowNum from Employees

Слайд 33





ROW_NUMBER() + PARTITION
 SELECT 
  S.*, ROW_NUMBER() OVER (PARTITION BY S.mgrid 
ORDER BY S.empName) AS LocalRowNum 
FROM Employees S
Описание слайда:
ROW_NUMBER() + PARTITION SELECT S.*, ROW_NUMBER() OVER (PARTITION BY S.mgrid ORDER BY S.empName) AS LocalRowNum FROM Employees S

Слайд 34





Номер строки с группировкой
 SELECT 
	id, dept, salary
	, ROW_NUMBER() OVER (PARTITION BY dept ORDER BY id) AS RowNum 
  from Employees
Описание слайда:
Номер строки с группировкой SELECT id, dept, salary , ROW_NUMBER() OVER (PARTITION BY dept ORDER BY id) AS RowNum from Employees

Слайд 35





RANK ( ) / DENSE_RANK ( )
Rank - возвращает ранг каждой строки в секции результирующего набора. Ранг строки вычисляется как единица плюс количество рангов, находящихся до этой строки.(1, 1, 1, 4)
Dense_rank - возвращает ранг строк в секции результирующего набора без промежутков в ранжировании. Ранг строки равен количеству различных значений рангов, предшествующих строке, увеличенному на единицу. (1, 1, 2)
Описание слайда:
RANK ( ) / DENSE_RANK ( ) Rank - возвращает ранг каждой строки в секции результирующего набора. Ранг строки вычисляется как единица плюс количество рангов, находящихся до этой строки.(1, 1, 1, 4) Dense_rank - возвращает ранг строк в секции результирующего набора без промежутков в ранжировании. Ранг строки равен количеству различных значений рангов, предшествующих строке, увеличенному на единицу. (1, 1, 2)

Слайд 36





RANK (  ) OVER (ORDER by smth)
Распределяет строки упорядоченной секции в заданное количество групп. 
SELECT 
  S.*
  , RANK (  ) OVER (ORDER by salary desc) AS Gr
FROM Employees S
Описание слайда:
RANK ( ) OVER (ORDER by smth) Распределяет строки упорядоченной секции в заданное количество групп.  SELECT S.* , RANK ( ) OVER (ORDER by salary desc) AS Gr FROM Employees S

Слайд 37





NTILE ( N )
Распределяет строки упорядоченной секции в заданное количество групп. 
SELECT 
  S.*
  , NTILE(3) OVER (ORDER BY S.salary) AS Gr
FROM Employees S
Описание слайда:
NTILE ( N ) Распределяет строки упорядоченной секции в заданное количество групп.  SELECT S.* , NTILE(3) OVER (ORDER BY S.salary) AS Gr FROM Employees S

Слайд 38






SELECT 
  S.*
  , ROW_NUMBER() OVER 
	(PARTITION BY S.mgrid ORDER BY S.empName) 	AS LocalRowNum 
  , RANK() OVER (ORDER BY S.salary) AS Rank 
  , COUNT(*) OVER 
	(PARTITION BY S.mgrid ) AS Amount
FROM Employees S
Описание слайда:
SELECT S.* , ROW_NUMBER() OVER (PARTITION BY S.mgrid ORDER BY S.empName) AS LocalRowNum , RANK() OVER (ORDER BY S.salary) AS Rank , COUNT(*) OVER (PARTITION BY S.mgrid ) AS Amount FROM Employees S

Слайд 39





Структура CTE
WITH expression_name  ( column_name [,...n] ) 
AS
( CTE_query_definition )
Инструкция для обращения к ОТВ:
SELECT <column_list>
FROM expression_name;
Описание слайда:
Структура CTE WITH expression_name ( column_name [,...n] ) AS ( CTE_query_definition ) Инструкция для обращения к ОТВ: SELECT <column_list> FROM expression_name;

Слайд 40





ROW_NUMBER() 
+ PARTITION
Описание слайда:
ROW_NUMBER() + PARTITION

Слайд 41





Перенос данных 
из Emloyees в Emp_hierarchy
WITH paths(path, EmployeeID) 
AS (
-- This section provides the value for the root of the hierarchy
SELECT hierarchyid::GetRoot() AS OrgNode, empid
FROM Employees AS C 
WHERE …
UNION ALL 
-- This section provides values for all nodes except the root
SELECT 
CAST(p.path.ToString() + CAST(( ROW_NUMBER() OVER (PARTITION BY mgrid ORDER BY mgrid) ) AS varchar(30)) + '/' AS hierarchyid), 
C.empid
FROM Employees AS C 
JOIN paths AS p 
   ON …
)
…
Описание слайда:
Перенос данных из Emloyees в Emp_hierarchy WITH paths(path, EmployeeID) AS ( -- This section provides the value for the root of the hierarchy SELECT hierarchyid::GetRoot() AS OrgNode, empid FROM Employees AS C WHERE … UNION ALL -- This section provides values for all nodes except the root SELECT CAST(p.path.ToString() + CAST(( ROW_NUMBER() OVER (PARTITION BY mgrid ORDER BY mgrid) ) AS varchar(30)) + '/' AS hierarchyid), C.empid FROM Employees AS C JOIN paths AS p ON … ) …

Слайд 42





Обход дерева
select s.*
from Emp_hierarchy s
Описание слайда:
Обход дерева select s.* from Emp_hierarchy s

Слайд 43





Обход дерева с путем и уровнями
select s.*, Id.ToString() AS Path,
    Id.GetLevel() AS Level 
from Emp_hierarchy s
Описание слайда:
Обход дерева с путем и уровнями select s.*, Id.ToString() AS Path, Id.GetLevel() AS Level from Emp_hierarchy s

Слайд 44


Иерархия в SQL. Способы представления иерархических данных, слайд №44
Описание слайда:

Слайд 45





Id.GetAncestor(n int)
Res Hierarchyid
/*найти детей '/2/‘ */
select * 
FROM Emp_hierarchy s
WHERE s.id.GetAncestor(1)='/2/'
/*найти внуков '/2/‘ */
select * 
FROM Emp_hierarchy s
WHERE s.id.GetAncestor(2)='/2/'
Описание слайда:
Id.GetAncestor(n int) Res Hierarchyid /*найти детей '/2/‘ */ select * FROM Emp_hierarchy s WHERE s.id.GetAncestor(1)='/2/' /*найти внуков '/2/‘ */ select * FROM Emp_hierarchy s WHERE s.id.GetAncestor(2)='/2/'

Слайд 46





parent.GetDescendant ( child1 , child2 ) 
Res Hierarchyid
Для генерации кодов дочерних узлов предназначен метод GetDescendant. У него есть два параметра, определяющих, между какими двумя узлами следует поместить новый узел (любой из параметров может быть равен null). Если это первый дочерний узел, то оба этих параметра должны быть равны null:
SET @new_node = @node.GetDescendant(@max_child_node, null);
Описание слайда:
parent.GetDescendant ( child1 , child2 ) Res Hierarchyid Для генерации кодов дочерних узлов предназначен метод GetDescendant. У него есть два параметра, определяющих, между какими двумя узлами следует поместить новый узел (любой из параметров может быть равен null). Если это первый дочерний узел, то оба этих параметра должны быть равны null: SET @new_node = @node.GetDescendant(@max_child_node, null);

Слайд 47





GetRoot
hierarchyid::GetRoot ( ) 
insert into Emp_hierarchy
(Id, empid, empname, salary)
values
(hierarchyid::GetRoot(), 1, ‘Anna-Maria', 10000)
Описание слайда:
GetRoot hierarchyid::GetRoot ( ) insert into Emp_hierarchy (Id, empid, empname, salary) values (hierarchyid::GetRoot(), 1, ‘Anna-Maria', 10000)

Слайд 48





id.GetLevel
Res smallint
Возвращает целое число, представляющее глубину этого узла в дереве.
Описание слайда:
id.GetLevel Res smallint Возвращает целое число, представляющее глубину этого узла в дереве.

Слайд 49





child. IsDescendantOf ( parent )
Res true|false
Возвращает значение true, если объект this является потомком объекта parent.
Описание слайда:
child. IsDescendantOf ( parent ) Res true|false Возвращает значение true, если объект this является потомком объекта parent.

Слайд 50





node. GetReparentedValue ( oldRoot, newRoot )
Возвращаемый тип данных SQL Server: hierarchyid
Переносит ветку дерева
UPDATE Employees
SET id = id.GetReparentedValue(@old_node, @new_node)
WHERE employee_hid.IsDescendantOf(@old_node) = 1;
Описание слайда:
node. GetReparentedValue ( oldRoot, newRoot ) Возвращаемый тип данных SQL Server: hierarchyid Переносит ветку дерева UPDATE Employees SET id = id.GetReparentedValue(@old_node, @new_node) WHERE employee_hid.IsDescendantOf(@old_node) = 1;

Слайд 51





Id.ToString()
преобразование из типа hierarchyid в строковый тип
0x5AC0    /1/1/
Описание слайда:
Id.ToString() преобразование из типа hierarchyid в строковый тип 0x5AC0 /1/1/

Слайд 52





Parse
преобразование из строкового типа тип в hierarchyid 
hierarchyid::Parse(@StringValue) 
/1/1/   0x5AC0
Описание слайда:
Parse преобразование из строкового типа тип в hierarchyid hierarchyid::Parse(@StringValue) /1/1/ 0x5AC0

Слайд 53





Обход поддерева
Выборка всех потомков
DECLARE @parent_hid HIERARCHYID;
 
SELECT @parent_hid = id 
FROM Emp_hierarchy 
 WHERE empname = ‘Laura’
 
select s.*, Id.ToString() AS [Path],
    Id.GetLevel() AS [Level] 
FROM Emp_hierarchy s
WHERE Id.IsDescendantOf(@parent_hid) = 1;
Описание слайда:
Обход поддерева Выборка всех потомков DECLARE @parent_hid HIERARCHYID; SELECT @parent_hid = id FROM Emp_hierarchy WHERE empname = ‘Laura’ select s.*, Id.ToString() AS [Path], Id.GetLevel() AS [Level] FROM Emp_hierarchy s WHERE Id.IsDescendantOf(@parent_hid) = 1;

Слайд 54





Обход дерева 
с суммой зарплаты по всей ветке
select s.*, Id.ToString() AS [Path],
    Id.GetLevel() AS [Level] , (select sum(salary) from Emp_hierarchy where Id.IsDescendantOf(S.id)=1) as Total
from Emp_hierarchy s
Описание слайда:
Обход дерева с суммой зарплаты по всей ветке select s.*, Id.ToString() AS [Path], Id.GetLevel() AS [Level] , (select sum(salary) from Emp_hierarchy where Id.IsDescendantOf(S.id)=1) as Total from Emp_hierarchy s

Слайд 55






Добавить для Robert нового подчиненного Boris между Ron и Dan
Добавить ему двух любых подчиненных  
Отправить Margaret в подчинение Janet
Описание слайда:
Добавить для Robert нового подчиненного Boris между Ron и Dan Добавить ему двух любых подчиненных Отправить Margaret в подчинение Janet

Слайд 56





DECLARE
DECLARE
    @reparented_node AS HIERARCHYID, -- Код узла, который мы хотим переподчинить со всеми его потомками
    @new_parent_node AS HIERARCHYID, -- Код узла нового родителя
    @max_child_node AS HIERARCHYID,  -- Код узла максимального потомка нового родителя
    @new_child_node AS HIERARCHYID;  -- Код узла для нового потомка нового родителя
 
-- Получаем код узла, который хотим переподчинить со всеми его потомками
SELECT @reparented_node = id
FROM Emp_hierarchy
WHERE empid = 3; -- employee_id Janet
 -- Получаем код узла нового родителя
SELECT @new_parent_node = id
FROM Emp_hierarchy 
WHERE empid = 4; -- employee_id Margaret
 -- Получаем код узла максимального потомка нового родителя
SELECT @max_child_node = MAX(id)
FROM Emp_hierarchy
WHERE id.GetAncestor(1) = @new_parent_node;
 -- Получаем код узла для нового потомка нового родителя
SET @new_child_node = @new_parent_node.GetDescendant(@max_child_node, null);
 -- Переподчиняем нужный нам узел вместе со всеми его потомками
UPDATE Emp_hierarchy
SET id = id.GetReparentedValue(@reparented_node, @new_child_node)
WHERE id.IsDescendantOf(@reparented_node) = 1;
Описание слайда:
DECLARE DECLARE     @reparented_node AS HIERARCHYID, -- Код узла, который мы хотим переподчинить со всеми его потомками     @new_parent_node AS HIERARCHYID, -- Код узла нового родителя     @max_child_node AS HIERARCHYID,  -- Код узла максимального потомка нового родителя     @new_child_node AS HIERARCHYID;  -- Код узла для нового потомка нового родителя   -- Получаем код узла, который хотим переподчинить со всеми его потомками SELECT @reparented_node = id FROM Emp_hierarchy WHERE empid = 3; -- employee_id Janet  -- Получаем код узла нового родителя SELECT @new_parent_node = id FROM Emp_hierarchy WHERE empid = 4; -- employee_id Margaret  -- Получаем код узла максимального потомка нового родителя SELECT @max_child_node = MAX(id) FROM Emp_hierarchy WHERE id.GetAncestor(1) = @new_parent_node;  -- Получаем код узла для нового потомка нового родителя SET @new_child_node = @new_parent_node.GetDescendant(@max_child_node, null);  -- Переподчиняем нужный нам узел вместе со всеми его потомками UPDATE Emp_hierarchy SET id = id.GetReparentedValue(@reparented_node, @new_child_node) WHERE id.IsDescendantOf(@reparented_node) = 1;



Похожие презентации
Mypresentation.ru
Загрузить презентацию