Эквисоединение таблиц

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

Меню Трапезы Вид_блюд Блюда
Т В БЛ Т Трапеза В Вид БЛ Блюдо В Основа Выход Труд
  З     Завтрак З Закуска   Салат летний З Овощи 200.  
  З     Завтрак З Закуска   Салат мясной З Мясо 200.  
  З     Завтрак З Закуска   Салат витаминный З Овощи 200. 4 *
. . . . . . . . . . . . .
  З     Завтрак З Закуска   Суп молочный С Молоко 500.  
  З     Завтрак З Закуска   Бастурма Г Мясо 300.  
. . . . . . . . . . . . .
  З     Завтрак З Закуска   Кофе черный Н Кофе 100.  
  З     Завтрак З Закуска   Кофе на молоке Н Кофе 200.  
  З     Завтрак З Закуска   Салат летний З Овощи 200.  
  З     Завтрак З Закуска   Салат мясной З Мясо 200.  
  З     Завтрак З Закуска   Салат витаминный З Овощи 200.  
  З     Завтрак З Закуска   Салат рыбный З Рыба 200.  
  З     Завтрак З Закуска   Паштет из рыбы З Рыба 120.  
  З     Завтрак З Закуска   Мясо с гарниром З Мясо 250. 3 *
. . . . . . . . . . . . .

Рис. 3.1. Иллюстрация декартова произведения

Очевидно, что отбор актуальных строк обеспечивается вводом в запрос WHERE фразы, в которой устанавливается соответствие между:

  • кодами трапез (Т) в таблицах Меню и Трапезы (Меню.Т = Трапезы.Т),
  • кодами видов блюд (В) в таблицах Меню и Вид_блюд (Меню.В = Вид_блюд.В),
  • номерами блюд (БЛ) в таблицах Меню и Блюда (Меню.БЛ = Блюда.БЛ).

Такой скорректированный запрос

SELECT Меню.*, Трапезы.*, Вид_блюд.*, Блюда.* FROM Меню, Трапезы, Вид_блюд, Блюда WHERE Меню.Т = Трапезы.Т AND Меню.В = Вид_блюд.В AND Меню.БЛ = Блюда.БЛ;

позволит получить эквисоединение таблиц Меню, Трапезы, Вид_блюд и Блюда:

Т В БЛ Т Трапеза В Вид БЛ Блюдо В Основа Выход Труд
  З     Завтрак З Закуска   Салат витаминный З Овощи 200.  
  З     Завтрак З Закуска   Мясо с гарниром З Мясо 250.  
  Г     Завтрак Г Горячее   Омлет с луком Г Яйца 200.  
. . . . . . . . . . . . .
  Г     Ужин Г Горячее   Драчена Г Яйца 180.  
  Н     Ужин Н Напиток   Компот Н Фрукты 200.  
  Н     Ужин Н Напиток   Молочный напиток Н Молоко 200.  

Естественное соединение таблиц.

Легко заметить, что в эквисоединение таблиц вошли дубликаты столбцов, по которым проводилось соединение (Т, В и БЛ). Для исключения этих дубликатов можно создать естественное соединение тех же таблиц:

SELECT Т, В, БЛ, Трапеза, Вид, Блюдо, Основа, Выход, Труд FROM Меню, Трапезы, Вид_блюд, Блюда WHERE Меню.Т = Трапезы.Т AND Меню.В = Вид_блюд.В AND Меню.БЛ = Блюда.БЛ;

Реализация естественного соединения таблиц имеет вид

Т В БЛ Трапеза Вид Блюдо Основа Выход Труд
  З   Завтрак Закуска Салат витаминный Овощи 200.  
  З   Завтрак Закуска Мясо с гарниром Мясо 250.  
  Г   Завтрак Горячее Омлет с луком Яйца 200.  
. . . . . . . . .
  Г   Ужин Горячее Драчена Яйца 180.    
  Н   Ужин Напиток Компот Фрукты 200.  
  Н   Ужин Напиток Молочный напиток Молоко 200.  

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: