Kuinka yhdistän useiden SQL-taulukoiden tulokset (vihje: kolmella tavalla)
Relaatiotietokannassa on useita kertoja tiedot, jotka haluat näyttää kyselyssäsi useampi kuin yksi taulukko. Tämä herättää kysymyksen ”Kuinka yhdistät tuloksia useammasta kuin yhdestä taulukosta?”
Kaikki tämän oppitunnin esimerkit perustuvat Microsoft SQL Server Management Studioon ja AdventureWorks2012-tietokantaan. Voit aloittaa näiden maksuttoman käytön työkalut, jotka käyttävät oppaani Aloittaminen SQL Serverin käytöstä.
Millä tavoin voin yhdistää useamman kuin yhden kyselyn tuloksia?
SQL ei olisi kovin hyödyllinen kieli, jos se ei Ei ole helppo tapa yhdistää tuloksia useammasta kuin yhdestä kyselystä. Onneksi voit yhdistää useita taulukoita kolmella tavalla. Käymme läpi nämä lyhyesti tässä ja tarjoamme linkkejä syvällisempiin artikkeleihin.
Kolme tapaa yhdistää tietoja
Relaatiotietokantataulukoissa olevat tiedot on järjestetty riveihin ja sarakkeisiin. Kun tutkimme tapoja yhdistää tietoja, pidä mielessä, että lopputulos on joko lisätä tulokseen lisää sarakkeita, ehkä toisesta aiheeseen liittyvästä taulukosta, tai rivejä ottamalla joukko rivejä kahdesta tai useammasta taulukosta s.
Kun useimmat ihmiset oppivat yhdistämään tietoja, joista he oppivat:
- LIITY – Liitymällä voit yhdistää yhden tai useamman kyselyn sarakkeet yhteen tulokseen.
- UNION – Yhdistä yhdestä tai useammasta kyselystä yhdeksi tulokseen Unions ja muut joukkooperaattorit.
- Alakyselyt – Joskus kutsutaan sisäkkäisiksi kyselyiksi, niitä voidaan käyttää erillisen haun suorittamiseen tietokanta osoitti, että tuloksia voidaan käyttää toisessa kyselyssä.
Liittyy
Haluan ajatella liittymistä liimana, joka kokoaa tietokannan takaisin yhteen. Relaatiotietokannat normalisoidaan yleensä tietojen ylläpidon helpottamiseksi ja suorituskyvyn parantamiseksi, mutta lopputulos on, että tiedot on jaettu moniin taulukoihin. Liittymien avulla voit yhdistää nämä tiedot takaisin ihmisille luettavampaan muotoon. Tiedot yhdistetään yhdistämällä kunkin taulukon sarakkeet.
Liittyminen vaatii kaikissa tapauksissa kaksi pääosaa: Kaksi taulukkoa ja liittämisehto. Taulukoita käytetään vetämään rivejä ja sarakkeita, ja liittämisehto on se, miten aiomme sovittaa sarakkeet taulukkojen välillä.
Esimerkki JOIN
SELECT Person.FirstName, Person.LastName, PersonPhone.PhoneNumber FROM Person.Person INNER JOIN Person.PersonPhone ON Person.BusinessEntityID = PersonPhone.BusinessEntityID
Liittymiä on kahta päätyyppiä. Sisäiset liitokset ja ulkoyhdistelmät.
Sisäiset liitokset palauttavat tuloksena olevan rivin vain, jos liittymisehto vastaa molempia taulukoita. Sisäisiä liitoksia käytetään pääasiassa yhden taulukon ensisijaisen avaimen ja ulkomaisen avaimen sovittamiseen toiseen.
Toinen liitostyyppi on ulompi liitos. Ulkoliitännät palauttavat aina vähintään yhden rivin päätaulukolle, jota kutsutaan vasemmalle tai oikealle taulukoksi, ja nolla-arvot vastaamattoman sarakkeen vastaavissa sarakkeissa. Ulkoisista liitoksista on hyötyä ei-yhteensopivien tietojen löytämisessä.
On tärkeää huomata, että liittymät voivat palauttaa enemmän rivejä kuin kummassakin taulukossa yhdessä. Liittymät palauttavat otteluiden yhdistelmät. Jos liität kaksi taulukkoa, joista toisessa on 5 riviä ja toisessa 10, tulos voi sisältää 0 – 50 riviä liittymisehdosta riippuen.
Unionit
UNION on käytetään yhdistämään kahden tai useamman kyselyn rivit yhteen tulokseen. Unionia kutsutaan joukkooperaattoriksi.
Unionin toimimiseksi on asetettava joitain erityisehtoja. Ensinnäkin jokaisella kyselyllä on oltava sama määrä sarakkeita. Toiseksi näiden sarakkeiden tietotyyppien on oltava yhteensopivia. Yleisesti ottaen jokaisen kyselyn on palautettava sama määrä ja tyyppisiä sarakkeita.
Käytännön esimerkki unionista on, kun kahdessa taulukossa on osanumeroita ja haluat luoda yhdistetyn luettelon luettelolle. Voit joko valita, että lopputulos on yhdistetyn kyselyn yksilöllinen luettelo, tai jos käytät UNION ALL -ohjelmaa, palauta jokaisen taulukon kaikki rivit.
Esimerkki UNION
SELECT C.NameFROM Production.ProductCategory AS CUNIONSELECT S.NameFROM Production.ProductSubcategory AS S
Unionin lisäksi on pari muuta kätevää joukkooperaattoria:
- INTERSECT – Voit käyttää tätä palauttamaan vain rivit, jotka ovat yhteisiä kahden taulukon välillä.
- POIKKEUS – Voit palauttaa tämän avulla rivit, jotka ovat yhdessä taulukossa, mutta joita ei löydy toisesta.
Kun opit lisää löytämääsi SQL: ää että voit käyttää liittymiä vastaavien lauseiden kirjoittamiseen Intersectille ja Exceptille, mutta Unionille ei ole vastaavia.
Alikyselyt
Alakyselyjä kutsutaan joskus sisäkyselyiksi. Ne ovat kyselyjä, jotka on määritelty muiden kyselyjen sisällä. Alakyselyt voivat olla hämmentäviä. Luulen, että suuri osa tästä johtuu siitä, että niitä voidaan käyttää monissa paikoissa SQL select -lausekkeessa ja useisiin tarkoituksiin!
Esimerkiksi tässä on joitain alueita, joissa saatat nähdä alikyselyn:
- SELECT-lause – Käytetään arvon palauttamiseen. Jos esimerkiksi kysyt myyntitaulukkoa, voit sisällyttää kokonaismyynnin palauttamalla summan kaikista alikyselyssä olevista myynneistä.
- WHERE-lauseke – Alakyselyjä voidaan käyttää vertailussa missä-lauseketta. Voit määrittää vertailun, jolla verrataan myyntiä keskimääräiseen keskiarvoon. Kokonaiskeskiarvo palautettaisiin alakyselystä. Voit käyttää alakyselyjä myös jäsenoperaattoreissa, kuten IN. Sen sijaan, että koodittaisit in-lauseessa kovaa koodausta, voit tehdä alikyselystä sen dynaamisemman.
- HAVING-lauseke – Yksi alakyselyn arvo sisältyy HAVING-lausekevertailuihin.
Esimerkki alakyselystä
SELECT SalesOrderID, LineTotal, (SELECT AVG(LineTotal) FROM Sales.SalesOrderDetail) AS AverageLineTotalFROM Sales.SalesOrderDetail
Käytettäessä valittavissa lausekkeissa ja vertailuoperaattoreissa, kuten yhtäsuuri, suurempi ja pienempi kuin , alikysely voi palauttaa vain yhden rivin. Jos sitä käytetään yhdessä jäsenoperaattorin, kuten IN: n kanssa, kysely palauttaa yhden tai useamman rivin.