Объединение таблиц (SQL) презентация

Содержание

Слайд 1Объединение таблиц
До выпуска стандарта SQL:1999 Oracle обладал собственным синтаксисом объединения таблиц.
В

настоящее время поддерживаются 2 синтаксиса кодирования объединения таблиц.

Переход на использования синтаксиса SQL:1999 не дает выигрыша в производительности


Слайд 2Типы объединений
 Простое объединение таблиц (NATURAL JOIN):
Условие USING;
Условие ON.
Самообъединение (SELF-JOIN);
Объединение по равенству

(EQUIJOINS);
Объединение по не равенству (NONEQUIJOIN);
Внешнее соединение (OUTER JOIN):
LEFT OUTER;
RIGHT OUTER;
FULL OUTER.
Декартово пересечение таблиц (CROSS JOIN).

Слайд 3Получение данных из нескольких таблиц
EMPLOYEES
DEPARTMENTS






Слайд 4CROSS JOIN возвращает декартовое пересечение таблиц.
NATURAL JOIN соединяет две таблицы по

одноименным столбцам, имеющим одинаковый тип данных .
JOIN table2   USING(column_name) объединяет таблицы по указанному столбцу.
JOIN table2 ON (table1.column_name=table2.column_name) объединяет таблицы по указанному условию.
LEFT | RIGHT | FULL OUTER JOIN выполняет внешние соединения таблиц по указанному условию.

Объединение таблиц Синтаксис SQL:1999

Для объединения информации из нескольких таблиц используется следующий синтаксис:

SELECT table1.column, table2.column
FROM table1
[NATURAL JOIN table2] |
[JOIN table2 USING (column_name)] |
[JOIN table2
ON (table1.column_name = table2.column_name)]|
[LEFT|RIGHT|FULL OUTER JOIN table2
ON (table1.column_name = table2.column_name)]|
[CROSS JOIN table2];


Слайд 5Использование одноименных столбцов в запросе

Для одноименных столбцов таблиц необходимо использовать префиксы

(имена таблиц или псевдонимы таблиц).
Для повышения производительности используются префиксы для столбцов с указанием таблицы или псевдонима.
Чем меньше SQL код, тем меньше места он занимает в памяти и тем быстрее происходит разбор SQL инструкции.

Слайд 6Простое объединение таблиц NATURAL JOIN

NATURAL JOIN основано на всех столбцах

в двух таблицах, которые имеют одинаковые имена.
Результат: выбираются строки из двух таблиц, для которых существуют одинаковые значения, для всех соответствующих столбцов.
Если столбцы с одинаковыми именами имеют разные типы данных, генерируется ошибка.

Слайд 7SELECT department_id, department_name,
location_id, city
FROM departments
NATURAL JOIN

locations ;

Получение записей с NATURAL JOIN



SELECT d.department_id, d.department_name,
l.location_id, l.city
FROM departments d, locations l
where d.location_id=l.location_id;



Слайд 8Создание объединений с условием USING
Если несколько столбцов имеют одинаковые имена, но

типы данных не совпадают, простое объединение может быть использовано с условием USING, которое позволяет точно указывать столбцы для объединения, даже если типы данных различны у этих столбцов.
Если в результате выбираются несколько столбцов, существующие в двух таблицах, то эти столбцы должны быть перечислены в USING.
Не используйте имя таблицы или псевдоним как префикс в условиях USING.
NATURAL JOINS и USING являются двумя независящими друг от друга способами объединения.

Слайд 9Использование USING
EMPLOYEES
DEPARTMENTS
Внешний ключ
Первичный ключ



Слайд 10SELECT employee_id, last_name,
location_id, department_id
FROM employees

JOIN departments
USING (department_id) ;

Получение результата с использованием USING



SELECT employee_id, last_name
FROM employees JOIN emp
USING (employee_id, last_name);

Но если в результате несколько одноименных столбцов, их необходимо перечислить в USING.




Слайд 11SELECT l.city, d.department_name
FROM locations l JOIN departments d
USING (location_id)
WHERE

d.location_id = 1400 –- вызывает ошибку
and d.department_name='IT'; -- работает

Использование псевдонимов столбцов в условии USING

Использование псевдонимов столбцов в условии USING запрещено.
Псевдоним может присутствовать в запросе в любом другом предложении, но не в USING и не для столбца объединения.


