SlideShare a Scribd company logo
Лекция 3. Внешние и внутренние соединения таблиц БД.
Вложенные запросы типа Type I и Type II. Проектирование
пользовательских представлений.
JOIN - оператор языка SQL, который является
реализацией операции соединения реляционной алгебры.
Входит в раздел FROM операторов SELECT, UPDATE или
DELETE.
Операция соединения, предназначена для обеспечения выборки данных из двух
таблиц и включения этих данных в один результирующий набор. Отличительными
особенностями операции соединения являются следующее:
- в схему таблицы-результата входят столбцы обеих исходных таблиц (таблиц-
операндов), то есть схема результата является «сцеплением» схем операндов;
- каждая строка таблицы-результата является «сцеплением» строки из одной
таблицы-операнда со строкой второй таблицы-операнда.
Определение того, какие именно исходные строки войдут в результат и в каких
сочетаниях, зависит от типа операции соединения и от явно заданного условия
соединения.
При необходимости соединения не двух, а нескольких таблиц, операция соединения
применяется несколько раз (последовательно).
* Материал из Википедии - свободной энциклопедии
*
*
SELECT field_name [,... n]
FROM Table1
{INNER | {LEFT | RIGHT | FULL} OUTER | CROSS }
JOIN
Table2
{ON <condition> | USING (field_name [,... n])}
Выбор первого столбца соединения
Выбор первого операнда соединения
Выбор типа соединения
Приглашение к соединению
Выбор второго операнда соединения
Выбор условия соединения и второго столбца соединения при соблюдении
условия эквивалентности
Небольшое предупреждение и корректировка. Приведенные типы соединений
слегка субъективны. Связано это с тем, что данные соединения используются
в СУБД MS SQL Server и могут немного отличаться от соединений в других
СУБД.
Внутреннее соединение - Inner join (IJ)
Внешнее соединение - Outer join (OJ)
Перекрестное соединение - Cross join (CJ)
Полусоединение - Semi-join (SJ)
Анти-полусоединение - Anti-semi-join (ASJ)
Итак, мы рассмотрим 5 основных типов соединений операндов в БД:
Разворачиваем следующие две таблицы в базе данных, используя скрипты
cust и sales:
Customers (покупатели)
Sales (продажи)
Условие эквивалентности для соединения
Внутреннее соединение находит пары строк, которые соединяются и
удовлетворяют предикату соединения.
Например, показанный ниже запрос (скрипт inner join) использует предикат
cоединения "S.Cust_Id = C.Cust_Id", позволяющий найти все продажи и сведения о
клиенте с одинаковыми значениями Cust_Id:
Важный момент!
Таблицы кодируются
переменными (S-Sales,
C-Customers) с целью
упрощения процесса
идентификации
предиката
Cust_Id = 3 купил два наименования, поэтому он фигурирует в двух строках результирующего набора.
Cust_Id = 1 не купил ничего и потому не появляется в результате.
Для Cust_Id = 4 тоже был продан товар, но поскольку в таблице нет такого клиента, сведения о такой продаже не появились
в результате.
Внутренние соединения полностью коммутативны. "A inner join B" и "B inner join A" эквивалентны.
Соединение двух таблиц, в результат которого в обязательном порядке входят
строки либо одной, либо обеих таблиц. Бывает левое внешнее соединение, правое
внешнее соединение или же полное внешнее соединение.
Предположим, что мы хотели бы увидеть список всех продаж; даже тех, которые
не имеют соответствующих им записей о клиенте (левое внешнее соединение,
ojleft_script).
Cервер возвращает вместо
данных о клиенте значение
NULL, поскольку для
проданного товара 'Printer' нет
соответствующей записи
клиента.
Используя полное внешнее соединение (ojfull_script), можно найти всех клиентов
(независимо от того, покупали ли они что-нибудь), и все продажи (независимо от
того, сопоставлен ли им имеющийся клиент):
Соединение Выводятся …
A left outer join B Все строки A
A right outer join B Все строки B
A full outer join B Все строки A и B
В случае правого внешнего
соединения, в соответствии с таблицей
будут выведены все покупатели, вне
зависимости от того, покупали ли они
что-нибудь.
Перекрестное соединение выполняет полное Декартово произведение двух
таблиц. То есть это соответствие каждой строки одной таблицы - каждой строке
другой таблицы. Для перекрестного соединения нельзя определить предикат
соединения, используя для этого предложение ON.
Перекрестные соединения используются
довольно редко. Никогда не стоит
пересекать две большие таблицы,
поскольку это задействует очень дорогие
операции и получится очень большой
результирующий набор.
cj_script
Полусоединение возвращает строки только одной из соединяемых таблиц, без
выполнения соединения полностью. Анти-полусоединение возвращает те строки
таблицы, которые не годятся для соединения с другой таблицей; т.е. они в обычном
внешнем соединении выдавали бы NULL.
Чаще всего полусоединение используется в плане подзапроса с EXISTS (sj_script)
Существуют левые и правые полусоединения.
Левое полусоединение возвращает строки
левой (первой) таблицы, которые
соответствуют строкам из правой (второй)
таблицы, в то время как правое
полусоединение возвращает строки из правой
таблицы, которые соответствуют строкам из
левой таблицы.
Подобным образом может использоваться
анти-полусоединение для обработки
подзапроса с NOT EXISTS.
Вложенными запросами называются комбинированные
операторы выбора, вставки/удаления/добавления данных,
которые содержат в себе несколько подзапросов (внешние и
внутренние – outer и inner).
Являются довольно изящным и простым решением при
оптимизации работы БД. Чаще всего используются при
вставке (INSERT), удалении (DELETE) или же изменении
(UPDATE) большого количества значений в одной таблице на
основании данных другой таблицы.
Также, активно применяются при конструировании сложных
операторов выборки из двух таблиц в тех случаях, когда
оператор JOIN не подходит для решения задачи.
Особенности вложенного запроса Type I:
- в случае комбинации двух запросов оператора SELECT используется
конструкция IN
- запускается на исполнение только один раз (не допускает циклической
обработки)
- при исполнении первым всегда выполняется внутренний запрос (inner)
Используется скрипт typ1_selsel.
Таблица supplier (поставщик)
Таблица product (продукт)
Необходимо показать, какие продукты поставляет в наш магазин, поставщик,
название которого начинается с Color.
Обязательная команда IN, связывающая внешний и внутренний запрос.
Внешний запрос (outer)
Внутренний запрос (inner)
Особенности вложенного запроса Type II:
- конструкция IN не используется, как правило, чаще всего используется
конструкция EXISTS (включает) или NOT EXISTS
- при исполнении первым всегда выполняется последний запрос в
“дереве”
Используется скрипт typ2_inssel.
Таблица А Таблица B
Из таблицы А в таблицу B необходимо перенести (скопировать) данные при
условии status < 3.
Второй запрос в дереве, выполняется первым
Первый запрос в дереве, выполняется вторым
Таблица является физическим носителем информации
Вся информация, занесенная в таблицу хранится на жесткотелом накопителе
Информация на накопителе может добавляться и извлекаться
по двум принципам:
СТЭК (stack) ОЧЕРЕДЬ (queue)
- добавляем данные снизу
- читаем данные снизу
- добавляем данные снизу
- читаем данные сверху
Ключевой вывод: записанная в таблицы информация статична и малоподвижна.
Вот как раз сочная, известная большинству из нас картинка, подтверждающая
предыдущие тезисы. Дефрагментация диска.
Как же тогда работают запросы типа SELECT? Команды ORDER BY, NOT EXIST..
ВИРТУАЛЬНО.. В операционном режиме.
Нам действительно нужно каждый раз выполнять выборку или группировку для
того чтобы видеть данные в удобном виде. А для тех, кто не знает SQL или знает
настолько хорошо, что может упростить всем работу с БД придумали
представления.
Итак, представление – это виртуальная (логическая) таблица, представляющая
собой поименованный запрос, который будет подставлен как подзапрос при
использовании представления.
В отличие от обычных таблиц реляционных баз данных, представление не
является самостоятельной частью набора данных, хранящегося в базе.
Содержимое представления динамически вычисляется на основании данных,
находящихся в реальных таблицах. Изменение данных в реальной таблице базы
данных немедленно отражается в содержимом всех представлений, построенных
на основании этой таблицы.
* Материал из Википедии - свободной энциклопедии
*
Что могут делать представления?
1. Представления скрывают от прикладной программы сложность запросов и саму
структуру таблиц БД.
2. Использование представлений позволяет отделить прикладную схему
представления данных от схемы хранения. Проще говоря, изменение программы
не затрагивает физические таблицы, а изменение физической структуры таблиц
не требует корректировки программы.
С помощью представлений обеспечивается ещё один уровень защиты данных.
Пользователю могут предоставляться права только на представление, благодаря
чему он не будет иметь доступа к данным, находящимся в тех же таблицах,
но не предназначенных для него.
Поскольку SQL-запрос, выбирающий данные представления, зафиксирован на
момент его создания, СУБД получает возможность применить к этому запросу
оптимизацию или предварительную компиляцию
Что могут хранить представления?
1. Подмножество записей из таблицы БД, отвечающее определённым
условиям.
2. Подмножество столбцов таблицы БД, требуемое программой .
3. Результат обработки данных таблицы определёнными операциями .
4. Результат объединения (join) нескольких таблиц.
5. Результат слияния нескольких таблиц с одинаковыми именами и
типами полей.
6. результат группировки записей в таблице
7. Практически любую комбинацию вышеперечисленных возможностей.

More Related Content

PPTX
создание запросов, отчётов, Web страниц
PPTX
PPTX
реляционная база Access
PPT
0037
PPT
0016
PPTX
Access 2000 1
PPTX
импорт информации из бд
создание запросов, отчётов, Web страниц
реляционная база Access
0037
0016
Access 2000 1
импорт информации из бд

What's hot (20)

PDF
Упражнение 1
PPT
Обзор полезных функций и приемов в Excel
PPTX
основы и трюки Excel
DOC
0043
PPTX
Microsoft office excel
PPTX
Access 02
PPT
PPTX
Занятие 4 Использование простых формул и функций
PPT
Организация вычислений в электронный таблицах
PDF
Stat 3 alpha
PPTX
11 ms acces_приемы работыt
DOC
0015
PPTX
таблицы лаб 4
PPTX
Access 01
PPTX
электронная таблица
PPTX
контрольная работа заоч_1
PPS
правила заполнения отчётов эмкпмо
PPTX
Занятие 3 Основы ввода и вывода данных
PPTX
основные термины
PPT
Базы данных лекция №7
Упражнение 1
Обзор полезных функций и приемов в Excel
основы и трюки Excel
0043
Microsoft office excel
Access 02
Занятие 4 Использование простых формул и функций
Организация вычислений в электронный таблицах
Stat 3 alpha
11 ms acces_приемы работыt
0015
таблицы лаб 4
Access 01
электронная таблица
контрольная работа заоч_1
правила заполнения отчётов эмкпмо
Занятие 3 Основы ввода и вывода данных
основные термины
Базы данных лекция №7
Ad

Similar to DBD lection 3. Outer and inner joins, nested queries, user views. In Russian. (20)

PPT
Базы данных лекция №8
PPTX
SQL________________________________.pptx
PPTX
Управление Данными. Лекция 8
PDF
Troubleshooting my sql_performance_addons
PPTX
Зачем SQL тестировщику и что ему нужно про него знать
PPTX
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
PDF
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PPTX
Оптимизации скорости выполнения запросов
PPT
раздел 3 реляционные модели данных
PPTX
24 25 запросы
PDF
21 - Базы данных. Вложенные запросы
PPT
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
DOCX
бд шпора2
PDF
18 - Базы данных. Общая структура оператора SELECT
PPTX
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
PPT
0042
PPTX
Стажировка-2015. Разработка. Занятие 2. Основы реляционных баз данных
PPTX
Query perfomance tuning
PPTX
СУБД осень 2012 лекция 8
PPT
Web весна 2012 лекция 5
Базы данных лекция №8
SQL________________________________.pptx
Управление Данными. Лекция 8
Troubleshooting my sql_performance_addons
Зачем SQL тестировщику и что ему нужно про него знать
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
Оптимизации скорости выполнения запросов
раздел 3 реляционные модели данных
24 25 запросы
21 - Базы данных. Вложенные запросы
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
бд шпора2
18 - Базы данных. Общая структура оператора SELECT
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
0042
Стажировка-2015. Разработка. Занятие 2. Основы реляционных баз данных
Query perfomance tuning
СУБД осень 2012 лекция 8
Web весна 2012 лекция 5
Ad

