Reduce data redundancy and improve data integrity
Vi ska normalisera våra databaser för att undvika att lagra för mycket data
Samt att undvika såkallade anomalies
Om vi duplicerar denna data så utsätts informationen för risker
Normalisering innebär att man delar upp tabeller så att riskerna elimineras.
Eventull risk
Födelsedagen behöver aldrig ändras men kan råka göra det ändå
Viktigt att dela upp data i olika tabeller för att undvika avvikelser
Det svåra är att sedan sätta ihop tabellerna igen för att få det resultat man söker
Vilka kolumner och tabeller behövs för följande:
Övergripande struktur, inte så detaljerat
Använd excel, sheets, paint, papper & penna etc.
När ni är klara, jämför med en annan grupp.
Alla JOINS skapar en ny tabell som innehåller alla kolumner från både den första och den andra tabellen. Det som skiljer JOINS är vilka rader som tas med.
CROSS
- alla rader (behövs inga gemensamma kolumner)INNER
- alla rader där värdet i en gemensam kolumn stämmer överensLEFT
- alla rader från en INNER JOIN plus även de från den "vänstra" tabellen som inte matchar något i den högraRIGHT
- som en LEFT JOIN fast tvärtomAlla joins utgår ifrån CROSS JOIN
SELECT *
FROM books
INNER JOIN authors
ON books.author = authors.author
JOINS hör till FROM-delen i en SELECT-query och är det första som händer när databasen hämtar data.
WHERE, SELECT och GROUP BY kommer senare.
SELECT * FROM authors AS a;
SELECT * FROM authors a;
Blir användbart när vi har flera olika tabeller! Mindre att skriva
CONCAT() - Lägger ihop strängar
AVG() - Tar ut medelvärdet
MAX() - Tar ut maxvärdet
MIN() - Tar ut minvärdet
Det finns alltid flera olika sätt att lösa alla SQL-queries
SELECT * FROM city ORDER BY population ASC LIMIT 1;
När man aggregerar (count, avg, max, min) måste man ibland gruppera efter olika kolumner
Vad händer när ni använder MAX();
för att få ut flera maxvärden
SELECT author, COUNT(books) AS books FROM books;
SELECT author, COUNT(books) AS books FROM books GROUP BY author;