Слайд 12Создание объединений с условием ON
NATURAL JOIN объединяет таблицы по всем одноименным

столбцам.

Если требуется объединить таблицы только по некоторым столбцам или по условию, используется условие ON.

Условие ON применяется:
Для указания столбцов по которым следует объединять таблицы.
Синтаксически отделяет раздел с условиями объединения таблиц от раздела поиска результата по условию WHERE.
Упрощает код для понимания, т.е. делает его удобочитаемым.

Слайд 13SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM

employees e JOIN departments d
ON (e.department_id = d.department_id);

Получение результата с использованием ON





SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e, departments d
WHERE e.department_id = d.department_id;



Слайд 14SELECT employee_id, city, department_name
FROM employees e
JOIN departments d
ON

d.department_id = e.department_id
JOIN locations l
ON d.location_id = l.location_id;

Соединение 3х таблиц по условию ON



SELECT e.employee_id, l.city, d.department_name
FROM employees e, departments d, locations l
WHERE d.department_id = e.department_id
AND d.location_id = l.location_id;



Слайд 15SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM

employees e JOIN departments d
ON (e.department_id = d.department_id)
AND e.manager_id = 149 ;

Использование нескольких условий для объединения

Для добавления дополнительных условий используется AND


SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND e.manager_id = 149 ;


SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
WHERE e.manager_id = 149 ;


Для добавления дополнительных условий используется WHERE

Альтернативный способ


Слайд 16Самообъединение SELF-JOIN
MANAGER_ID для Работника эквивалентно EMPLOYEE_ID для Начальника

EMPLOYEES (Работник)
EMPLOYEES (Начальник)


Случай, когда в

запросе используется одна и та же таблица несколько раз, и данная таблица соединяется сама с собой, называется самообъединением

Слайд 17Самообъединение с условием ON
SELECT worker.last_name emp, manager.last_name mgr
FROM employees worker

JOIN employees manager
ON (worker.manager_id = manager.employee_id);


SELECT worker.last_name emp, manager.last_name mgr
FROM employees worker, employees manager
WHERE worker.manager_id = manager.employee_id;




Слайд 18Объединение по не равенству NONEQUIJOIN
EMPLOYEES
JOB_GRADES



Таблица JOB_GRADES определяет диапазон значений LOWEST_SAL и

HIGHEST_SAL для каждой оценки GRADE_LEVEL. Следовательно, столбец GRADE_LEVEL может быть использован для выставления оценки каждому сотруднику в зависимости от зарплаты.

Слайд 19SELECT e.last_name, e.salary, j.grade_level
FROM employees e JOIN job_grades j
ON

e.salary
BETWEEN j.lowest_sal AND j.highest_sal;

Получение записей с NONEQUIJOIN




SELECT e.last_name, e.salary, j.grade_level
FROM employees e, job_grades j
WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;



Слайд 20Получение записей при отсутствии значений в одной из таблиц
EMPLOYEES
DEPARTMENTS
Нет сотрудников в

отделе 190.





Слайд 21Внутреннее соединение и внешнее соединение
В SQL:1999 объединение двух таблиц, возвращающее только

совпадающие строки, называется внутренним соединением.
Объединение двух таблиц, возвращающее результат внутреннего соединения, а также строки из левой таблицы, отсутствующие в правой (или левой), называется левым (или правым) внешним соединением.
Объединение двух таблиц, возвращающее результат внутреннего соединения, а также результаты слева и справа, отсутствующие в другой таблице, называется полным внешним соединением.

Слайд 22SELECT e.last_name, e.department_id, d.department_name
FROM employees e LEFT OUTER JOIN departments

d
ON (e.department_id = d.department_id) ;

Левое внешнее соединение LEFT OUTER JOIN




SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
where e.department_id = d.department_id(+);


Знак (+) устанавливается после имени столбца таблицы, в которой есть недостаток строк.


Слайд 23SELECT e.last_name, e.department_id, d.department_name
FROM employees e RIGHT OUTER JOIN departments

d
ON (e.department_id = d.department_id) ;

Правое внешнее соединение RIGHT OUTER JOIN




SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
where e.department_id(+) = d.department_id;



Слайд 24SELECT e.last_name, d.department_id, d.department_name
FROM employees e FULL OUTER JOIN departments

