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 <Вторая.Блюдо;