A Structured Query Language (SQL)

3. fejezet lekérdezések több asztalt

A beágyazott segédlekérdezés - segédlekérdezésként zárójelbe és zárt WHERE (SZEM), a mondat SELECT vagy más javaslatot, hogy használja a WHERE záradékot. A beágyazott segédlekérdezés tartalmazhat, annak AHOL (RENDELKEZŐ) belépési másik beágyazott segédlekérdezés stb Megjósolható, beágyazott segédlekérdezés létre, amikor kiválasztja Táblázatsorok által alkotott fő lekérdezés jönne az adatokat a másik asztal (például a kiválasztási menü ételek használni az adatokat a termékek jelenléte a raktárban nyugdíj).

Vannak egyszerű és korrelált subqueries beágyazott. Ezeket tartalmazza a WHERE (HAVING) jéghelyzetben segítségével az IN, EXISTS, vagy az egyik feltételei összehasonlítás (= | <> | <| <= |> |> =). Egyszerű Beágyazott subqueries "bottom-up" obrabatyvayutya rendszert. Az első folyamat beágyazott segédlekérdezés legalacsonyabb szintre. A beállított értékek a végrehajtásból eredő, implementálására magasabb szintű segédlekérdezés stb

Lekérdezések beágyazott korrelált subqueries a rendszer által feldolgozható fordított sorrendben. Először is, az első sorban a munkalap van kijelölve, a létrehozott alap kérés kiválasztott és az értékek az oszlopok amelyeket egy beágyazott allekérdezésben (subqueries beágyazott). Ha ezek az értékek megfelelnek a feltételek egy beágyazott allekérdezés, a kiválasztott vonal tartalmazza az eredmény. Ezután kiválaszt egy második sort, stb amíg az eredmény nem az összes sort illő beágyazott allekérdezés lehetnek benne (subqueries beágyazott szekvencia).

Meg kell jegyezni, hogy az SQL magas redundanciát az értelemben, hogy gyakran biztosít számos különböző módon, hogy a szövege azonos lekérdezés. Ezért sok példát ebben a fejezetben kerül felhasználásra már ismerős számunkra az előző fejezetben, a fogalmi megfogalmazása kéri. És annak ellenére, hogy néhány közülük sikeresen megvalósított segítségével kapcsolatot, akkor is ott van a saját beállítások használata beágyazott subqueries. Ez annak köszönhető, hogy meg kell vizsgálni a részletes elvének létrehozása és végrehajtása subqueries beágyazott, mivel sok probléma (különösen a leszerelés és az adatváltozás), amely nem valósítható meg más módon. Ezen túlmenően, a különböző készítmények azonos lekérdezési szüksége teljesítményük különböző memória-erőforrásokat, és nagyban végrehajtásának időben különböző DBMS.

Egyszerű beágyazott subqueries használnak az egy értékrend, tanulmányt kell végezni minden predikátum, amely szemlélteti a következő példa: adja meg a nevét és állapotát a termék szolgáltatók száma 11, azaz paradicsom.

SELECT név, állapot
beszállítóktól
Ahol PS
(SELECT PS
AZ kellékek
Ahol Pr = 11);

Mint azt megjegyezte p.3.3.1. feldolgozásának teljes lekérdező rendszer végzi elsősorban beágyazott segédlekérdezés. Ez termel több szállítók segédlekérdezés számok, hogy a kínálat a termék kódú PR = 11, vagyis a beállított (1, 5, 6, 8). Ezért az eredeti kérelem megfelel egy ilyen egyszerű kérés:

SELECT név, állapot
beszállítóktól
Ps IN (1, 5, 6, 8);

Allekérdezés többszintű egymásba lehet szemléltetni ugyanazt a példát. Tegyük fel, hogy szeretné megtalálni a szállítók a termék nem 11, mint ahogy az előző vizsgálatok és a beszállítók paradicsom a termék a 11-es számú Ehhez akkor adja meg a nyomozás

SELECT név, állapot
beszállítóktól
Ahol PS
(SELECT PS
AZ kellékek
Ahol PR
(SELECT PR
termékekből
Ahol a termék = 'paradicsom'));

Ebben az esetben az eredmény a legbelső segédlekérdezés csak egy érték (11). Amint az előzőekben már említettük, segédlekérdezésként következő szint az lesz az eredménye egy sor (1, 5, 6, 8). Az utolsó, a legkülső a SELECT, kiszámítja a fenti végeredményt. Általánosan engedélyezett bármely mélységben összetapadásának subqueries.

Ugyanezt az eredményt alkalmazásával állíthatjuk elő a vegyületet

SELECT név, állapot
Beszállítóktól, kellékek, Food
AHOL Postavschiki.PS = Postavki.PS
ÉS Postavki.PR = Produkty.PR
És a termék = „Paradicsom”;

Ha ezt a kérést kompakt rendszer egyszerre kell feldolgozni az adatokat a három asztal, míg az előző példában, ezek a táblák kezelik sorozatban. Természetesen azok végrehajtásának tebuyutsya különböző memória erőforrások és idő, de lehetetlen, hogy úgy érzi, ha dolgozik korlátozott mennyiségű adat a példaként alaplap.

Kiadja a beszállítók száma, akik a kínálat legalább egy termék, amely szállító 6.

KIVÁLASZTOTT KÜLÖNÁLLÓ PS
AZ kellékek
Ahol PR
(SELECT PR
AZ kellékek
Ps = 6);

SELECT DISTINCT X.PS
AZ kellékek X
Ahol X.PR
(SELECT Y.PR
Ellátási Y
AHOL Y.PS = 6);

Itt, X és Y - tetszőleges fedőnevek szállítások meghatározott FROM záradék, és ezt használjuk explicit selejtező kifejezések SELECT és hol. Emlékezzünk vissza, hogy álnevek vannak definiálva csak egyetlen kérelmet.

Kiadja a beszállítók száma, akik ugyanabban a városban, mint az eladó a 6-os szám.

SELECT PS
beszállítóktól
WHERE Város =
(SELECT város
beszállítóktól
Ps = 6);

és egyéb összehasonlító operátorokkal lehet használni hasonló kérések (<>, <=, <,>= Vagy>), azonban, ha a beágyazott allekérdezés egynél több értéket, és nem használják üzemben, egy hibaüzenet jelenik meg.

Adja ki a nevét és állapotát a termék szolgáltatók száma 11.

SELECT név, állapot
beszállítóktól
HOL 11
(SELECT PR
AZ kellékek
Ps = Postavschiki.PS);

Ilyen segédlekérdezésként eltér tárgyalt 3.3.2 hogy beágyazott segédlekérdezés nem lehet feldolgozni, mielőtt lehet feldolgozni külső segédlekérdezés. Ez azért van így, hogy a beágyazott allekérdezés értékétől függ Postavschiki.PS és ez megváltoztatja a rendszer ellenőrzi a különböző táblázat sorait beszállítóknak. Ezért, fogalmi szempontból a feldolgozás a következőképpen végezzük:

A rendszer ellenőrzi az első sorban a táblázat szolgáltatók. Tegyük fel, hogy a vonal szolgáltató száma 1. Ekkor az érték Postavschiki.PS jelenleg értéke 1, és a rendszer kezeli a belső lekérdezés

(SELECT PR
AZ kellékek
AHOL SS = 1);

