Subqueries lekérdezések belül lekérdezések

(4 választott vonal)

A legkülső lekérdezés kiválasztja a nevét minden szerző. Kérje a következő szint az azonosító számokat az írók, és a legbelső lekérdezés az azonosító számok könyvek PC1035, PC8888 és PC9999.

Ez a kérés is kifejezhető a vegyület használatával:

válasszuk au_lname, au_fname

származó szerző, cím, titleauthor

ahol authors.au_id = titleauthor.au_id

és titles.title_id = titleauthor.title_id

és type = "popular_comp"

Podzaprocy ágyazhatók a módosítás nyilatkozatok (update), eltávolítása (törlése) és betétet (insert), valamint a választás az üzemeltető.

Megjegyzés: Végezze el a következő példák tartalmát megváltoztatni az adatbázis pubs2. Lépjen kapcsolatba a rendszergazdával, hogy megkapja az eredeti példányát az adatbázis.

A következő lekérdezés megduplázza az ár az összes által kiadott könyvek New Age könyvek. Ez a nyilatkozat módosítja az asztal címeket. Arra utal, hogy segédlekérdezésként kiadók asztalra.

meghatározott ár = ár * 2

ahol pub_id a

ahol PUB_NAME = "New Age könyvek")

Egyenértékű módosításai korábbi nyilatkozatát, amely egy vegyületet az alábbiak szerint:

meghatározott ár = ár * 2

címekből, kiadók

ahol titles.pub_id = publishers.pub_id

és PUB_NAME = "New Age könyvek"

minden rekordot értékesítési könyvek, akkor távolítsa el a Business az alábbi beágyazott SELECT utasítást:

ahol címazonosító a

ahol type = "üzleti")

Egyenértékű az előző eltávolítása az üzemeltető kapcsolatot használó, az alábbiak szerint:

re salesdetail, címek

ahol salesdetail.title_id = titles.title_id

és type = „üzleti”

Subqueries is fel lehet használni a feltételes állítások. Előző lekérdezést, amely eltávolítja az összes rekordot az értékesítési könyvek üzleti, átírható a következő, hogy ellenőrizze az ilyen rekordokat megsemmisítés:

ha létezik (válassza címazonosító

ahol type = "üzleti")

ahol címazonosító a

Két alaptípusa subqueries:

· Subqueries előzi módosítatlan összehasonlító művelet, és amely vissza egyetlen értéket, az úgynevezett podzaprosami- kifejezések (skalár subqueries).

· Subqueries hogy visszatérjen értékek listája, és megelőzi a kulcsszót (tartozik), illetve az összehasonlító művelet, a módosított kvantifikátorok minden (egyes) vagy az összes (minden), valamint subqueries, meglétének vizsgálatát a használó kvantifikátorok létezik (léteznek) nevezzük mennyiségileg állítmány subqueries .

Subqueries bármelyik ilyen típusú lehet akár korrelációban (ismétlődő) vagy korrelálatlan.

· Nem korrelált segédlekérdezés lehet számítani, mint egy független kérelmet. Más szavakkal, az eredmények a allekérdezés helyettesítünk a fő állítását (vagy a külső lekérdezés). Ez nem azt jelenti. SQL-szerver pontosan végzi üzemeltetők subqueries. Nekorrelyatsionnye subqueries helyettesíteni lehet egy vegyület és kerül végrehajtásra, mint egy SQL-kiszolgáló kapcsolat.

· A korrelált subqueries nem hajtható végre, mint független kérelmeket, mivel elérheti az adatokat a táblázatban oszlopok listán megjelölt külső kérést. Korrelált subqueries tárgyalja részletesen később ebben a fejezetben.

A következő szakaszok a jelen fejezet tárgyalja a különböző al-lekérdezések.

Allekérdezés expresszió előzi egyik összehasonlító operátorok =. = <>,>,> =, <. <или <= и они имеют следующую общую форму:

[Kiindulási üzemeltető kiválasztása, inszerció, módosítás, törlés vagy allekérdezés]

ahol kikötés operatsiya_sravneniya (segédlekérdezés)

[Vége vállalkozó kiválasztására, insert, update, delete, vagy allekérdezés]

Allekérdezés előzi módosítatlan összehasonlítási műveletben, azaz a összehasonlítás nélküli működés kvantor bármelyik vagy az összes. vissza kell térnie egy értéket. Ellenkező esetben, SQL-Server hibaüzenetet generál.

Ideális esetben használni segédlekérdezésként egy módosítatlan összehasonlító operátor, akkor a felhasználó jól kell ahhoz, hogy tudja a táblázat adatait, és megértsék a probléma természete, az biztos, hogy a allekérdezés ad egy egyedi értéket.

Tegyük fel például, hogy minden egyes megjelenítő található egyetlen városban. Aztán találni írók a városban élő közzéteszi Algodata Infosystems, akkor végre kell hajtania a nyilatkozatot segédlekérdezésként előzi összehasonlítása egyenlőség:

