ПредишенСледващото

Глава 3. Заявки с множество таблици

Литературата показва, че съединенията - подмножество на декартовата продукт. Тъй като декартови продукта от п таблици - таблица, съдържаща всички възможни ред R, така че R е всякакво захващащо редове от първата таблица, на втория ред на таблицата. и линията на п-ия маса (както вече са се научили да се прави разлика с изберете някоя подгрупа от релационна таблица), а след това можете да намерите само дали можете да използвате изберете, за да получите най-декартово произведение. За декартово произведение на множество таблици трябва да бъдат посочени в списъка ОТ клауза размножаването им маси, а в SELECT клаузата - всички техни колони.

Така че, това е необходимо да подадат молба за получаване на декартово произведение Vid_blyud и ястия

SELECT Vid_blyud. * Хранене. *
ОТ Vid_blyud, прахове;

Получават маса, съдържаща 5 х 3 = 15 реда:

Хранене. Изберете Меню. * * Vid_blyud. * Храна. *
От менюто ястия, Vid_blyud, ястия;

маса, образувана (фигура 3.1), съдържащ 21 х 3 х 5 х 33 = 10395 линии.

От първите 39 реда от таблицата, само две ток (с надпис "*"): те са един и същ номер на меню ястия маса и ястия. В друга - е пълна глупост: с предястия, приписвани супи и напитки по време на закуска непланирана супа и т.н.

Ако от декартово произведение да премахнете нежелани редове и колони, то е възможно да се получат най-добри маси, съответстващи на всяко едно от съединенията.

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

Очевидно е, че реалните линии за подбор, предвидени в искането за вход, който установява, КЪДЕТО тип съвпадение между:

  • ястия кодове (T) в таблиците и менюто на маса (Menyu.T = Trapezy.T)
  • Кодове видове ястия (В) в менюто таблица и Vid_blyud (Menyu.V = Vid_blyud.V)
  • номера ястия (BL) в таблиците и менюто ястия (Menyu.BL = Blyuda.BL).

Такова искане се коригира

Хранене. Изберете Меню. * * Vid_blyud. * Храна. *
От менюто ястия, Vid_blyud, Ястия
КЪДЕТО Menyu.T = Trapezy.T
И Menyu.V = Vid_blyud.V
И Menyu.BL = Blyuda.BL;

ще осигури оборудване за ко-менюто за присъединяване към маса, хранене Vid_blyud и ястия:

Месо със зеленчуци

Лесно е да се забележи, че в опа-присъединят таблици, включени дублиращи се колони, за които най-съединение (Т, Б и PB). можете да създадете естествен връзка на една маса за изключване на дубликати:

SELECT Т, В, PB, брашно, тип ястие база, добив, труда
От менюто ястия, Vid_blyud, Ястия
КЪДЕТО Menyu.T = Trapezy.T
И Menyu.V = Vid_blyud.V
И Menyu.BL = Blyuda.BL;

Изпълнение маси природен съединение има формата

Месо със зеленчуци

За да изключите всички колони, които извършват масата за връзка, трябва да се създаде една песен

SELECT хранене, View, Dish, Base, Out, Работа
От менюто ястия, Vid_blyud, Ястия
КЪДЕТО Menyu.T = Trapezy.T
И Menyu.V = Vid_blyud.V
И Menyu.BL = Blyuda.BL;

Месо със зеленчуци

В БОРДА база данни е трудно да се намери един прост пример, илюстриращ таблици връзка тета. Следователно такава конструкция скалъпен поискване:

SELECT Vid_blyud. * Хранене. *
ОТ Vid_blyud, Храна
КЪДЕ View> хранене;

което позволява да се избере от съединението, получено в раздел 3.2.1 от таблиците на декартови продукти Vid_blyud брашно и само тези редове, където храната на "по-малко от" (индекс) стойности образуват ястия

избиране на съответната съединение редове (КОГАТО израза), подредбата на резултата (РЕД ОТ израза) и данните за агрегация (SQL функции и група чрез израза): лист, приложими за които всички операции, дискутирани в глава 2 се генерират при формиране съединение.

Например, за списък на храни, предлагани в менюто за закуска, е възможно да се образуват заявка въз основа на състава (3.2.4.):

SELECT View, Dish, Base, Out ", не -" BC
От менюто ястия, Vid_blyud, Ястия
КЪДЕТО Menyu.T = Trapezy.T
И Menyu.V = Vid_blyud.V
И Menyu.BL = Blyuda.BL
Грис = 'закуска';

Месо със зеленчуци

В параграф 3.6 може да се намери по-скоро с пълен пример маси връзка с различни допълнителни фрази.

В някои приложения е необходимо за едновременна обработка на една маса и един или повече от своите копия, създадени по време на искането.

Например, когато създавате списъци на учениците (Таблица Студентите) може да въведете отново данните на всеки студент от него присвояване на втория въпрос за водене на книга. За да се открият такива грешки могат да се присъединят към една маса с учениците си временно копие на съответната настройка клауза WHERE равенство на стойностите на всички колоните на таблиците на едно и също име, с изключение на колоната с рекордния брой книги на (за последното е необходимо да се определят стойностите на състоянието на неравенство).

А временно копие на таблицата може да се генерира, като посочите името на псевдонима за името на таблицата в ОТ клауза. Например, използвайки фрази

От храната X, Fast Y, Z храните

три копия на таблицата ще се формират Ястия с имена на X, Y и Z.

Като пример, таблица съединение да се образува заявка оттегляне такива двойки Съдове таблици което минава основа и името на първата двойка малки хранения (индекс) от броя на втората двойка ястия. За да направите това, можете да създадете заявка с по едно копие от ястия маса (копие):

SELECT Dish Kopiya.Blyudo, Основа
ОТ ястия, да копирате
КЪДЕТО База = Kopiya.Osnova
И Dish <Копия.Блюдо;

или две копия на своята (първи и втори):

SELECT Pervaya.Blyudo, Vtoraya.Blyudo, Основа
ОТ Ястия първо, второ курсове
КЪДЕТО Pervaya.Osnova = Vtoraya.Osnova
И Pervaya.Blyudo <Вторая.Блюдо;

Подкрепете проекта - споделете линка, благодаря!