DBD lection 3. Outer and inner joins, nested queries, user views. In Russian.

  • 1. Лекция 3. Внешние и внутренние соединения таблиц БД. Вложенные запросы типа Type I и Type II. Проектирование пользовательских представлений.
  • 2. JOIN - оператор языка SQL, который является реализацией операции соединения реляционной алгебры. Входит в раздел FROM операторов SELECT, UPDATE или DELETE. Операция соединения, предназначена для обеспечения выборки данных из двух таблиц и включения этих данных в один результирующий набор. Отличительными особенностями операции соединения являются следующее: - в схему таблицы-результата входят столбцы обеих исходных таблиц (таблиц- операндов), то есть схема результата является «сцеплением» схем операндов; - каждая строка таблицы-результата является «сцеплением» строки из одной таблицы-операнда со строкой второй таблицы-операнда. Определение того, какие именно исходные строки войдут в результат и в каких сочетаниях, зависит от типа операции соединения и от явно заданного условия соединения. При необходимости соединения не двух, а нескольких таблиц, операция соединения применяется несколько раз (последовательно). * Материал из Википедии - свободной энциклопедии * *
  • 3. SELECT field_name [,... n] FROM Table1 {INNER | {LEFT | RIGHT | FULL} OUTER | CROSS } JOIN Table2 {ON <condition> | USING (field_name [,... n])} Выбор первого столбца соединения Выбор первого операнда соединения Выбор типа соединения Приглашение к соединению Выбор второго операнда соединения Выбор условия соединения и второго столбца соединения при соблюдении условия эквивалентности
  • 4. Небольшое предупреждение и корректировка. Приведенные типы соединений слегка субъективны. Связано это с тем, что данные соединения используются в СУБД MS SQL Server и могут немного отличаться от соединений в других СУБД. Внутреннее соединение - Inner join (IJ) Внешнее соединение - Outer join (OJ) Перекрестное соединение - Cross join (CJ) Полусоединение - Semi-join (SJ) Анти-полусоединение - Anti-semi-join (ASJ) Итак, мы рассмотрим 5 основных типов соединений операндов в БД:
  • 5. Разворачиваем следующие две таблицы в базе данных, используя скрипты cust и sales: Customers (покупатели) Sales (продажи) Условие эквивалентности для соединения
  • 6. Внутреннее соединение находит пары строк, которые соединяются и удовлетворяют предикату соединения. Например, показанный ниже запрос (скрипт inner join) использует предикат cоединения "S.Cust_Id = C.Cust_Id", позволяющий найти все продажи и сведения о клиенте с одинаковыми значениями Cust_Id: Важный момент! Таблицы кодируются переменными (S-Sales, C-Customers) с целью упрощения процесса идентификации предиката Cust_Id = 3 купил два наименования, поэтому он фигурирует в двух строках результирующего набора. Cust_Id = 1 не купил ничего и потому не появляется в результате. Для Cust_Id = 4 тоже был продан товар, но поскольку в таблице нет такого клиента, сведения о такой продаже не появились в результате. Внутренние соединения полностью коммутативны. "A inner join B" и "B inner join A" эквивалентны.
  • 7. Соединение двух таблиц, в результат которого в обязательном порядке входят строки либо одной, либо обеих таблиц. Бывает левое внешнее соединение, правое внешнее соединение или же полное внешнее соединение. Предположим, что мы хотели бы увидеть список всех продаж; даже тех, которые не имеют соответствующих им записей о клиенте (левое внешнее соединение, ojleft_script). Cервер возвращает вместо данных о клиенте значение NULL, поскольку для проданного товара 'Printer' нет соответствующей записи клиента.
  • 8. Используя полное внешнее соединение (ojfull_script), можно найти всех клиентов (независимо от того, покупали ли они что-нибудь), и все продажи (независимо от того, сопоставлен ли им имеющийся клиент): Соединение Выводятся … A left outer join B Все строки A A right outer join B Все строки B A full outer join B Все строки A и B В случае правого внешнего соединения, в соответствии с таблицей будут выведены все покупатели, вне зависимости от того, покупали ли они что-нибудь.
  • 9. Перекрестное соединение выполняет полное Декартово произведение двух таблиц. То есть это соответствие каждой строки одной таблицы - каждой строке другой таблицы. Для перекрестного соединения нельзя определить предикат соединения, используя для этого предложение ON. Перекрестные соединения используются довольно редко. Никогда не стоит пересекать две большие таблицы, поскольку это задействует очень дорогие операции и получится очень большой результирующий набор. cj_script
  • 10. Полусоединение возвращает строки только одной из соединяемых таблиц, без выполнения соединения полностью. Анти-полусоединение возвращает те строки таблицы, которые не годятся для соединения с другой таблицей; т.е. они в обычном внешнем соединении выдавали бы NULL. Чаще всего полусоединение используется в плане подзапроса с EXISTS (sj_script) Существуют левые и правые полусоединения. Левое полусоединение возвращает строки левой (первой) таблицы, которые соответствуют строкам из правой (второй) таблицы, в то время как правое полусоединение возвращает строки из правой таблицы, которые соответствуют строкам из левой таблицы. Подобным образом может использоваться анти-полусоединение для обработки подзапроса с NOT EXISTS.
  • 11. Вложенными запросами называются комбинированные операторы выбора, вставки/удаления/добавления данных, которые содержат в себе несколько подзапросов (внешние и внутренние – outer и inner). Являются довольно изящным и простым решением при оптимизации работы БД. Чаще всего используются при вставке (INSERT), удалении (DELETE) или же изменении (UPDATE) большого количества значений в одной таблице на основании данных другой таблицы. Также, активно применяются при конструировании сложных операторов выборки из двух таблиц в тех случаях, когда оператор JOIN не подходит для решения задачи.
  • 12. Особенности вложенного запроса Type I: - в случае комбинации двух запросов оператора SELECT используется конструкция IN - запускается на исполнение только один раз (не допускает циклической обработки) - при исполнении первым всегда выполняется внутренний запрос (inner)
  • 13. Используется скрипт typ1_selsel. Таблица supplier (поставщик) Таблица product (продукт)
  • 14. Необходимо показать, какие продукты поставляет в наш магазин, поставщик, название которого начинается с Color. Обязательная команда IN, связывающая внешний и внутренний запрос. Внешний запрос (outer) Внутренний запрос (inner)
  • 15. Особенности вложенного запроса Type II: - конструкция IN не используется, как правило, чаще всего используется конструкция EXISTS (включает) или NOT EXISTS - при исполнении первым всегда выполняется последний запрос в “дереве”
  • 16. Используется скрипт typ2_inssel. Таблица А Таблица B Из таблицы А в таблицу B необходимо перенести (скопировать) данные при условии status < 3. Второй запрос в дереве, выполняется первым Первый запрос в дереве, выполняется вторым
  • 17. Таблица является физическим носителем информации Вся информация, занесенная в таблицу хранится на жесткотелом накопителе Информация на накопителе может добавляться и извлекаться по двум принципам: СТЭК (stack) ОЧЕРЕДЬ (queue) - добавляем данные снизу - читаем данные снизу - добавляем данные снизу - читаем данные сверху Ключевой вывод: записанная в таблицы информация статична и малоподвижна.
  • 18. Вот как раз сочная, известная большинству из нас картинка, подтверждающая предыдущие тезисы. Дефрагментация диска.
  • 19. Как же тогда работают запросы типа SELECT? Команды ORDER BY, NOT EXIST.. ВИРТУАЛЬНО.. В операционном режиме. Нам действительно нужно каждый раз выполнять выборку или группировку для того чтобы видеть данные в удобном виде. А для тех, кто не знает SQL или знает настолько хорошо, что может упростить всем работу с БД придумали представления. Итак, представление – это виртуальная (логическая) таблица, представляющая собой поименованный запрос, который будет подставлен как подзапрос при использовании представления. В отличие от обычных таблиц реляционных баз данных, представление не является самостоятельной частью набора данных, хранящегося в базе. Содержимое представления динамически вычисляется на основании данных, находящихся в реальных таблицах. Изменение данных в реальной таблице базы данных немедленно отражается в содержимом всех представлений, построенных на основании этой таблицы. * Материал из Википедии - свободной энциклопедии *
  • 20. Что могут делать представления? 1. Представления скрывают от прикладной программы сложность запросов и саму структуру таблиц БД. 2. Использование представлений позволяет отделить прикладную схему представления данных от схемы хранения. Проще говоря, изменение программы не затрагивает физические таблицы, а изменение физической структуры таблиц не требует корректировки программы. С помощью представлений обеспечивается ещё один уровень защиты данных. Пользователю могут предоставляться права только на представление, благодаря чему он не будет иметь доступа к данным, находящимся в тех же таблицах, но не предназначенных для него. Поскольку SQL-запрос, выбирающий данные представления, зафиксирован на момент его создания, СУБД получает возможность применить к этому запросу оптимизацию или предварительную компиляцию
  • 21. Что могут хранить представления? 1. Подмножество записей из таблицы БД, отвечающее определённым условиям. 2. Подмножество столбцов таблицы БД, требуемое программой . 3. Результат обработки данных таблицы определёнными операциями . 4. Результат объединения (join) нескольких таблиц. 5. Результат слияния нескольких таблиц с одинаковыми именами и типами полей. 6. результат группировки записей в таблице 7. Практически любую комбинацию вышеперечисленных возможностей.