Hur kombinerar jag resultat från flera SQL-tabeller (tips: det finns tre sätt)
Många gånger i en relationsdatabas finns informationen du vill visa i din fråga mer än ett bord. Detta väcker frågan ”Hur kombinerar du resultat från mer än en tabell?”
Alla exemplen för den här lektionen är baserade på Microsoft SQL Server Management Studio och AdventureWorks2012-databasen. Du kan komma igång med dessa gratis verktyg som använder min guide Komma igång med SQL Server.
Hur kan jag kombinera resultat från mer än en fråga?
SQL skulle inte vara ett särskilt användbart språk om det inte ’t ger ett enkelt sätt för dig att kombinera resultat från mer än en fråga. Lyckligtvis finns det tre huvudsakliga sätt att kombinera data från flera tabeller. Vi går igenom dessa kort här och ger länkar till mer ingående artiklar.
Tre huvudmetoder för att kombinera data
Data i relationsdatabastabeller är ordnade i rader och kolumner. När vi undersöker sätt att kombinera data, kom ihåg att slutresultatet blir att antingen lägga till fler kolumner i ett resultat, kanske från en annan relaterad tabell eller rader, genom att ta en uppsättning rader från två eller flera tabeller s.
När de flesta lär sig att kombinera data som de lär sig om:
- JOIN – Du kan använda joins för att kombinera kolumner från en eller flera frågor till ett resultat.
- UNION – Använd Unions och andra setoperatorer för att kombinera rader från en eller flera frågor till ett resultat.
- Subfrågor – Ibland kallas kapslade frågor, dessa kan användas för att utföra en separat sökning i databasen visade att resultat kan användas i en annan fråga.
Fogar
Jag tycker om att tänka på fogar som det lim som sätter databasen ihop igen. Relationsdatabaser normaliseras vanligtvis för att göra data lättare att underhålla och förbättra prestanda, men slutresultatet är att information är uppdelad i många tabeller. Du kan använda Joins för att kombinera informationen igen till ett mer mänskligt läsbart format. Uppgifterna kombineras om genom att matcha kolumner från varje tabell.
I alla fall kräver sammanfogningar två huvudingredienser: Två tabeller och ett kopplingsvillkor. Tabellerna är vad vi kommer att använda för att dra raderna och kolumnerna och kopplingsvillkoret är hur vi tänker matcha kolumnerna mellan tabellerna.
Exempel JOIN
SELECT Person.FirstName, Person.LastName, PersonPhone.PhoneNumber FROM Person.Person INNER JOIN Person.PersonPhone ON Person.BusinessEntityID = PersonPhone.BusinessEntityID
Det finns två huvudtyper av sammanfogningar. Inre föreningar och yttre föreningar.
Inre föreningar returnerar endast en resulterande rad om kopplingsvillkoret matchar i båda tabellerna. Inre föreningar används huvudsakligen för att matcha den primära nyckeln i en tabell, en främmande nyckel i en annan.
Den andra typen av koppling är en yttre koppling. Yttre sammanfogningar returnerar alltid minst en rad för huvudtabellen, kallad den vänstra eller högra tabellen, och nullvärden i motsvarande kolumner i den icke-matchande kolumnen. Yttre sammanfogningar är användbara för att hitta data som inte matchar.
Det är viktigt att notera att sammanfogningar kan returnera fler rader än vad som finns i endera tabellen tillsammans. Sammankopplingarna av matchningar. Om du går med i två tabeller, en som innehåller 5 rader och den andra 10, kan resultatet innehålla allt från 0 till 50 rader beroende på kopplingsvillkor.
Fackföreningar
En UNION är används för att kombinera raderna med två eller flera frågor till ett resultat. Unionen kallas en uppsättningsoperatör.
Det finns några speciella villkor som måste uppstå för att en fackförening ska fungera. Först måste varje fråga ha samma antal kolumner. För det andra måste datatyperna för dessa kolumner vara kompatibla. Generellt sett måste varje fråga returnera samma antal och typ av kolumner.
Ett praktiskt exempel på union är när två tabeller innehåller artikelnummer och du vill skapa en kombinerad lista för en katalog. Du kan antingen välja att slutresultatet ska vara en unik lista för den kombinerade frågan eller om du använder UNION ALL returnerar alla rader från varje tabell.
Exempel UNION
SELECT C.NameFROM Production.ProductCategory AS CUNIONSELECT S.NameFROM Production.ProductSubcategory AS S
Förutom Union finns det ett par andra praktiska set-operatorer:
- INTERSECT – Du kan använda detta för att bara returnera rader som är vanliga mellan två tabeller.
- EXCEPT – Du kan använda detta för att returnera rader som finns på en tabell, men som inte finns i en annan.
När du fortsätter för att lära dig mer SQL hittar du att du kan använda sammanfogningar för att skriva motsvarande uttalanden för Intersect och Except, men det finns inga motsvarigheter för Union.
Underfrågor
Underfrågor kallas ibland kapslade frågor. De är frågor som definieras i andra frågor. Underfrågor kan vara förvirrande. Jag tror att mycket av detta härrör från det faktum att de kan användas på många ställen i ett SQL select-uttalande, och för flera ändamål!
Till exempel, här är några områden du kan se en underfråga:
- SELECT-sats – Används för att returnera ett värde. Om du till exempel frågar efter en försäljningstabell kan du inkludera den totala försäljningen genom att returnera en summa av all försäljning från en underfråga.
- VAR-sats – Underfrågor kan användas i var-satsen i jämförelser. Du kan skapa en jämförelse för att jämföra försäljningen med det totala genomsnittet. Det totala genomsnittet skulle returneras från en underfråga. Du kan också använda underfrågor i medlemsoperatörer som IN. I stället för att hårdkoda in-satsen kan du använda en underfråga för att göra den mer dynamisk.
- HAVING-sats – Ett enda värde från en underfråga ingår i HAVING-satsens jämförelser.
Exempel på underfråga
SELECT SalesOrderID, LineTotal, (SELECT AVG(LineTotal) FROM Sales.SalesOrderDetail) AS AverageLineTotalFROM Sales.SalesOrderDetail
När det används i utvalda klausuler och jämförelseoperatorer som lika med, större än och mindre än , en underfråga kan bara returnera en rad. Om det används tillsammans med en medlemsoperatör, t.ex. IN, är det OK att frågan returnerar en eller flera rader.