- Mitä on Sisäinen Liittyä?
- mikä on uloin liittymä?
- Suorittaa Ulompi Liittyy Käyttämällä ( + ) – Symboli
Kuten lähes kaikki relaatiotietokannat, Oracle mahdollistaa kyselyt luodaan, joka yhdistää tai JOIN
rivit kahdesta tai useammasta taulukoita luoda lopullinen tulos asettaa., Vaikka on olemassa lukuisia erityyppisiä liitoksia, jotka voidaan suorittaa, yleisimpiä ovat INNER JOIN
ja OUTER JOIN
.
tässä opetusohjelmassa, me lyhyesti tutkia ero INNER
ja OUTER JOIN
ja sitten tutkia pika menetelmä Oracle tarjoaa suorittamiseksi OUTER JOINS
erityisesti käyttämällä +
operator-symboli.
mikä on sisäinen liittymä?,
Erinomainen INNER JOIN
vuonna relaatiotietokanta on yksinkertaisesti yhdistää kaksi tai useampia taulukoita, joissa tulos ei vain sisältää tietoja, jotka täyttivät kaikki liittyä ehtoja.
esimerkiksi, tässä on perus – library
skeema, jossa on kaksi taulukkoa: books
ja languages
.,>
Samaan aikaan, meidän books
taulukko on language_id
rivi, jonka useimmat, mutta eivät kaikki, kirjoja yksinkertaisesti sisältää language_id
liittyy alkuperäinen julkaistu kielellä kirja:
SELECT * FROM booksORDER BY idFETCH FIRST 10 ROWS ONLY;id title author year_published language_id1 In Search of Lost Time Marcel Proust 1913 22 Ulysses James Joyce 1922 13 Don Quixote Miguel de Cervantes 1605 54 Moby Dick Herman Melville 1851 15 Hamlet William Shakespeare 1601 (null)6 War and Peace Leo Tolstoy 1869 87 The Odyssey Homer -700 98 The Great Gatsby F. Scott Fitzgerald 1925 19 The Divine Comedy Dante Alighieri 1472 1010 Madame Bovary Gustave Flaubert 1857 2
monissa tapauksissa, meillä voi halutessaan suorittaa INNER JOIN
ja books
ja languages
taulukot joten sen sijaan katselu merkityksetön language_id
arvo kunkin kirjan, voimme itse nähdä language name
sijaan.,
SELECT b.id, b.title, b.author, b.year_published, l.name languageFROM books bINNER JOIN library.languages lON b.language_id = l.idORDER BY b.idFETCH FIRST 10 ROWS ONLY;id title author year_published language1 In Search of Lost Time Marcel Proust 1913 French2 Ulysses James Joyce 1922 English3 Don Quixote Miguel de Cervantes 1605 Spanish4 Moby Dick Herman Melville 1851 English6 War and Peace Leo Tolstoy 1869 Russian7 The Odyssey Homer -700 Greek8 The Great Gatsby F. Scott Fitzgerald 1925 English9 The Divine Comedy Dante Alighieri 1472 Italian10 Madame Bovary Gustave Flaubert 1857 French11 The Brothers Karamazov Fyodor Dostoyevsky 1880 Russian
on tärkeää huomata tässä on, että meidän tulos oli hieman erilainen edellä kaksi kyselyt. Ensimmäinen, olemme yksinkertaisesti listanneet ensimmäinen 10
kirjoja, mutta INNER JOIN
kysely olemme vain palaa tuloksia, jotka täyttävät kaikki ehdot sekä taulukoita. Tästä syystä kirjaa Hamlet
(joka on language_id
arvo null
tai tyhjä) on huomiotta ja ei palauteta tulos INNER JOIN
.,
mikä on ulompi liittymä?
sen Sijaan, että yksinomaan palaa tuloksia, jotka täyttävät kaikki liittyä ehtoja, INNER JOIN
, joka OUTER JOIN
palauttaa ei vain tulokset, jotka täyttävät kaikki edellytykset, mutta myös palauttaa rivit yksi pöytä, joka ei täytä ehtoa. Taulukko, joka on valinnut tämän ”ohittaa” ehdollisen vaatimukset määritetään suunta tai ”puoli” liity, tyypillisesti kutsutaan LEFT
tai RIGHT
ulompi liittyy.,
Kun määritellään puolella oman OUTER JOIN
, määrität taulukko, joka palaa aina sen rivin, vaikka vastapuolen pöydän toisella puolella on liittyä puuttuu tai null
arvot osana liittyminen kunto.,
näin Ollen, jos me suorittaa samat JOIN
kuten edellä, jos haluat hakea books
ja language names
tiedämme, että meidän books
taulukon pitäisi aina palauttaa tiedot, joten meidän JOIN
puolella olisi ”kohta kohti” meidän books
taulukko, jolloin languages
taulukko OUTER
taulukko olemme kiinnittämällä se.,> paitsi että pieni muutos:
SELECT b.id, b.title, b.author, b.year_published, l.name languageFROM books bLEFT OUTER JOIN library.languages lON b.language_id = l.idORDER BY b.idFETCH FIRST 10 ROWS ONLY;id title author year_published language1 In Search of Lost Time Marcel Proust 1913 French2 Ulysses James Joyce 1922 English3 Don Quixote Miguel de Cervantes 1605 Spanish4 Moby Dick Herman Melville 1851 English5 Hamlet William Shakespeare 1601 (null)6 War and Peace Leo Tolstoy 1869 Russian7 The Odyssey Homer -700 Greek8 The Great Gatsby F. Scott Fitzgerald 1925 English9 The Divine Comedy Dante Alighieri 1472 Italian10 Madame Bovary Gustave Flaubert 1857 French
Kuten odotettua, käyttämällä LEFT OUTER JOIN
sen sijaan, että edellinen INNER JOIN
olemme saada molempien maailmojen parhaat puolet: Emme menettäneet mitään books
tietueet (kuten Hamlet
) yksinkertaisesti, koska language_id
arvo on null
tietueen, mutta kaikki tietueet, joissa language_id
olemassa, saamme muotoiltuja language name
saatu meidän languages
taulukko.,
Esittävien Ulompi Liittyy Käyttämällä ( + ) – Symboli
Kuten viralliset asiakirjat, Oracle tarjoaa erityinen outer join operator
(+
symboli), joka on lyhenne suorittamiseksi OUTER JOINS
.
käytännössä +
symboli on sijoitettu suoraan ehdollinen lausunto ja puolella valinnainen taulukossa (joka ei saa olla tyhjiä tai null
arvojen sisällä ehdollinen).,
näin Ollen, voimme jälleen kirjoittaa meidän edellä LEFT OUTER JOIN
selvitys käyttäen +
operaattori, kuten niin:
tulokset ovat samat kuin vakio LEFT OUTER JOIN
esimerkki edellä, joten emme sisällytä niitä täällä. Kuitenkin, siellä on yksi kriittinen näkökohta huomata noin syntaksia käyttäen +
käyttäjän OUTER JOINS
.
+
toiminnanharjoittajan on oltava vasemmalla puolella ehdollinen (vasemmalla puolella on yhtä kuin =
merkki)., Siksi, tässä tapauksessa, koska haluamme varmistaa, että meidän languages
taulukko on valinnainen taulukko, joka voi palata null
arvot tänä vertailu, vaihdoimme järjestystä taulukot ehdollinen, joten languages
on vasemmalla (ja on valinnainen) kun books
on oikealla.
Lopuksi, koska tämä uusjako taulukon puolin ehdollisen kun käytät +
operaattori, se on tärkeää ymmärtää, että edellä on yksinkertaisesti pika RIGHT OUTER JOIN
., Tämä tarkoittaa, että tämä pätkä kysely:
FROM books b, library.languages lWHERE l.id (+)= b.language_id
…on käytännössä sama kuin tämä:
FROM library.languages lRIGHT OUTER JOIN books bON b.language_id = l.id
Vastaa