-SQL, subqueries kapcsolatos
Subqueries röviden a cikkben tárgyalt subqueries és ideiglenes táblák. Itt vesszük szemügyre a fajta kapcsolódó al-lekérdezések. Segédlekérdezés úgynevezett társult (korrelált). ha bármilyen értéket segédlekérdezés függ a külső kérésre. A következő példa szemlélteti a használata egy korrelált allekérdezés:
Ebben a példában egy beágyazott lekérdezés logikusan kell hajtani többször, hiszen egy-egy oszlop Id, amely tartozik a Munkavállalói táblázat a külső lekérdezés, és az oszlop értéke Id megváltozik minden alkalommal külön sorban van jelölve Alkalmazott táblázat a külső lekérdezés.
Nézzük, hogy a rendszer képes végrehajtani a kérelmet ebben a példában. A rendszer először kiválaszt egy első sorban Alkalmazott táblázat (külső kérésre), és összehasonlítja a munkavállaló személyi számát ebben az oszlopban (25348) A oszlop értékeit Works_on.EmpId segédlekérdezés. Ami ezt a munkavállaló csak egyetlen értéket elérő ProjectNumber p2, p2 beágyazott lekérdezés visszaadja az értéket. Ez az egyetlen érték segédlekérdezés eredmény meg nem egyenlő a P3 a külső lekérdezés, a külső lekérdezés feltétel (ahol a „p3” IN.) Nem teljesül, és ezért a külső lekérdezés nem ad vissza sorokat erre alkalmazottja.
A rendszer ezután veszi fel a következő sort a Munkavállaló asztalra, és újra le a foglalkoztatottak száma mindkét táblában. Ehhez Works_on sorban táblázatban van két sor, amelynek az értéke egyenlő ProjectNumber P1 és P3, ill. Következésképpen beágyazott lekérdezés eredményét adja vissza P1 és P3. Az érték az egyik eleme az eredmény beállított állandó P3, ezért a feltétel teljesül, és megjeleníti a értéke a második LastName oszlop vonal ( „Frolov„). Az azonos feldolgozási vetjük alá az összes többi Alkalmazott táblázat sor, és a végeredmény kerül visszaadásra a három sor.
A következő szakasz további példákat korrelált subqueries.
Subqueries és LÉTEZIK funkció
EXISTS segédlekérdezés függvény paraméterként, és visszaadja az értéket false, ha a lekérdezés beágyazott sorok és a valódi érték egyébként. Tekintsük a teljesítménye ezt a funkciót néhány példát, kezdve a következő példa:
Ebben a példában van egy minta nevét minden alkalmazottak, akik dolgoznak a projekt p1. Allekérdezés LÉTEZIK funkció szinte mindig attól függ, hogy a változó külső kérésre. Ennélfogva fennáll funkciót általában meghatározza, korrelált allekérdezés.
Nézzük meg, hogyan Database Engine képes kezelni a kérelmet ebben a példában. Első külső kérésre tartja az első sorban Alkalmazott táblázat (Frolov Officer). Következő LÉTEZIK funkció határozza meg, hogy van-e vonal Works_on tábla, amelynek az alkalmazottak száma az azonos alkalmazotti létszám az aktuális sorban a külső lekérdezés, és amelynek ProjectNumber van p1. Mivel Frolov munkavállaló nem dolgozik a projekten p1, beágyazott lekérdezés üres halmaz úgy, hogy a EXISTS függvény false. Így a munkavállaló Frolov nem szerepelnek a végeredmény készlet. Ez a folyamat vetettük alá minden Alkalmazott táblázat sor, majd a kimeneti a végső eredmény meg.
A következő példa bemutatja, hogyan kell használni a funkciókat NEM létezik.
Ebben a példában van egy minta munkavállaló nevét, akinek a részleg nem Budapesten található.
A lista a SELECT kiválasztás a külső lekérdezés EXISTS funkció nem kell feltétlenül formájában SELECT *, mint az előző példában. Akkor egy alternatív formája SELECT colum_list, ahol column_list egy listát egy vagy több oszlopot a táblázatban. Mindkét forma egyenértékű, mivel a EXISTS a funkció csak ellenőrzi a jelenlétét (vagy hiányát) a sorok az eredmény készlet. Emiatt ebben az esetben helyes a SELECT * formában.
Hogy a vegyületek alkalmazása vagy a subqueries?
Szinte az összes SELECT, hogy csatlakozzon a táblázat segítségével a kapcsolatot REGISZTRÁCIÓ üzemeltető helyettesítheti segédlekérdezésként utasításokat, és fordítva. A design a SELECT vegyület felhasználásával a kezelő gyakran sokkal kényelmesebb olvasni, és könnyebben érthető, és szintén segítheti a Database Engine találni egy hatékony stratégiát beolvasásakor a szükséges adatokat. De bizonyos feladatok könnyebb megoldás révén subqueries és mások vegyületek felhasználásával.
Az előnyök a subqueries
Subqueries kedvezőbbek lesznek használni olyan esetekben, amikor szükség van rá számítani összesített értéke az „on the fly”, és ez a másik összehasonlításra irányuló kérés. Ez látható az alábbi példában:
Ebben a példában van egy minta a személyzet számát, a munkavállalók és az időpontokat az elején, hogy a projekten (EnterDate) minden ott dolgozó kezdő dátuma a legkorábbi dátum. A probléma megoldására a kapcsolatrendszer segítségével nem lesz könnyű, mert meg kell tennie, hogy tegye a összesítő függvény a WHERE, ami nem megengedett. (Ezt úgy lehet elérni, ha két külön kérésre Works_on kapcsolatban a táblázatban.)
Előnyök kapcsolatok
Felhasználási kapcsolat helyett subqueries kedvezőbb azokban az esetekben, amikor egy listát a SELECT lekérdezés a kiválasztási oszlopokat tartalmaz egynél több táblát. Ez látható az alábbi példában: