Структуризированный язык запросов (SQL)

       

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


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

Меню Трапезы Вид_блюд Блюда ТВБЛТТрапезаВВидБЛБлюдоВОсноваВыходТруд 1З31ЗавтракЗЗакуска1Салат летнийЗОвощи200.3 1З31ЗавтракЗЗакуска2Салат мяснойЗМясо200.4 1З31ЗавтракЗЗакуска3Салат витаминныйЗОвощи200.4 * . . . 1З31ЗавтракЗЗакуска12Суп молочныйСМолоко500.3 1З31ЗавтракЗЗакуска13БастурмаГМясо300.5 . . . 1З31ЗавтракЗЗакуска32Кофе черныйНКофе100.1 1З31ЗавтракЗЗакуска33Кофе на молокеНКофе200.2 1З61ЗавтракЗЗакуска1Салат летнийЗОвощи200.3 1З61ЗавтракЗЗакуска2Салат мяснойЗМясо200.4 1З61ЗавтракЗЗакуска3Салат витаминныйЗОвощи200.4 1З61ЗавтракЗЗакуска4Салат рыбныйЗРыба200.4 1З61ЗавтракЗЗакуска5Паштет из рыбыЗРыба120.5 1З61ЗавтракЗЗакуска6Мясо с гарниромЗМясо250.3 * . . .

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

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

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

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

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

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

ТВБЛТТрапезаВВидБЛБлюдоВОсноваВыход

Труд

1З31ЗавтракЗЗакуска3Салат витаминныйЗОвощи200.4 1З61ЗавтракЗЗакуска6Мясо с гарниромЗМясо250.3 1Г191ЗавтракГГорячее19Омлет с лукомГЯйца200.5 . . . 3Г163УжинГГорячее16ДраченаГЯйца180.4 3Н303УжинННапиток30КомпотНФрукты200.2 3Н313УжинННапиток31Молочный напитокНМолоко200.2

3.2.1 | Содержание | 3.2.3



Содержание раздела