Tietokoneet, Ohjelmointi
Vasen liittymään (SQL) - esimerkkinä yksityiskohtainen kuvaus, käyttö virheestä
Joka todellista relaatiotietokanta, kaikki tieto jaetaan erillisessä taulukossa. Useissa taulukoissa esitetään tiedonannossa järjestelmässä keskenään. Kuitenkin avulla SQL-kyselyjä on täysin mahdollista laittaa linkin tietojen välillä, ei upotettu piirissä. Tämä tehdään suorittamalla liittyä yhteys, jonka avulla voit rakentaa suhdetta minkä tahansa määrän taulukoita, ja jopa liittää näennäisesti erilaisia tietoja.
Tämä artikkeli puhua erityisesti vasemmalle ulkoliitos. Ennen siirtymistä kuvaus tämäntyyppisen yhteyden, lisää joissakin tietokantataulukoihin.
Valmistelee tarvittavat taulukot
Esimerkiksi meidän tietokantaan on tietoja ihmisistä ja heidän kiinteistöihin. Yhteenveto perustuu kolme taulukkoa: Peoples (ihmiset), Realty (kiinteistöt), Realty_peoples (taulukko suhteita, ihmiset mitä omaisuus kuuluu). Oletetaan seuraavat tallennetut tiedot taulukoissa ihmisten:
Peoples | ||||
id | L_name | F_name | Middle_name | syntymäpäivä |
1 | Ivanova | Daria | B. | 16.07.2000 |
2 | Pugin | Vladislav | Nikolaevich | 01.29.1986 |
3 | EvgeniN | Alexander | Federovich | 04.30.1964 |
4 | Annina | rakkaus | P. | 31.12.1989 |
5 | Gerasimovsky | toivo | P. | 14.03.1992 |
6 | Gerasimovsky | Oleg | Albertovich | 01.29.1985 |
7 | Sukhanovskaya | tuomaristo | A. | 09.25.1976 |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 |
Kiinteistöt:
Realty | |
id | osoite |
1 | Arkangelin, ul. Voronin, d. 7, kv.6 |
2 | Arkangelin, ul. Severodvinskaya, d. 84, q. 9 BR. 5 |
3 | Arkangelin alue, Severodvinsk, st. Lenin, d. 134, q. 85 |
4 | Arkangelin alue, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
5 | Arkangelin, pl. Terekhina, d. 89, q. 13 |
Suhteet ihmistä - omaisuus:
Realty_peoples | ||
id_peoples | id_realty | tyyppi |
7 | 3 | Yhteensä yhteisen omistusoikeuden |
8 | 3 | Yhteensä yhteisen omistusoikeuden |
3 | 5 | omaisuus |
7 | 1 | omaisuus |
5 | 4 | yhteisten osien |
6 | 4 | yhteisten osien |
Vasemmalle liittymään (SQL) - Kuvaus
Vasen yhdisteellä on seuraava syntaksi:
Table_A LEFT JOIN table_B [{ON predikaatti} | {KÄYTTÖ spisok_ kanssa tolbtsov}] |
Ja kaavamaisesti seuraavasti:
Ja tämä ilmaus on käännetty "Valitse kaikki poikkeuksetta linja taulukossa A Taulukko B näyttää vain vastaavia rivejä predikaatin. Jos taulukko havaittiin merkkijono taulukossa paria A, täytä sitten tuloksena sarakkeet Null - arvot".
Useimmiten, kun vasen yhteys on merkitty käyttäen käytetään vain silloin, kun sarakenimet, joka on suunniteltu tekemään yhteyden ovat samat.
Vasen liittyä - esimerkkejä käytöstä
Kun yhteys vasemman näemme, kaikki ihmiset listasta jos Peoples omaisuutta. Voit tehdä tämän vasemmassa liittyä SQL esimerkki:
VALINTA Peoples. *, Realty_peoples.id_realty, Realty_peoples.type FROM Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Seuraavin tuloksin:
Query1 | ||||||
id | L_name | F_name | Middle_name | syntymäpäivä | id_realty | tyyppi |
1 | Ivanova | Daria | B. | 16.07.2000 | ||
2 | Pugin | Vladislav | Nikolaevich | 01.29.1986 | ||
3 | EvgeniN | Alexander | Federovich | 04.30.1964 | 5 | omaisuus |
4 | Annina | rakkaus | P. | 31.12.1989 | ||
5 | Gerasimovsky | toivo | P. | 14.03.1992 | 4 | yhteisten osien |
6 | Gerasimovsky | Oleg | Albertovich | 01.29.1985 | 4 | yhteisten osien |
7 | Sukhanovskaya | tuomaristo | A. | 09.25.1976 | 1 | omaisuus |
7 | Sukhanovskaya | tuomaristo | A. | 09.25.1976 | 3 | Yhteensä yhteisen omistusoikeuden |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Yhteensä yhteisen omistusoikeuden |
Kuten näemme, Ivanova Darya Pugin Vladislav ja Anninoy Lyubovi Ei rekisteröityneitä kiinteistöjä oikeuksia.
Ja mitä olemme saaneet, käyttäen sisäliitos sisäliitos? Kuten tiedätte, se sulkee ei-matching rivejä, joten kolme meidän lopullinen näyte olisi yksinkertaisesti laskenut:
Query1 | ||||||
id | L_name | F_name | Middle_name | syntymäpäivä | id_realty | tyyppi |
3 | EvgeniN | Alexander | Federovich | 04.30.1964 | 5 | omaisuus |
5 | Gerasimovsky | toivo | P. | 14.03.1992 | 4 | yhteisten osien |
6 | Gerasimovsky | Oleg | Albertovich | 01.29.1985 | 4 | yhteisten osien |
7 | Sukhanovskaya | tuomaristo | A. | 09.25.1976 | 1 | omaisuus |
7 | Sukhanovskaya | tuomaristo | A. | 09.25.1976 | 3 | Yhteensä yhteisen omistusoikeuden |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Yhteensä yhteisen omistusoikeuden |
Näyttäisi siltä, että toinen versio myös täyttää meidän ongelma. Jos kuitenkin alamme kiinnittää toisen, ja toinen pöytä, kolme ihmistä tuloksesta jo peruuttamattomasti mennyt. Siksi käytännössä kun yhdistetään useita pöytiä paljon useammin käytetty vasen ja oikea yhteys kuin Sisä liittyä.
Etsii edelleen vasemmalle liittymään sql esimerkkejä. Kiinnitä pöytä osoitteet meidän taloa:
VALINTA Peoples. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address FROM Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples LEFT JOIN Realty ON Realty.id = Realty_peoples.id_realty |
Nyt saamme paitsi sellaista lakia, vaan myös osoitteen kiinteistön:
Query1 | |||||||
id | L_name | F_name | Middle_name | syntymäpäivä | id_realty | tyyppi | osoite |
1 | Ivanova | Daria | B. | 16.07.2000 | |||
2 | Pugin | Vladislav | Nikolaevich | 01.29.1986 | |||
3 | EvgeniN | Alexander | Federovich | 04.30.1964 | 5 | omaisuus | Arkangelin, pl. Terekhina, d. 89, q. 13 |
4 | Annina | rakkaus | P. | 31.12.1989 | |||
5 | Gerasimovsky | toivo | P. | 14.03.1992 | 4 | yhteisten osien | Arkangelin alue, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
6 | Gerasimovsky | Oleg | Albertovich | 01.29.1985 | 4 | yhteisten osien | Arkangelin alue, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
7 | Sukhanovskaya | tuomaristo | A. | 09.25.1976 | 3 | Yhteensä yhteisen omistusoikeuden | Arkangelin alue, Severodvinsk, st. Lenin, d. 134, q. 85 |
7 | Sukhanovskaya | tuomaristo | A. | 09.25.1976 | 1 | omaisuus | Arkangelin, ul. Voronin, d. 7, kv.6 |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Yhteensä yhteisen omistusoikeuden |
Arkangelin alue, Severodvinsk, st. Lenin, d. 134, q. 85 |
Vasen liittyä - tyypillinen käyttö virhe: virheellinen menettely pöytä
Basic virheitä vasemmalla ulkoliitos pöydät, kaksi:
- Oikein valitut järjestystä taulukoita, joista tietoja oli kadonnut.
- Missä virheet käytettäessä kyselyn liittyä taulukoita.
Harkitse ensimmäinen virhe. Ennen päätöstä mitään ongelmaa olisi selvää, että mitä haluamme saada lopulta. Tässä esimerkissä edellä, otimme jokainen yksi niistä ihmisistä, mutta täysin menetetty tiedot objektin numerolla 2, jonka omistaja ei löytynyt.
Jos muutimme taulukoissa kyselyn paikoin, ja alkaisi «... Julkaisija Realty vasemmalle liittymään Peoples ...» jokin ominaisuus, emme olisi menettäneet, et kertoa ihmisille.
Mutta älä pelkää vasemman yhteyden, siirtyä koko ulkoinen, joka sisältyy tuloksiin ja vastaavia, eikä sovituslinjojen.
Onhan näytteen tilavuus on usein hyvin suuri, ja lisäkapasiteettia on oikeastaan turha. Tärkeintä - selvittää, mitä haluat saada tuloksen: kaikkien ihmisten luettelon niiden käytettävissä omaisuuden tai koko kiinteistön listan omistajineen (jos on).
Vasen liittyä - tyypillinen käyttö virhe: Pyyntö on oikea asetettaessa olosuhteet Missä
Toinen virhe liittyy myös tietojen menetyksen, ja eivät ole aina välittömästi nähtävissä.
Palataan kyselyyn kun lähdimme yhteyksillä vastaanotetut tiedot kaikille ihmisille ja nykyisiä omaisuutta. Muista seuraava vasen liittyä sql esimerkki:
FROM Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Oletetaan haluamme selvittää pyynnön ja ei tulosta dataa, jossa tyyppi lain - "Property". Jos me yksinkertaisesti liittää, käyttämällä vasenta liittyä sql, esimerkkinä seuraavan ehdon:
...
Missä tyyppi <> "Property" |
menetämme tietoja henkilöiden, joilla ei ole omaisuutta, koska nolla Nolla ei vertailla seuraavasti:
Query1 | ||||||
id | L_name | F_name | Middle_name | syntymäpäivä | id_realty | tyyppi |
5 | Gerasimovsky | toivo | P. | 14.03.1992 | 4 | yhteisten osien |
6 | Gerasimovsky | Oleg | Albertovich | 01.29.1985 | 4 | yhteisten osien |
7 | Sukhanovskaya | tuomaristo | A. | 09.25.1976 | 3 | Yhteensä yhteisen omistusoikeuden |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Yhteensä yhteisen omistusoikeuden |
Estää virheitä tapahtuu tästä syystä, se on parasta asettaa valinnan tila heti yhteyden. Ehdotamme harkita seuraavia vasemmalla liittyä sql esimerkki.
VALINTA Peoples. *, Realty_peoples.id_realty, Realty_peoples.type FROM Peoples LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples ja tyyppi <> "Property") |
Tulos on seuraava:
Query1 | ||||||
id | L_name | F_name | Middle_name | syntymäpäivä | id_realty | tyyppi |
1 | Ivanova | Daria | B. | 16.07.2000 | ||
2 | Pugin | Vladislav | Nikolaevich | 01.29.1986 | ||
3 | EvgeniN | Alexander | Federovich | 04.30.1964 | ||
4 | Annina | rakkaus | P. | 31.12.1989 | ||
5 | Gerasimovsky | toivo | P. | 14.03.1992 | 4 | yhteisten osien |
6 | Gerasimovsky | Oleg | Albertovich | 01.29.1985 | 4 | yhteisten osien |
7 | Sukhanovskaya | tuomaristo | A. | 09.25.1976 | 3 | Yhteensä yhteisen omistusoikeuden |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Yhteensä yhteisen omistusoikeuden |
Siten seuraamalla yksinkertaisia vasemmalle liittymään sql esimerkiksi saimme luettelon kaikista ihmisistä, liikkuvat edelleen, yksi näistä ominaisuuksista uutta pääomaa / yhteisomistusta.
Johtopäätöksenä haluaisin korostaa jälleen kerran, että näyte tietoja tietokannasta on otettava vastuullisesti. Monet vivahteita avattiin edessämme vasen liittyä sql yksinkertainen esimerkki, selitys joista yksi - ennen kuin alkaa kirjoittamaan edes perus kyselyn, sinun täytyy huolellisesti ymmärtää, mitä haluamme saada lopulta. Onnea!
Similar articles
Trending Now