Adatok visszakeresése több asztalt

Háttér anyag főbb programozási nyelvek és elrendezését oldalakon.

Ready technika létrehozására egyszerű és összetett dinamikus weboldalak PHP és a MySQL.

fejlesztése weboldalak a „kulcs”.

Fejlődés az egyes töredékek oldalak, tanácsot az elrendezés a weboldalak és web programozás.

Web eszköz

webáruház

webes szolgáltatások

Web Graphics

Web Resources

Adatok visszakeresése több asztalt

Azt szeretnénk, hogy lépést tartsanak a fejlődés zajlik a helyszínen? Jelentkezzen be, hogy a legfrissebb hírek és cikkek.

Nézd a Google

Adatok visszakeresése több asztalt

Adatok visszakeresése több asztalt

Ezek az adatok a különböző táblák, mivel mindig a különböző valós tárgyakat. Ez az egyik a helyes adatbázis tervezés.

Bár első ránézésre a kapcsolat működése nagyon egyszerű, sőt ez az egyik legbonyolultabb és finom aspektusait SQL. Számos különböző típusú vegyületek, amelyek mindegyike egy adott célra realizálódik MySQL.

Egy egyszerű kapcsolat a két asztal

Kezdjük a keresés Vladimir Sidorov:

mysql> select orders.orderid, orders.amount, orders.date
-> A vevők, megrendelések
-> Hol customers.name = 'Vladimir Sidorov'
-> És az ügyfelek. ÜgyfélId = orders.customerid;

Az eredmény:

Kell, hogy csak néhány példát említsünk pont.

Felsorolja a két táblát, nem adja meg a kapcsolat típusát, talán anélkül, hogy tudnának róla. Vessző táblázatok közötti nevek ekvivalens konstrukciók belső összekapcsolás (belső kapcsolat), vagy a határokon REGISZTRÁCIÓ (cross-connect). Ez a fajta kapcsolat neve a teljes vegyület vagy Descartes-szorzat táblázatokat. Ez azt jelenti, a következő :. „mondta Mark táblázatokat, és azokat egyetlen nagy nagy táblázatnak tartalmaznia kell egy sort minden lehetséges kombinációját a sorok az egyes táblázatok a listán, függetlenül attól, hogy van-e értelme vagy sem.” Más szóval, akkor egy táblázat, amelyben minden sorban az ügyfél asztal sopostovlyat megrendelések minden sorban a táblázat nem számít, milyen megbízásokat készítette egyes ügyfelek.

A legtöbb esetben az ilyen kombináció nem sok értelme van. Általános szabály, hogy meg kell vonalakat, amelyek valóban ugyanaz, vagyis, amikor egy adott megbízások megfelelnek az ügyfelek, amelyhez készültek.

Ez úgy érhető el azáltal, hogy a szerkezet egy WHERE csatlakozzon feltételekkel. Ez egy különleges fajta feltételes állítás, amely megmagyarázza, hogy mely attribútumok tükrözik a kapcsolat a két tábla között. Ebben az esetben a feltétel ebben az összefüggésben a következők voltak:

és az ügyfelek. ÜgyfélId = orders.customerid

MySQL, amely arra utasítja, hogy az eredmény táblázatban csak azokat a sorokat, amelyek ügyfélId az ügyfél asztal egybeesik ügyfélId megrendelések asztalra.

Így a feltétele annak, hogy a lekérdezést, mi, sőt, kapott egy másik típusú kapcsolatot -os csatlakozással az egyenlőség.

Megjegyzés: a dot jelölést, amit használnak, hogy tisztázzák az adott oszlop egy külön táblázat. Így customers.customerid utal oszlopon ügyfélId ügyfelek asztal, egy orders.customerid - ügyfélId oszlopra megrendelések asztalra.

A dot jelölés van szükség, ha az oszlop nevek nem egyértelműek, mi történik, ha az azonos nevű megjelenik több táblában.

