Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






FROM Продукты p LEFT JOIN Наличие n





Из этого примера можно вынести важный урок: левое и правое внешние соединения абсолютно эквивалентны, смысл лишь в том, какая из таблиц является внешней — все строки этой таблицы будут включены в результат. Из-за этого многие программисты избегают правых внешних объединений и преобразуют их в левые, меняя таблицы местами; при этом таблица, из которой должны быть взяты все строки, всегда является левой. Левые внешние соединения для многих людей кажутся более понятными, чем правые.

Что если не менять таблицы местами в рассмотренном соединении? Предположим, запрос выглядит так:

SELECT p.Продукт, n.Количество, n.Стоимость

FROM Продукты p RIGHT JOIN Наличие n ON p.ID_Продукта = n.Продукт

На этот раз, как и в исходном левом объединении, таблица Продукты — левая, а таблица Наличие — правая.


 

Результат  
Продукт Количество Цена
Говядина   429,84
Судак   0,00
Масло   274,61
Майонез   97,46
Яйца   111,83
Сметана   206,60
Молоко   83,80
Творог   82,80
Морковь   0,00
Лук   46,30
Помидоры   51,70
Зелень   34,96
Рис   51,17
Мука   43,77
Яблоки   189,92
Сахар   96,14
Кофе   166,50
Масло растительное NULL NULL

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

Как такое может быть? Нет ли ошибки? Нет, и причина лежит в содержимом таблиц. Вспомните: правое внешнее объединение возвращает все строки правой таблицы и соответствующие им строки левой таблицы, если такие найдутся. Таблица Наличие — правая, и в данном случае каждая запись имеет свой ID_Продукта в таблице Продукты (иначе бы при добавлении строк в таблицу Наличие мы бы имели ошибку, связанную с внешним ключом). Возвращаются все записи, и несоответствующих строк нет.

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

Чтобы на самом деле увидеть правые внешние соединения в действии, рассмотрим следующий запрос.

Пример 23.







Date: 2015-09-18; view: 343; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию