Hogyan kombinálhatom több SQL-tábla eredményeit (tipp: háromféleképpen lehet)
Egy relációs adatbázisban sokszor szerepelnek a lekérdezésben megjeleníteni kívánt információk egynél több asztal. Ez felveti a kérdést: “Hogyan kombinálhatja az eredményeket egynél több táblából?”
A lecke összes példája a Microsoft SQL Server Management Studio és az AdventureWorks2012 adatbázisra épül. Elkezdheti ezeket használni eszközök az Útmutató segítségével Az első lépések az SQL Server használatához.
Milyen módszerekkel kombinálhatom több lekérdezés eredményeit?
Az SQL nem lenne nagyon hasznos nyelv, ha nem Nem nyújt egyszerű módszert több lekérdezés eredményeinek egyesítésére. Szerencsére három fő módon kombinálhatja több táblázat adatait. Ezeket itt röviden áttekintjük, és részletesebb cikkekre mutató linkeket adunk meg.
Az adatok kombinálásának három fő módja
A relációs adatbázis táblákban lévő adatok sorokba és oszlopokba vannak rendezve. Miközben az adatok kombinálásának módjait vizsgáljuk, ne feledje, hogy a végeredmény vagy adjon hozzá több oszlopot az eredményhez, esetleg egy másik kapcsolódó táblából, vagy sorokat úgy, hogy két vagy több táblázatból sorokat vesz fel s.
Amikor a legtöbben megtanulják összegyűjteni az általuk megismert adatokat:
- CSATLAKOZÁS – A csatlakozások segítségével egy vagy több lekérdezés oszlopai egyetlen eredményre vonhatók.
- UNION – Az Unions és más halmaz operátorok segítségével egy vagy több lekérdezésből álló sorokat egyesíthet egyetlen találatba.
- Részlekérdezések – Ezeket néha egymásba ágyazott lekérdezéseknek is hívják, ezek külön keresésre használhatók a az adatbázis azt mutatta, hogy az eredményeket egy másik lekérdezésben is fel lehet használni.
Csatlakozások
Szeretném a csatlakozásokról azt gondolni, hogy azok a ragasztók, amelyek az adatbázist visszahelyezik. A relációs adatbázisokat általában normalizálják, hogy megkönnyítsék az adatok karbantartását és javítsák a teljesítményt, de a végeredmény az, hogy az információkat sok táblázatba osztják. A Joins segítségével újból egyesítheti ezeket az információkat egy ember által olvashatóbb formátumba. Az adatokat minden táblázat megfelelő oszlopai kombinálják.
Az összekapcsolásokhoz minden esetben két fő összetevőre van szükség: Két táblára és egy összekapcsolási feltételre. A táblákat használjuk a sorok és oszlopok meghúzására, és az összekapcsolási feltétel az oszlopok táblák közötti összehangolása.
Példa JOIN
SELECT Person.FirstName, Person.LastName, PersonPhone.PhoneNumber FROM Person.Person INNER JOIN Person.PersonPhone ON Person.BusinessEntityID = PersonPhone.BusinessEntityID
Az összekapcsolásoknak két fő típusa van. Belső és külső csatlakozások.
A belső csatlakozások csak akkor adnak vissza eredményül kapott sort, ha a csatlakozási feltétel megegyezik mindkét táblázatban. A belső összekapcsolásokat főleg arra használják, hogy az egyik asztal elsődleges kulcsához egy idegen kulcs társuljon.
A második típusú összekapcsolás egy külső összekapcsolás. A külső csatlakozások mindig a főtáblának legalább egy sort adnak vissza, amelyet Bal vagy Jobb táblának neveznek, és null értékeket ad a nem egyező oszlop megfelelő oszlopaiban. A külső csatlakozások hasznosak a nem egyező adatok megtalálásához.
Fontos megjegyezni, hogy az összekapcsolások több sort adhatnak vissza, mint ami mindkét táblában együttesen létezik. A csatlakozások visszatérnek a mérkőzések kombinációihoz. Ha két táblához csatlakozik, az egyik 5 sort tartalmaz, a másik 10-et, az eredmény a csatlakozási körülményektől függően 0 és 50 sort tartalmazhat.
Szakszervezetek
UNIÓ két vagy több lekérdezés sorainak egy eredményre történő egyesítésére szolgál. Az uniót beállított operátornak hívják.
Vannak speciális feltételek, amelyeknek meg kell felelniük az unió működéséhez. Először is, minden lekérdezésnek azonos számú oszloppal kell rendelkeznie. Másodszor, ezen oszlopok adattípusainak kompatibiliseknek kell lenniük. Általánosságban elmondható, hogy minden lekérdezésnek azonos számú és típusú oszlopot kell adnia.
Az unió gyakorlati példája, amikor két tábla tartalmaz cikkszámokat, és kombinált listát szeretne létrehozni egy katalógushoz. Vagy kiválaszthatja, hogy a végeredmény legyen-e a kombinált lekérdezés egyedi listája, vagy ha az UNION ALL lehetőséget használja, adja vissza az egyes táblák összes sorát.
Példa UNION
SELECT C.NameFROM Production.ProductCategory AS CUNIONSELECT S.NameFROM Production.ProductSubcategory AS S
Az Union mellett van még néhány praktikus készlet operátor:
- INTERSECT – Ezzel csak két tábla között közös sorokat adhat vissza.
- KIVÉTEL – Ezzel visszaadhatja azokat a sorokat, amelyek léteznek az egyik táblázatban, de nem találhatók a másikban.
Amint tovább tanul a megtalált SQL-ből hogy a joins segítségével egyenértékű utasításokat írhat az Intersect és az Except számára, de az Unionnak nincsenek ekvivalensei.
Alkérdezések
Az alkérdezéseket néha egymásba ágyazott lekérdezéseknek hívják. Más lekérdezéseken belül definiált lekérdezések. Az alkérdezések zavaróak lehetnek. Úgy gondolom, hogy sok ez abból fakad, hogy sok helyen felhasználhatók egy SQL select utasításban, és többféle célra is!
Például itt láthat néhány területet, ahol láthat egy al lekérdezést:
- SELECT záradék – Érték visszaadására szolgál. Például, ha eladási táblázatot keres, akkor az összes eladást belefoglalhatja az allekérdezésen belüli összes eladás összegének megadásával.
- WHERE záradék – Az alkérdezések felhasználhatók az összehasonlítások hol záradékában. Beállíthat egy összehasonlítást, hogy összehasonlítsa az eladásokat az általános átlaggal. A teljes átlag egy allekérdezésből származna. Az alkérdezéseket tagsági operátorokban is használhatja, például az IN-ben. Az in záradék kemény kódolása helyett dinamikusabbá teheti az allekérdezést.
- HAVING záradék – A HAVING záradék összehasonlításai tartalmazzák az egyik egy lekérdezés egy értékét.
Példa allekérdezés
SELECT SalesOrderID, LineTotal, (SELECT AVG(LineTotal) FROM Sales.SalesOrderDetail) AS AverageLineTotalFROM Sales.SalesOrderDetail
Kiválasztott tagmondatokban és összehasonlító operátorokban, például egyenlő, nagyobb és kisebb, mint , egy allekérdezés csak egy sort adhat vissza. Ha tagsági operátorral (például IN) együtt használják, akkor a lekérdezésnek egy vagy több sort kell visszaadnia.