így több (9, 11, 12, 15). Most a rendszer teljes feldolgozása a beszállító az 1-es szám minta értékeket a nevét és állapotát az SS = 1 (tápláló és piaci) kerül sor akkor, ha a PR = 11 fog tartozik ebbe a körbe, ami nyilvánvalóan igaz.

  • Ezután a rendszer megismétli a folyamatot ez a fajta a következő gyártókat stb addig, amíg az összes táblázat sorai a Szállítók kell tekinteni.
  • <





    ?php include ($ _SERVER [ "DOCUMENT_ROOT"] "/ vstavki / blokvtext2.html".); ?>

    Ezek az úgynevezett korreláltak al-lekérdezések, mivel az eredmények függenek a meghatározott értékek a külső allekérdezés. Feldolgozás korrelált segédlekérdezés ezért kell ismételni minden egyes értéket kivonjuk a külső allekérdezés helyett egyszer kell elvégezni, és az összes.

    Tekintsük a példa a használatára az azonos táblázat a külső subselect és korrelált beágyazott segédlekérdezés.

    Kiadja számos termék kapható egyetlen stavschikom.

    SELECT DISTINCT X.PR
    AZ kellékek X
    HOL NEM X.PR
    (SELECT Y.PR
    Ellátási Y
    AHOL Y.PS <> X.PS);

    Az akció ez a kérelem az alábbi példákkal illusztráljuk: „felváltva minden sorban a táblázat Supplies, mondjuk X, a terméket izoláljuk számérték (OL), ha, és csak akkor, ha az érték nem szerepel a bizonyos vonalat, mondjuk, Y, ugyanazt a táblázatot, és a értéke oszlop szállító száma (PS) a sorban Y nem azonos értékére a vonalon X”.

    Megjegyezzük, hogy legalább egy alias kell használni ezt a készítményt - sem X, vagy Y

    Kvantor nem létezik (van) - egy olyan fogalom kölcsönzött formális logika. A SQL, állítmányként egy egzisztenciális kvantor által képviselt expressziós létezik (SELECT * FROM.).

    Egy ilyen kifejezést tartják csak akkor igaz, ha a számítás eredményét „SELECT * FROM”. Egy nem üres halmaz, azaz ha van olyan bejegyzés a táblázatban megadott FROM kifejezés a allekérdezés amely kielégíti WHERE segédlekérdezés. (A gyakorlatban ez mindig korrelál segédlekérdezés set.)

    Tekintsük a példát. Adja ki a nevét, a szállítók, akik ellátása termék a 11-es szám.

    SELECT név
    beszállítóktól
    HOL VAN
    (SELECT *
    AZ kellékek
    AHOL SS = Postavschiki.PS
    ÉS PR = 11);

    A rendszer egymás után kiválasztja a táblázat sorait Szállítók, megkülönbözteti őket az oszlop értékeit és a PC nevét, majd ellenőrzi, hogy a valódi állapot fennállásának, vagyis sous-feloldjuk tábla létezik szállítások legalább egy karakterlánc értéke WP = 11 és SS-értéke egyenlő az érték a PS, táblázatból kiválasztott Szállítók. Ha ez a feltétel teljesül, akkor az érték az oszlop neve szerepel az eredmény.

    Tegyük fel, hogy az első érték mezőket neve és SS rendre „kielégítő” és 1. táblázat szerinti tápvonal van egy PR = 11 és SS = 1, a értéke „kielégítő” fel kell venni az eredmény.

    Noha ebben a példában csak azt mutatja, az első módszer egy lekérdezést készítményt a megoldandó probléma más módon (használva IN operátor vagy vegyületek), EXISTS jelenti az egyik legfontosabb jellemzője az SQL. Valójában bármely kérést, amely kifejezett keresztül IN, is formulázhatók egy alternatív módon használó létezik. Azonban az ellenkezője kijelentés igazságtalan.

    Adja ki a nevét, és állapotát a szállítók nem szállítani a terméket a 11-es szám.

    SELECT név, állapot
    beszállítóktól
    HOL NEM létezik
    (SELECT *
    AZ kellékek
    AHOL SS = Postavschiki.PS
    ÉS PR = 11);

    Most, miután ismerkedés különböző készítmények beágyazott al-lekérdezések és alias könnyebb megérteni a szöveget, és a lekérdezés algoritmus végrehajtása (3.1.) Ahhoz, hogy a szállítók Syrnikov élelmiszereket biztosítani ezeket a termékeket alacsonyabb költséggel:

    SELECT termék, ár, név, állapot
    Termékekből, összetevők, Supplies Szállítók
    AHOL Produkty.PR = Sostav.PR
    ÉS Sostav.BL = Blyuda.BL
    ÉS Postavki.PR = Sostav.PR
    ÉS Postavki.PS = Postavschiki.PS
    És tányér = „Cheesecakes”
    És az ár = (SELECT MIN (ár)
    AZ kellékek X
    AHOL X.PR = Postavki.PR);

    Természetesen ez összefügg allekérdezés: van először határozta meg a minimális árat a termék, amely része a Syrnikov, és csak akkor fordul a szállító.

    Ebben a példában fogjuk befejezni ismeretségét beágyazott subqueries, felajánlva, hogy megpróbálja a kezét a kidolgozásában számos megkeresés ilyen subqueries mechanizmus:

    1. Adja ki a nevét, a húsételeket.
    2. Kiad egy számot ételek, amelyek közé tartozik a paradicsom.
    3. Adj ki az élelmiszer-termékek, hogy jön a gazdaság a nyáron.



    Kapcsolódó cikkek