válasszuk au_lname, au_fname

ahol PUB_NAME = "Algodata Infosystems")

A Gourmet Mikrohullámú

De ez Felhasználóbarát?

Secrets of Silicon Valley

Egyenes beszéd a számítógépek

Tudod Combat Stress Computer!

Érzelmi biztonság: Új algoritmus

Az elfoglalt Executive Database Guide

Ötven éve a Buckingham-palota konyhák

Sütés Számítógépek: burkolt mérleg

Számítógépes fóbiás és nem fóbiás Egyének: Viselkedés variációk

Hagyma, póréhagyma, fokhagymás: főzés titkai A Földközi

(Kiválasztott tételek 14)

Minden könyv választotta a külső lekérdezés, a belső lekérdezés listáját kifizetett előlegek a kiadó New Age könyvek. A külső lekérdezés azt állapítjuk meg, hogy van-e ebben a listában az érték kisebb, mint a kifizetett előleg a szóban forgó könyv. Más szóval, ebben a példában keres könyvek előleget nagyobb, mint a legkisebb által fizetett előleg a kiadó New Age könyvek.

Ha a segédlekérdezés nem ad vissza semmilyen értéket, a teljes lekérdezés tekinthető hibásnak.

= Bármilyen módon egyenlő egy bizonyos értéket

válasszuk au_lname, au_fname

ahol city = bármilyen

(Kiválasztott vonal 21)

Ugyanez az eredmény érhető el egy kvantor! = Minden. amely egyenértékű a feltétel nem:

válasszuk au_lname, au_fname

ahol várost! = minden

A feltétel subqueries

ahol pub_id a

ahol type = "üzleti")

(Kiválasztott vonal 2)

Ez a megállapítás értékeljük két lépésben. Az első lépésben a belső lekérdezés számok listáját a kiadók, akik könyveket nyomtatni az üzleti, vagyis a számok 1389 és 0736. A második lépésben ezeket az értékeket behelyettesítjük a külső lekérdezés megtalálni a nevét, a kiadók, a kiadók táblázatban. Ebben a lépésben egy kérés a következő:

ahol pub_id a ( "1389", "0736")

Egy másik módja, hogy adja meg ezt a kérelmet a segédlekérdezés az alábbiak szerint:

ahol „üzleti” a

ahol pub_id = publishers.pub_id)

Megjegyezzük, hogy a kifejezés kulcsszó után, ahol lehet egy állandó vagy egy oszlop neve. Ön is használja más típusú kifejezések, amelyek ott is állandók és az oszlop nevek:

válasszuk külön PUB_NAME

kiadóktól, címek

ahol publishers.pub_id = titles.pub_id

és type = „üzleti”

Mivel ezt a kérést, és a kérelmet segédlekérdezésként fogja találni a kiadók, akik közzé üzleti könyveket. Mindkettő érvényes és ugyanazt az eredményt, kivéve, hogy az utóbbi szót használja különbözőek. az ismétlések elkerülése végett.

Azonban az egyik előnye, hogy a csatlakozási kérelmet az kérésre segédlekérdezésként, hogy az eredményt el lehet helyezni az adatokat a különböző táblázatok ebben az esetben. Például, hogy eredményeit tartalmazza a könyv vállalkozás nevét, akkor a következő lekérdezés a kapcsolat:

válasszuk PUB_NAME cím

kiadóktól, címek

ahol publishers.pub_id = titles.pub_id

és type = „üzleti”

Algodata Infosystems Az elfoglalt Executive Database Guide

Algodata Infosystems Főzés Számítógépek: burkolt mérleg

New Age könyvekben Combat Computer stressz!

Algodata Infosystems Egyenes beszéd a számítógépek

(4 választott vonal)

válasszuk au_lname, au_fname

ahol az állami = „CA”

ahol royaltyper <30

(Jelölje 1 vonal)

Figyeljük meg, hogy a külső és a belső lekérdezés, meg kell használni több feltételt, ahol záradékot.

A vegyület felhasználása nyilatkozatot a következő:

válasszuk au_lname, au_fname

szerzőktől származó, titleauthor

ahol az állami = „CA”

és authors.au_id = titleauthor.au_id

és royaltyper <30

A vegyület lehet mindig kifejezte allekérdezés. Allekérdezés is gyakran kifejezve a vegyület.

Subqueries a notin állapot

Subqueries, amely megelőzi a legfontosabb fogalmakat nem (sem) is visszatér egy listát nulla vagy több értéket. Ez a kifejezés azt jelenti „és nem és nem és nem.”

Az alábbi lekérdezés megkeresi a nevét kiadók, akik nem tesznek közzé üzleti könyveket, vagyis kérni visszatérés kérelmet tárgyalt elején az előző részben.

válassza PUB_NAME a kiadóktól

ahol pub_id nem

ahol type = "üzleti")

Binnet Hardley

(Jelölje 1 vonal)

Azzal a feltétellel, alkérdéseket notin, amely NULL

Allekérdezés előzte nem. visszaadja értékek listája soronként külső igény. Ha az érték a meghatározott területen a külső lekérdezés nem szerepel a listán, nem a kifejezést értelmezzük igaz (TRUE), valamint a külső lekérdezés hozza a rekordot figyelembe a kapott listát.

Azonban, ha a lista visszaadott értékek belső kérés (segédlekérdezésként) nem tartalmazza ezt az értéket, de tartalmazza a null értéket NULL, a feltételeket nem értelmezhető úgy, mint logikailag határozatlan (ismeretlen), mivel ebben az esetben lehetetlen pontosan operedelit tartozó megadott érték a visszaadott lista. Ebben az esetben a külső kérelem nem kitérnie a vonal (rekord), hogy a lekérdezés eredményét.

Hadd illusztráljam ezt a következő példa segítségével a pubs2 adatbázisban:

ahol a $ 100.00 nem

ahol titles.pub_id = publishers.pub_id)

(Kiválasztott vonal 2)

Ahhoz, hogy megértsük a teljesítménye a lekérdezés, úgy a sorrendben a nevét minden kiadó. Legyen szó akár a allekérdezés legalább egy sor azonos név? Más szóval, hogy a fennállásának ellenőrzését az igaz (TRUE)?

Ennek eredményeként az előző kérés a második helyen megjelölt közzétételi Algodata Inforsystems, ami egy azonosító számot 1389. Van legalább egy sort a címek táblázatban. amelyben a mező értéke pub_id 1389 és a mező értékét a típus „üzleti”? Ha igen, akkor a kiadó „Algodata Inforsystems” kéne az eredményt. Az ilyen ellenőrzést végezni minden kiadó.

Allekérdezés előzi egzisztenciális kvantor létezik. Úgy, mint más subqueries következő tulajdonságokkal rendelkezik:

· Mielőtt a kulcsszó nem kell oszlop nevek, állandók, vagy más kifejezéseket.

· Allekérdezés az egzisztenciális kvantor visszatér igaz vagy hamis, és nem ad vissza adatokat a táblázatban.

· A kiválasztási lista a segédlekérdezés gyakran áll egy csillag (*). Nincs szükség, hogy meghatározza oszlop nevét, mert elvégzett egy meglétének ellenőrzése a sorok, amelyek megfelelnek a feltételeknek az segédlekérdezés. És akkor egyértelműen meg kell határozni a kiválasztási lista, követve a szokásos szabályokat.

A kulcsszó létezik, nagyon fontos, mert gyakran nincs alternatív módja, válasszuk adatokat anélkül allekérdezés. Subqueries hogy megelőzi egy kvantor létezik mindig korrelál subqueries (lásd. „A korrelált subqueries).

Mint már említettük, néhány kéréseket az egzisztenciális kvantor nem lehet kifejezni bármilyen más módon, de valamennyi kérelmet az állapot, vagy egy összehasonlító operátor, kiegészítve egy kvantor, vagy ezek bármely. fejezhető allekérdezés létezik. Az alábbiakban néhány példát az üzemeltetők létezik számszerűsített és egyenértékű alternatív átalakulhatnak.

válasszuk au_lname, au_fname

válasszuk au_lname, au_fname

Megtaláljuk a kereszteződés, és a különbség a készletek keresztül létezik

Subqueries megelőzte kvantifikátorok létezik és nem létezik. Ezt fel lehet használni, hogy végre két műveletet meghatározza: kereszteződést, és a különbség. A kereszteződés két elemekből áll tartozó mindkét sorozatban. A különbség az elemek tartoznak csak az első szettet.

válasszuk külön város

ahol authors.city = publishers.city)

(Jelölje 1 vonal)

válasszuk külön város

ahol nem létezik

ahol authors.city = publishers.city)

del Castillo Innes

(Kiválasztott sorok 9)

Ezzel szemben a legtöbb korábban tárgyalt példák segédlekérdezés ebben az esetben kell számítani független a fő lekérdezés. Ez használ az értéket authors.au_id. ami változó, és függ a sor, hogy az SQL Server véli szerzők tábla.

Nézzük meg, hogyan kell kiszámítani egy korábbi kérelem. Első-SQL vizsgál minden sorban a szerzők asztalra, és hogy megtudja, melyik közülük szerepelnie kell az eredményeket, elküldi a megfelelő értéket a belső alkérést. Tegyük fel például,-SQL beolvassa húr megfelelő Cheryl Carson. Azonosítója (authors.au_id) a „238-95-7766”, így ez az érték behelyettesítjük a belső kereslet:

ahol au_id = "238-95-7766"

Az eredmény a szám 100, de ebben az esetben a külső lekérdezés a következőképpen fog kinézni:

válasszuk au_lname, au_fname

100, ahol a (100)

Korrelált Allekérdezés megtalálja a típusú könyv, hogy közzé több kiadók:

válasszuk külön t1.type

Kapcsolódó cikkek