
- •Система управления базами данных MySql
- •Тема 1: Архитектура и назначение сервера. Основные функции
- •1.1. Введение в субд MySql
- •1.2. Основные программы и утилиты MySql
- •1.3. Инсталляция MySql на разных платформах
- •Контрольные вопросы
- •Тема 2: Основные типы данных и операторы субд MySql
- •Типы данных
- •Переменные
- •Операторы
- •Контрольные вопросы
- •Тема 3: Утилита mysql
- •3.1 Функции mysql
- •3.2 Работа с базами данных и таблицами
- •Контрольные вопросы
- •Тема 4: Выборка данных
- •Простые запросы
- •Объединение таблиц
- •Объединение таблицы с собой
- •Теоретико-множественные операции с таблицами
- •Подзапросы
- •Контрольные вопросы
- •Тема 5: Встроенные функции MySql
- •5.1 Общие понятия
- •5.2 Отладка и конфигурирование
- •Управляющие функции
- •If(условие, значение истина,значение_ложь)
- •Ifnull( проверяемое_значение, возвращаемое _значение)
- •Статистические и математические функции
- •Функции работы с датой и временем
Объединение таблиц
Одна из наиболее важных особенностей запросов SQL – это их способность определять связи между различными таблицами и выводить информацию из них в терминах этих связей, всю внутри одной команды.
Этот вид операции называется объединением, которое является одним из видов реляционных операций в реляционных базах данных. Используя объединения, мы непосредственно связываем информацию с любым номером таблицы, и таким образом способны создавать связи между сравнимыми фрагментами данных.
Перечислим основные характеристики объединений:
операнды объединения (то есть те две таблицы, которые подаются на вход) обычно называют первой таблицей и второй, но для внешних объединений важен порядок, поэтому их называют левой и правой таблицей;
таблицы всегда объединяются построчно при выполнении всевозможных условий, определенных в запросе;
те строки, которые не соответствуют заданным условиям, могут быть как включены в объединение, так и исключены из него, в зависимости от типа этого объединения;
значения связанных столбцов обычно проверяют на равенство, но можно приманять и другие операторы сравнения;
связанные столбцы чаще всего являются связанными ключевыми столбцами, но, в общем-то, можно связать любые столбцы;
связанные столбцы должны быть определены на одинаковых доменах;
связанные столбцы не обязательно должны иметь одинаковые названия;
чтобы выполнить слияние более двух таблиц, объединения таблиц можно вкладывать друг в друга, выстраивать в цепочку и комбинировать, но при этом надо понимать, что СУБД проходит через ваш запрос шаг за шагом, выполняя объединения так, что за один раз всегда обрабатывается только две таблицы;
количество таблиц для объединений, в общем-то, не ограничивается, но чем больше объединений, тем медленнее будет выполняться запрос;
если связывающие столбцы содержат значения null, те строки, в которых эти значения оказываются, ни в какое объединение никогда не попадут (вспомните трехзначную логику); значения с null могут попасть только в результате перекрестного или внешнего объединения.
Объединение (JOIN) является одной из сильнейших операций реляционной алгебры. Формат команды выборки данных с нескольких таблиц имеет вид:
SELECT <имя таблицы.имя столбца>,…, <имя таблицы.имя столбца> FROM <перечень имен таблиц> [WHERE <предикат>].
После слова SELECT через запятую указывают список имен столбцов с указанием префиксов - имен таблиц, в которых находятся данные столбцы. Имена самих таблиц перечисляются через запятую после слова FROM.
Команда обрабатывается в следующей последовательности: сначала обрабатывается фраза FROM, при этом выполняется декартово произведение таблиц, что принимают участие в запросе. В результате образовывается таблица больших размеров с количеством столбцов равных сумме столбцов начальных таблиц, за исключением общих для них столбцов; количество строк равняется произведению количества строк таблиц, которые соединяются. Потом выполняется условие отбора, оглашенное после слова WHERE. Строки которые не соответствуют условию отбора, исключаются из рассмотрения – выполняется операция реляционной алгебры – селекция. К строкам, что остались, применяется операция – проецирование.
Если условие не указано, то результатом команды является декартово произведение.
В общем случае различают следующие типы объединений:
Полное или перекрестное объединение (CROSS JOIN) – группирует строки таблиц по правилу «каждая с каждой». В реляционной алгебре эта операция называется декартовым произведением.
Естественное объединение (NATURAL JOIN) – объединение по равенству. Связанными столбцами считаются те, которые в двух таблицах имею одинаковые имена. Объединяются те строки, в которых все значения связанных столбцов одной таблицы попарно совпадают с соответствующими значениями связанных столбцов другой таблицы. Остальные строки из объединения исключаются.
Внутреннее объединение (INNER JOIN) – тэта-объединение (можно использовать все операторы сравнения). Связанными столбцами считаются те, которые заданы условиями сравнения. Принцип объединения такой же, как и в естественном. Этот вид объединений используется чаще всего.
Левое внешнее объединение (LEFT OUTER JOIN) – сначала проводиться сравнение значений связанных столбцов. Но в результат объединения включаются все строки левой таблицы, а не только те для которой в правой таблице нашлись строки с удовлетворяющими сравнению значениями связанных столбцов. Если некоторой строке слева не нашлось ни одной строки справа, СУБД объединяет ее с искусственной строкой состоящей из значений null.
Правое внешнее объединение (RIGHT OUTER JOIN) – является зеркальным отображением левого внешнего объединения, но в результат включаются все строки правой таблицы.
Полное внешнее объединение (FULL OUTER JOIN) – включает все строки правой и левой таблиц. Если у какой-то из таблиц нет пары по связанным столбцам, СУБД объединяет ее с искусственной строкой, состоящей из значений null.