Difference between revisions of "6238 Databaser Agenda/SQL JoinOrderGroup"

From Teknologisk videncenter
Jump to: navigation, search
(SUB Query)
(Having)
 
(9 intermediate revisions by the same user not shown)
Line 26: Line 26:
  
 
==Join==
 
==Join==
Med JOIN kan man lave forbindelse mellem to forskellige tabeller.
+
En anden metode er at anvende JOIN
 +
 
 +
<source lang=sql>
 
/* Vælg alt fra Saelger JOIN TelefonNr på Medarbejder nr */
 
/* Vælg alt fra Saelger JOIN TelefonNr på Medarbejder nr */
 
SELECT * FROM Saelger
 
SELECT * FROM Saelger
 
JOIN TelefonNr ON TelefonNr.Saelger = Saelger.MedarbNr;
 
JOIN TelefonNr ON TelefonNr.Saelger = Saelger.MedarbNr;
 +
</source>
  
Bemærk ‘Alias’ Saelger,RegistreringNr og Telefon der ændre navnet på output
+
Der kan også laves JOIN af flere tabeller. I dette tilfælde Saelger, Telefon og Bil.
 +
 
 +
<source lang=sql>
 +
/* 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;
 +
</source>
 +
 
 +
==Alias==
 +
Med Alias kan man ændre navne 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
 +
 
 +
<source lang=sql>
 
/* Vælg Saelger,RegistreringsNr, TelefonNr fra JOIN af Saelger, TelefonNr og Bil */
 
/* 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
 
SELECT Saelger.Navn AS Saelger, Bil.RegNr AS RegistreringsNr, TelefonNr.Nr AS Telefon FROM Saelger
 
JOIN TelefonNr ON TelefonNr.Saelger = Saelger.MedarbNr
 
JOIN TelefonNr ON TelefonNr.Saelger = Saelger.MedarbNr
 
JOIN Bil ON Bil.Saelger = Saelger.MedarbNr;
 
JOIN Bil ON Bil.Saelger = Saelger.MedarbNr;
 +
</source>
  
 
==Order==
 
==Order==
 
Med Order kan man sorterer på de data som selectes
 
Med Order kan man sorterer på de data som selectes
 +
<source lang=sql>
 
/* Vælg alt fra Kunde JOIN Saelger hvor sælger er startet før 2003. Sorter på Kunde.Navn */
 
/* Vælg alt fra Kunde JOIN Saelger hvor sælger er startet før 2003. Sorter på Kunde.Navn */
 
SELECT * FROM Kunde  
 
SELECT * FROM Kunde  
Line 44: Line 67:
 
WHERE Saelger.StartDato < '20030101'  
 
WHERE Saelger.StartDato < '20030101'  
 
ORDER BY Kunde.Navn;
 
ORDER BY Kunde.Navn;
 +
</source>
 +
 +
==Aggregate Functions==
 +
Med aggregate funktionerne kan du efterbehandle dine data.
 +
Du kan f.eks. tælle hvor mange telefon numre der er i telefon data basen, eller finde den vare der har den højeste pris.
 +
<source lang=sql>
 +
SELECT Count(*) FROM TelefonNr;
 +
SELECT Max(Pris) FROM Vare;
 +
</source>
 +
 +
Her er nogle andre nyttige funktioner
 +
 +
*AVG() - Returns the average value
 +
*COUNT() - Returns the number of rows
 +
*FIRST() - Returns the first value
 +
*LAST() - Returns the last value
 +
*MAX() - Returns the largest value
 +
*MIN() - Returns the smallest value
 +
*SUM() - Returns the sum
 +
 
==Group by==
 
==Group by==
 +
Når du har anvendt Aggregate funktioner kan du også vælge at gruppere dit output.
 +
 +
Her laves f.eks. en Count af Kunder Grupperet pr sælger. Output bliver til sidst sorteret på Sælger navn.
  
 +
<source lang=sql>
 
/* Tæl alle records gruperet på Saelger sorteret på saelger navn */
 
/* Tæl alle records gruperet på Saelger sorteret på saelger navn */
 
SELECT Saelger.Navn, COUNT(*) AS Kunder FROM Kunde  
 
SELECT Saelger.Navn, COUNT(*) AS Kunder FROM Kunde  
Line 51: Line 98:
 
GROUP BY Saelger.Navn
 
GROUP BY Saelger.Navn
 
ORDER BY Saelger.Navn;
 
ORDER BY Saelger.Navn;
 +
</source>
 +
 
==Having==
 
==Having==
 +
Med Having kan du vælge kun at se en del af resultatet. Her er f.eks. valgt kun at se Sælgere der har mere end 4 kunder.
  
 +
<source lang=sql>
 
/* Tæl alle records gruperet på Saelger sorteret på saelger navn men udskriv kun de som er større en 4*/
 
/* 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  
 
SELECT Saelger.Navn, COUNT(*) AS Kunder FROM Kunde  
Line 59: Line 110:
 
HAVING COUNT(*) > 4
 
HAVING COUNT(*) > 4
 
ORDER BY Saelger.Navn;
 
ORDER BY Saelger.Navn;
+
</source>
 +
 
 
==Logical querry processing==
 
==Logical querry processing==
[[File:6238 Databaser Agenda SQL JoinOrderGroup1.png|648px]]
 
  
 
[[File:6238 Databaser Agenda SQL JoinOrderGroup2.gif|664px]]
 
[[File:6238 Databaser Agenda SQL JoinOrderGroup2.gif|664px]]

Latest revision as of 10:47, 27 October 2015

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.

6238 Databaser Agenda SQLCreateInsertSelect2.png

6238 Databaser Agenda SQLCreateInsertSelect5.png 6238 Databaser Agenda SQLCreateInsertSelect7.png

6238 Databaser Agenda SQLCreateInsertSelect4.png 6238 Databaser Agenda SQLCreateInsertSelect3.png 6238 Databaser Agenda SQLCreateInsertSelect6.png

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;

Aggregate Functions

Med aggregate funktionerne kan du efterbehandle dine data. Du kan f.eks. tælle hvor mange telefon numre der er i telefon data basen, eller finde den vare der har den højeste pris.

SELECT Count(*) FROM TelefonNr;
SELECT Max(Pris) FROM Vare;

Her er nogle andre nyttige funktioner

  • AVG() - Returns the average value
  • COUNT() - Returns the number of rows
  • FIRST() - Returns the first value
  • LAST() - Returns the last value
  • MAX() - Returns the largest value
  • MIN() - Returns the smallest value
  • SUM() - Returns the sum

Group by

Når du har anvendt Aggregate funktioner kan du også vælge at gruppere dit output.

Her laves f.eks. en Count af Kunder Grupperet pr sælger. Output bliver til sidst sorteret på Sælger navn.

/* 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

Med Having kan du vælge kun at se en del af resultatet. Her er f.eks. valgt kun at se Sælgere der har mere end 4 kunder.

/* 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;

Logical querry processing

6238 Databaser Agenda SQL JoinOrderGroup2.gif