sql >> Databasteknik >  >> RDS >> Database

Hur man kombinerar resultaten av två frågor i SQL

Problem:

Du vill visa data från givna kolumner (av liknande datatyp) från två tabeller i SQL.

Exempel:

Det finns två tabeller i vår databas:employee och customer .

employee Tabellen innehåller data i följande kolumner:id , förnamn , efternamn och ålder .

id förnamn efternamn ålder
1 Tom Miller 22
2 John Smith 26
3 Lisa Williams 30
4 Charles Davis 21
5 James Moore 22

customer Tabellen innehåller data i följande kolumner:id , förnamn , efternamn och ålder .

id förnamn efternamn ålder
1 Milano Smith 45
2 Charles Davis 21
3 Markera Backare 19

Låt oss i en resultatuppsättning visa förnamn, efternamn och ålder för alla personer i databasen, både anställda och kunder.

Lösning 1:

Vi använder UNION ALL för att sammanfoga data från kolumner i två tabeller.

Här är frågan du skulle skriva:

SELECT first_name, last_name, age FROM employee
UNION ALL
SELECT first_name, last_name, age FROM customer;

Här är resultatet:

förnamn efternamn ålder
Tom Miller 22
John Smith 26
Lisa Williams 30
Charles Davis 21
James Moore 28
Milano Smith 45
Charles Davis 21
Markera Backare 19

Diskussion:

Använd UNION ALL-satsen för att sammanfoga data från kolumner i två eller flera tabeller. I vårt exempel sammanfogar vi data från employee och customer tabeller. Till vänster om nyckelordet UNION ALL, sätt den första SELECT-satsen för att hämta data från den första tabellen (i vårt exempel, tabellen employee ). Till höger, använd en annan SELECT-sats för att hämta data från den andra tabellen (i vårt exempel, customer ).

Kom ihåg att vald data i båda tabellerna måste vara av samma datatyp i varje kolumn. Till exempel, om den första kolumnen i den första SELECT är en strängdatatyp, måste den första kolumnen i den andra SELECT också vara en strängdatatyp. Om den andra kolumnen i den första SELECT-satsen är ett heltal, måste den andra kolumnen i den andra tabellen också vara en heltalstyp.

I den första frågan valde vi ålder (åldern på den anställde, vilket är en heltalsdatatyp) för den tredje kolumnen. Därför är den tredje kolumnen i den andra SELECT också ett heltalsvärde; det är åldern av kunden.

De andra kolumnerna i båda SELECT-satserna är av samma datatyp. Men om värdena är desamma i båda tabellerna kommer de att visas flera gånger; till exempel visas 'Charles Davis 21' två gånger i resultatuppsättningen.

Vad händer om du inte vill ha flera identiska poster i resultattabellen? I det här fallet använder du UNION . Det liknar UNION ALL , men det tar bort dubbletter av poster. Titta på följande exempel.

Lösning 2:

Här är frågan som undviker dubbletter av poster:

SELECT first_name, last_name FROM employee
UNION 
SELECT first_name, last_name FROM customer;

Här är resultatet av ovanstående fråga:

förnamn efternamn
Markera Backare
James Moore
John Smith
Charles Davis
Milano Smith
Tom Miller
Lisa Williams

Obs!

UNION ALL är snabbare än UNION , men UNION tar bort dubbletter av rader. Valet beror på vilken resultatdata vi behöver.


  1. Det går inte att installera pg gem i Mavericks med Postgres.app

  2. Hur frågar jag efter XML-värden och attribut från tabellen i SQL Server?

  3. Använd MySQL relationsdatabaser på Debian 6 (Squeeze)

  4. Från lagrad procedur, returnera OUT-parameter &OUT-markör &analysresultat (Oracle)