Mivel lehet használni megkülönböztetésére terjeszkedés oszlop nevét a különböző adatbázisokban. A mi példánkban úgy tűnik, kijelölés table.column (table.column). Megadhat egy másik módja - database.table.column (baza_dannyh.tablitsa.stolbets), például, hogy ellenőrizze a feltételek, mint például:

Másrészt, a pont jelölést fel lehet használni az összes utalást, hogy az oszlopok a lekérdezés. Ez gyakran megszünteti a fejfájást, különösen, ha a kérés egyre összetettebb. MySQL nem írja elő, de hasznos olvasható lekérdezések - ez nem is olyan rossz. Ha azt veszi észre, akkor tartsák be ezt az elvet minden példát, hogy legalább, hogy egy ilyen feltétel:

ügyfelek. name = 'Vladimir Sidorov'

Az oszlop értéke csak jelen a vásárlók asztalra, így nem szükséges meghatározni, de, de, általában ez érthető.

Vegyület három vagy több táblából

Vegyület többtáblás nem bonyolult csatlakozott két asztal. A fő szabály - meg kell párosítani az asztalra, mivel a feltételek egyesület. Ezt is képviselteti magát a táblák közötti kapcsolatok minden ilyen pár.

Például, ha azt szeretnénk, hogy megtudja, melyik ügyfél megrendelt egy könyvet a fejlesztési weboldalak PHP és a MySQL, meg kell nyomon követni ezeket a kapcsolatokat egy kis számú asztallal.

Meg kell találni az ügyfelek, akik elhelyezett legalább egy rendelést, amely a megfelelő order_items könyv készült, amely a honlap a PHP és a MySQL. Táblázatból sustomers beköltözött rendelések táblát ügyfélId, mint az előző esetben. megrendeléseket a táblázat order_items táblázat segítségével rendelésazonosító. Tól order_items - a könyvek táblázatban a kívánt könyv, Guided szám ISBN. Miután az összes kapcsolat jön létre, akkor kér egy könyvet a „Design” a címben és kap egy eredményt az ügyfél nevét, hogy vásárolt ezeket a könyveket.

Nézzük meg a kérést, az alábbi lépésekkel:

mysql> select customers.name
-> A vevők, megrendelések, order_items, könyvek
-> Amennyiben customers.customerid = orders.customerid
-> És orders.orderid = order_items.orderid
-> És order_items.isbn = books.isbn
-> És books.title like '% Fejlődő%';

Ez lekérdezés a következő eredménnyel:

Felhívjuk figyelmét, hogy az adatokat egy lánctalpas négy különböző táblák, és hogy ezt a kombinációt tőke, azt három különböző betegség az egyesület. Jellemzően minden egyes pár táblázatok egyike szükséges összekapcsolási feltétel, így a számos feltétel kombináció eggyel kisebb szám összekapcsolt táblák. Ez szabály hasznos lehet hibakeresés lekérdezések munka instabil. Ellenőrizze a szövetségek és a körülmények, győződjön meg róla, hogy mindig követni a tervezett útvonal, amit már tudja - az a tény, hogy meg kell tudni.

Keresése adatátviteli vonalak

Egy másik gyakori típusa a kapcsolatot Mysql - bal oldali csatlakozás.

Az előző példák kiválasztott csak azokat a vonalakat, ahol volt egy levelezés az asztalok között. De lehet szükség, és a sort, amelyben a vonal hiányzik. Például, meg kell találni az ügyfelek, akik nem egyetlen parancs, vagy könyveket, amelyek nem tesznek egy rendezett.

A legegyszerűbb válasz erre a kérdésre a bal oldali Mysql használatával jár a vegyületet, amelyet keresett húrok megadott feltétel csatlakozott két asztal. Ha a jobb oldalon az említett táblázat nincsenek megfelelő sor kerül hozzáadásra az eredmény a sor nulla értékek a megfelelő oszlopokban.