d
ON (e.department_id = d.department_id) ;

Полное внешнее соединение FULL OUTER JOIN




Для полного внешнего соединения не существует эквивалентного синтаксиса Oracle.


Слайд 25Декартово пересечение
Декартово пересечение образуется когда:
Условие объединения отсутствует;
Условие объединения ошибочно;
Необходимо все

строки из первой таблицы объединить со всеми строками из второй таблицы.

Чтобы избежать неправильных декартовых пересечений таблиц, необходимо использовать условия объединения.

Слайд 26Декартово пересечение. Формирование.
Декартово пересечение 20 x 8 = 160 строк
EMPLOYEES (20

строк)

DEPARTMENTS (8 строк)





Слайд 27SELECT last_name, department_name
FROM employees
CROSS JOIN departments ;
Создание CROSS JOIN
CROSS JOIN

применяют для создания декартова пересечения двух таблиц.



SELECT last_name, department_name
FROM employees, departments ;



Слайд 28Агрегация данных и групповые функции


Слайд 29
Групповые функции
Групповые функции позволяют обрабатывать набор строк для формирования одного результата.
EMPLOYEES


Значение

максимальной зарплаты в таблице EMPLOYEES




Обрабатываемый набор строк может включать все строки таблицы или таблицу, разделенную на группы.


Слайд 30Типы групповых функций
Групповые
функции


Слайд 31SELECT group_function(column), ...
FROM table
[WHERE condition]
[ORDER BY column];
Групповые функции можно

использовать в операторе SELECT. Допустимо использовать несколько групповых функций, разделенных запятыми.


Групповые функции Синтаксис

Для обработки только уникальных значений столбца, используя групповые функции, необходимо в скобках указать служебное слово DISTINCT;
Для обработки всех значений столбца, включая дубликаты, можно использовать служебное слово ALL. Значение по умолчанию всегда ALL, поэтому его можно не указывать.
В групповых функциях используются типы данных CHAR, VARCHAR2, NUMBER или DATE.
Все групповые функции игнорируют null-значения. Чтобы заменить NULL значения, необходимо использовать вложенные функции NVL, NVL2, COALESCE, CASE или DECODE.


Слайд 32SELECT AVG(salary), MAX(salary),
MIN(salary), SUM(salary)
FROM employees
WHERE job_id

LIKE '%REP%';

Использование функций AVG и SUM

Функции AVG и SUM можно применять только к столбцам, которые хранят числовые данные.



Среднее значение по столбцу n, игнорируя значения NULL.

AVG([DISTINCT|ALL]n)

SUM([DISTINCT|ALL]n)

Сумма значений по столбцу n, игнорируя значения NULL.


Слайд 33SELECT MIN(hire_date), MAX(hire_date)
FROM employees;
Использование функций MIN и MAX


Можно использовать функции MAX

и MIN для числовых, символьных типов данных и дат.

Максимальное значение столбца expr, игнорируя значения NULL.

MAX([DISTINCT|ALL]expr)

MIN([DISTINCT|ALL]expr)

Минимальное значение столбца expr, игнорируя значения NULL.


Слайд 34Использование функции COUNT
SELECT COUNT(commission_pct)
FROM employees
WHERE department_id=80;
SELECT COUNT(*)
FROM employees
WHERE department_id

= 50;



1

2

COUNT(*) возвращает число строк в таблице, которые удовлетворяют критерию оператора SELECT, включая дублирующие строки и строки, содержащие NULL-значения в любом из столбцов.

Три формата COUNT:

COUNT(expr) возвращает число строк в таблице, которые не имеют NULL значения в столбце expr.

COUNT(DISTINCT expr) возвращает число строк в таблице, которые не имеют NULL значения в столбце expr и значение столбца уникально.

SELECT COUNT(DISTINCT department_id)
FROM employees


3


Слайд 35NULL значения в групповых функциях
SELECT AVG(commission_pct)
FROM employees;
SELECT AVG(NVL(commission_pct, 0))
FROM

employees;



Строки, содержащие NULL значения в столбцах, для которых применяются групповые функции, не участвуют в формировании результата групповых функций.

1

Для учета строк, содержащих NULL значения, при формировании результата групповой функции необходимо применять вложенные функции преобразования NULL значений (NVL, NVL2, COALESCE, CASE, DECODE).

