Hämta data
SELECT * FROM celebrities
Lagra
INSERT INTO celebrities (name, country) VALUES ("Johnny", "USA")
Ta bort data
DELETE FROM celebrities WHERE name = "Johnny"
Uppdatera data enbart
UPDATE celebrities
SET name="Jonne"
WHERE name="Johnny"
Koppla ihop det med PHP
Först behövs kopplingen till databasen, flera databaser? Flera kopplingar
$pdo = new PDO(
"mysql:host=localhost:8889;dbname=celebrities;charset=utf8",
"root",
"root"
);
Sedan utfärda ett prepared statement och skicka till databasen
$statement = $pdo->prepare("SELECT * FROM celebrities");
$statement->execute(); //Run the query
//Fetch data from the table
$returned_data = $statement->fetchAll(PDO::FETCH_ASSOC);
:
i prepared statement betyder placeholder
$statement = $pdo->prepare("DELETE FROM celebrities WHERE id= :id");
$statement->execute(array(":id" => 5));
$returned_data = $statement->fetchAll(PDO::FETCH_ASSOC);
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. Vilka tabeller behöver vi och vilken information ska de innehålla?
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;