mysql> select ügyfelek. ügyfélId, customers.name, megrendeléseket. rendelésazonosító
-> Ügyfelektől bal csatlakozzon rendelések
-> On customers.customerid = megrendeléseket. ügyfélId;

Ez az SQL lekérdezés használja a bal oldali csatlakozó ügyfelek megrendeléseket és asztalok. A szintaxis kapcsolatban a csatlakozási feltételeket némileg eltérő. Feltételek vegyület jelzett speciális építési.

Itt az eredménye a lekérdezés:

Az eredmény azt mutatja, hogy nincs megfelelő Alekseeva Ivan zakza azonosító mező rendelésazonosító mert annak értéke NULL.

Ha azt szeretnénk, hogy megtalálja csak azoknak az ügyfeleknek, akik nem rendelnek, ez úgy érhető el az ellenőrzéseket végző egy NULL értéket az elsődleges kulcs a táblázat jobb (ebben az esetben rendelésazonosító)? mivel vonalak valódi értékekkel nem tartalmazhat NULL értéket:

mysql> select ügyfelek. ügyfélId, az ügyfelek. név
-> Ügyfelektől bal csatlakozzon rendelések
-> A (ügyfélId)
-> Hol megrendeléseket. rendelésazonosító NULL;

Lekérdezés eredménye a következő:

Valószínűleg észrevette már, hogy ebben a példában már némileg eltérő szintaxis a csatlakozni feltétel. Bal oldali csatlakozó támogatja szintaktikai, hogy használták az első példában, és szintaxis, melyet a második. Szintaxis nem célja, hogy jelezze a tábla, amely a kapcsolat attribútum kerül forgalomba, úgy, hogy lehet használni, az oszlopok az egyes táblázatban kell ugyanazt a nevet.

Alkalmazott egyéb táblanevek: becenevek

Gyakran ez nagyon kényelmes, és néha kell elérni táblák egy másik név alatt. Ezek a nevek az úgynevezett álnevek (aliase). Ezeket be lehet állítani elején a lekérdezés, majd, ha szükséges. Más nevek nagyon kényelmes, ez ugyanaz, mint egy asztali parancsikont. Vessen egy pillantást, úgy néz ki, mint egy viszonylag hosszadalmas vizsgálat, mi tekinthető a korábbi, újraírható alias:

mysql> select c.name
-> Ügyfelektől, mint c megrendelések o, order_items mint oi, könyvek, mint b
-> Amennyiben c.customerid = o.customerid
-> És o.orderid = oi.orderid
-> És oi. ISBN = b.isbn
-> És b.title like '% Fejlődő%';

Hozzárendelni egy alias táblázatot használjuk konstrukciót. Ezen túlmenően, az álneveket adható oszlopok, de vissza fog térni erre után úgy véljük, generalizált funkciókat.

Táblázatos álnevek szükség esetén asszociációs táblázatot is. Úgy hangzik, sokkal fenyegetőbb és misztikus, mint amilyen valójában. És ez a megközelítés nagyon hasznos a megállapítás sorainak ugyanannál az asztalnál, ahol vannak más értékek is megkövetelik. Ha szeretné megtalálni a vásárlók, akik élnek egy városban, például, hogy hozzon létre egy olvasó klub, lehet rendelni ugyanannál az asztalnál (sustomers) két különböző álnevek:

mysql> select c1.name, c2. Íme, c1. város
-> Feladó ügyfelek c1, c2 vevők
-> Hol c1. city ​​= c2. város
-> És c1.name = c2.name !;

Azt állítani, hogy a táblázat ügyfelek a két különböző C1 és C2 táblázat, és elvégzik a szakszervezeti oszlopon város. A második feltétel, c1.name! = C2.name, szükséges, hogy elkerüljék a megfelelő ügyfél maga.

Összefoglalása típusú kapcsolatot

A táblázat a különféle típusú vegyületek korábban tárgyalt. Vannak még számos más típusú, de szerepel a vegyületet táblázat leggyakrabban használt.

Kapcsolódó cikkek