6238 Databaser Agenda/SQL JoinOrderGroup
Contents
6238 Databaser Agenda SQL JoinOrderGroup
Fra 6238_Databaser_Agenda/SQLCreateInsertSelect har vi lavet tabeller til viste database.
Du har også set hvordan man med en SELECT sætning kan trække data ud af databasen.
SUB Query
Et sub query kan anvendes hvis vi skal samle data fra flere tabeller. I eksemplet er Saelger og TelefonNr splittet i 2, men hvad hvis vi gerne vil vide hvilken sælger der har et bestemt telefon nr.
Her findes navnet på den sæger som har telefon nr 45653465
SELECT Navn FROM Saelger WHERE MedarbNr IN
(SELECT Saelger FROM TelefonNr WHERE Nr = '45653465');
Den SELECT sætning der er inde i parantesen finder nummeret på medarbejderen og det bruger vi efterfølgende til at finde Navn på medarbejderen.
Join
En anden metode er at anvende JOIN
/* Vælg alt fra Saelger JOIN TelefonNr på Medarbejder nr */
SELECT * FROM Saelger
JOIN TelefonNr ON TelefonNr.Saelger = Saelger.MedarbNr;
Der kan også laves JOIN af flere tabeller. I dette tilfælde Saelger, Telefon og Bil.
/* Vælg Saelger,RegistreringsNr, TelefonNr fra JOIN af Saelger, TelefonNr og Bil */
SELECT * FROM Saelger
JOIN TelefonNr ON TelefonNr.Saelger = Saelger.MedarbNr
JOIN Bil ON Bil.Saelger = Saelger.MedarbNr;
Alias
Med Alias kan man ændre navne på sit output. Herunder er samme JOIN som tidligere med output er ændret til
Saelger.Navn AS Saelger
Bil.RegNr AS RegistreringsNr
TelefonNr.Nr AS Telefon
/* Vælg Saelger,RegistreringsNr, TelefonNr fra JOIN af Saelger, TelefonNr og Bil */
SELECT Saelger.Navn AS Saelger, Bil.RegNr AS RegistreringsNr, TelefonNr.Nr AS Telefon FROM Saelger
JOIN TelefonNr ON TelefonNr.Saelger = Saelger.MedarbNr
JOIN Bil ON Bil.Saelger = Saelger.MedarbNr;
Order
Med Order kan man sorterer på de data som selectes
/* Vælg alt fra Kunde JOIN Saelger hvor sælger er startet før 2003. Sorter på Kunde.Navn */
SELECT * FROM Kunde
JOIN Saelger ON Kunde.Saelger = Saelger.MedarbNr
WHERE Saelger.StartDato < '20030101'
ORDER BY Kunde.Navn;
Group by
/* Tæl alle records gruperet på Saelger sorteret på saelger navn */
SELECT Saelger.Navn, COUNT(*) AS Kunder FROM Kunde
JOIN Saelger ON Kunde.Saelger = Saelger.MedarbNr
GROUP BY Saelger.Navn
ORDER BY Saelger.Navn;
Having
/* Tæl alle records gruperet på Saelger sorteret på saelger navn men udskriv kun de som er større en 4*/ SELECT Saelger.Navn, COUNT(*) AS Kunder FROM Kunde JOIN Saelger ON Kunde.Saelger = Saelger.MedarbNr GROUP BY Saelger.Navn HAVING COUNT(*) > 4 ORDER BY Saelger.Navn;