A strukturált lekérdező nyelv (sql)

3. fejezet Több táblázatot használó lekérdezések

A szakirodalomban kimutatták, hogy a vegyületek egy Descartes termék egy részhalmazai. Mivel az n táblázatok karteziai terméke az összes lehetséges r vonalat tartalmazó táblázat, így r az első táblázat bármely sorának koherenciája, a második táblázat sorja. és a sort az n-edik asztal (ahogy azt már megtanulta megkülönböztetni a SELECT bármely részhalmaza egy relációs tábla), akkor csak megtudni, hogy akkor a SELECT, hogy a Descartes-szorzat. A Descartes-szorzat a több asztal meg kell határozni a FROM záradék listája megsokszorozott asztalok, és a SELECT záradék - minden oszlopot.

Tehát a Descartes és Ételek Descartes termékének beszerzéséhez kérdést kell kiadnia

SELECT nézet *, Étel. *
FROM Видь_блюд, Трапезы;

Megkapunk egy táblázatot, amely 5 x 3 = 15 sorból áll:

SELECT menü. *, Étkezés. *, View_Special *, ételek. *
Menüből, Étkezés, View_Blood, ételek;

egy táblát hozunk létre (3.1 ábra), amely 21 x 3 x 5 x 33 = 10 395 sorot tartalmaz.

A táblázat első 39 sorából csak két aktuális ("*" jelzéssel): ezek egybeesnek a Menük és ételek táblázatainak ételszámával. A többi - teljes ostobaság: ételek tartalmaznak italokat és levest, a reggeli nem tervezett leves, stb.

Ha eltávolít egy felesleges sorokat és oszlopokat egy Descartes termékből, akkor az adott egységekhez tartozó tényleges táblázatokat kaphatja meg.

Ábra. 3.1. A Descartes termékének ábrája

Nyilvánvaló, hogy a tényleges sorok kiválasztása a kifejezés WHERE mondatának megadásával történik, amelyben a levelezés között létrejön a levelezés:

  • az ételek kódja (T) a Menü és Étkezés táblázatban (Menu.Т = Étkezés .Т),
  • az ételek típusának kódjait (B) a Menü és a View_Bad (Menu.V = View_Bad.V)
  • ételszám (BL) a Menü és ételek táblázataiban (Menu.БЛ = Блюда.БЛ).

Egy ilyen beállított lekérdezés

SELECT menü. *, Étkezés. *, View_Special *, ételek. *
Menüből, Étkezés, View_Blood, ételek
WHERE Menu.T = Étkezés .T
ÉS Menü.
AND Menü.BL = Tészták.BL;

lehetővé teszi számodra, hogy a táblák menüjét, ételeit, nézegetéseit és ételeit egyenlővé tegye:

Hús, körettel

Könnyű észrevenni, hogy az egyenlő oszlopok kettős oszlopokat tartalmaznak, amelyeken a kapcsolat létrejött (T, B és BL). A duplikátumok kizárásához létrehozhat ugyanazon táblák természetes csatlakozását:

SELECT T, B, BL, Étkezés, nézet, Dish, Basis, Exit, Work
Menüből, Étkezés, View_Blood, ételek
WHERE Menu.T = Étkezés .T
ÉS Menü.
AND Menü.BL = Tészták.BL;

A táblák természetes csatlakozásának megvalósítása a formában van

Hús, körettel

Az összes olyan oszlop kizárásához, amelyhez az asztalok csatlakoznak, létre kell hoznia egy kompozíciót

SELECT Étel, nézet, tál, alap, kilépés, munka
Menüből, Étkezés, View_Blood, ételek
WHERE Menu.T = Étkezés .T
ÉS Menü.
AND Menü.BL = Tészták.BL;

Hús, körettel

Az adatbázisban nehéz találni egy egyszerű példát, amely illusztrálja a theta kapcsolatot táblákat. Ezért olyan messzire várt kérést fogunk készíteni:

SELECT nézet *, Étel. *
FROM View_Blood, Étkezés
WHERE Típus> Étkezés;

amely lehetővé teszi, hogy válasszon a kapott vegyület a 3.2.1 a Descartes-szorzat Vid_blyud Étkezési táblázatok és csak azokat a sorokat, ahol az étkezés a „kisebb mint” (ABC) értékek képezik ételek

kiválasztásával érintett sorokban vegyületet (ahol kifejezés), a rendelési az eredmény (ORDER BY kifejezés), és az aggregációs adatok (SQL-funkciót, és GROUP BY kifejezés): munkalap, alkalmazható, amely az összes műveletet a 2. fejezetben bemutattuk akkor keletkezik, ha a sóképző vegyületet.

Például, ha a menüben felajánlott ételeket szeretnénk reggelizni, a kérelem alapján összeállíthatunk egy összetételt (3.2.4. Bekezdés):

SELECT nézet, Dish, Basis, Exit, 'Number -', BL
Menüből, Étkezés, View_Blood, ételek
WHERE Menu.T = Étkezés .T
ÉS Menü.
AND Menu.BL = Díszek.BL
ÉS Étkezés = "Reggeli";

Hús, körettel

A 3.6 bekezdésben megismerkedhet egy meglehetősen teljes példával az asztalok összekapcsolására különböző kiegészítő kifejezésekkel.

Számos alkalmazásban szükségessé válik egy táblázat adatainak egyidejű feldolgozása és a lekérdezés végrehajtásakor létrehozott egy vagy több példánya.

Például ha létre listákat hallgatók (táblázat A hallgatók) újra meg kell adnia adatait minden diák hozzárendelésével neki a második kérdés a rekord-book. Ahhoz, hogy felismerik az ilyen hibák is csatlakozhat egy asztal diákjai ideiglenes másolatot a beállítást a WHERE egyenlőség értékeinek az összes oszlopot A táblák az azonos nevű, kivéve az oszlop a rekord-book számát (ez utóbbit a szükséges beállítani az értékeket a feltétele egyenlőtlenség).

A tábla ideiglenes másolatát úgy hozhatja létre, hogy megadja az alias nevét a táblázat neve után a FROM szakaszból. Tehát a kifejezés segítségével

FROM Dish X, Y ételek, Z

három, az X, Y és Z névvel rendelkező Dish asztal három példányát alakítják ki.

Például, a vegyület asztal maga alkotnak a lehívást ilyen pár Edények táblázatok amely egybeesik alapján, és a neve az első pár kisebb étkezést (ABC), mint a szám a második pár ételeket. Ehhez létrehozhat egy lekérdezést a Dish Table (Cc) egy példányával:

SELECT Dish, Copy.Dish, Basis
AZ ételekből, ételek másolása
WHERE alap = másolás
ÉS Dish <Копия.Блюдо;

vagy annak két példánya (első és második):

KIVÁLASZTJA az Elsõt, a Második sütõt, a Bázist
AZ első edényekből, ételek A második
WHERE First.Base = Second.Found
ÉS Első Dish <Вторая.Блюдо;