2


Слайд 36
Создание групп данных
EMPLOYEES






Средняя заработная плата сотрудников по отделам
В некоторых задачах необходимо

применять групповые функции не ко всем строкам таблицы, а к строкам, входящим в состав некоторых условных групп.

Слайд 37Создание групп данных Условие GROUP BY
Для деления всех строк таблицы

на группы используется условие GROUP BY.

SELECT column1, group_function(column2)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column1];


Правила применения GROUP BY:
Если в операторе SELECT используется групповая функция для столбца column2, то невозможно получить результаты столбцов, к которым не применяются групповые функции (column1), если эти столбцы не перечислены в условии GROUP BY.
Условие WHERE позволяет исключить строки из результата до формирования групп.
В условии GROUP BY невозможно использовать псевдонимы.


Слайд 38SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id ;
Использование GROUP

BY в операторе SELECT

При использовании условия GROUP BY необходимо удостовериться, что все столбцы из предложении SELECT, к которым не применяется групповая функция, перечислены в предложении GROUP BY.



Условие GROUP BY определяет способ группировки строк. В примере строки группируются по номеру отдела, поэтому функция AVG, которая применяется к столбцу зарплаты, вычисляет среднюю зарплату для каждого отдела.


Слайд 39

Использование GROUP BY в операторе SELECT
Столбец, включенный в условие GROUP

BY, может не присутствовать в предложении SELECT.

SELECT AVG(salary)
FROM employees
GROUP BY department_id ;


Групповую функцию можно использовать в предложении ORDER BY.



SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id
ORDER BY AVG(salary);



Слайд 40Группировка данных из нескольких столбцов
EMPLOYEES

Суммарная заработная плата сотрудников по занимаемым должностям

внутри отдела


Некоторые задачи требуют применения групповой функции для групп записей внутри выбранной группы.








Слайд 41SELECT department_id dept_id, job_id, SUM(salary)
FROM employees
GROUP BY department_id,

job_id
ORDER BY department_id;

Использование условия GROUP BY для нескольких столбцов


В предложении GROUP BY последовательно задаются столбцы: сначала столбец формирующий группу, затем столбец по которому формируются подгруппы в рамках этой группы и т.д.


Слайд 42Ошибки при использовании групповых функций
SELECT department_id, COUNT(last_name)
FROM employees;
SELECT department_id, job_id,

COUNT(last_name)
FROM employees
GROUP BY department_id;

Условие GROUP BY должно быть добавлено для подсчета количества сотрудников в каждом отделе. (GROUP BY department_id)

Для устранения ошибки необходимо либо добавить столбец job_id в условие GROUP BY, либо удалить столбец job_id из предложения SELECT.




Слайд 43Ошибки при использовании групповых функций
В предложение WHERE недопустимо использовать групповые функции

для формирования ограничений на группу выбираемых данных.
Для этих целей используется условие HAVING

SELECT department_id, AVG(salary)
FROM employees
WHERE AVG(salary) > 8000
GROUP BY department_id;



Слайд 44Установка ограничений на группу выбираемых данных
EMPLOYEES






Вывод №-ов отделов и максимальной заработной

платы по отделу, если максимальная заработная плата в отделе превышает 10 000




Слайд 45SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING

group_condition]
[ORDER BY column];

Условие HAVING Синтаксис

Условие HAVING используется для установки ограничений на выборку результирующих строк, полученных при работе групповых функций.
При наличии условия HAVING в запросе, СУБД Oracle выполняет следующие действия:
Строки группируются по условию из GROUP BY.
Групповая функция применяется к сформированным наборам строк.
Из результата отображаются только те строки, которые соответствуют условию HAVING.


Предложения HAVING может предшествовать предложению GROUP BY, но его рекомендуется размещать после GROUP BY.


Слайд 46SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000

;

Использование условия HAVING



Слайд 47SELECT job_id, SUM(salary) PAYROLL
FROM employees
WHERE job_id NOT

LIKE '%REP%'
GROUP BY job_id
HAVING SUM(salary) > 13000
ORDER BY SUM(salary);


Использование условия HAVING и ORDER BY



Слайд 48SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id;
Вложенные групповые функции

Групповые функции

могут быть вложенными

Результатом работы запроса является максимальное значение из средних заработных плат, рассчитанных по департаментам.


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика