SELECT COUNT(*) FROM Robotar;b)
SELECT COUNT(*) FROM Robotar WHERE Färg = 'Blå';Följdfråga: I vilken ordning görs COUNT och WHERE-villkoret?
c)
SELECT MAX(Nummer) FROM Robotar;d)
SELECT Färg FROM Robotar WHERE Nummer = 3;e)
SELECT Färg FROM Robotar WHERE Nummer = (SELECT MAX(Nummer) FROM Robotar);Följdfråga: Hade det inte varit enklare att få fram numret så här:
SELECT Färg From Robotar ORDER BY Nummer DESC LIMIT 1;
SELECT Färg, COUNT(*) AS Antal From Robotar GROUP BY Färg;b)
CREATE VIEW "Antal Robotar Per Färg" AS SELECT Färg, COUNT(*) AS Antal FROM Robotar GROUP BY Färg;c)
SELECT Färg FROM "Antal Robotar Per Färg" WHERE Antal = (SELECT MAX(Antal) FROM "Antal Robotar Per Färg");Följdfrågor: Vad är en vy? Vilka skillnader är det mellan en vy och en tabell? Vilka likheter? Har en vy några nackdelar? Vad är en CTE (Common Table Expression)? Kunde man använt en CTE i stället för en vy?
Med en CTE (fungerar inte i den gamla Mimer-versionen som finns på basen.oru.se):
WITH "Antal Robotar Per Färg" AS (SELECT Färg, COUNT(*) AS Antal FROM Robotar GROUP BY Färg) SELECT Färg FROM "Antal Robotar Per Färg" WHERE Antal = (SELECT MAX(Antal) FROM "Antal Robotar Per Färg");
SELECT Robotar.Nummer AS Robot, Strider.Datum, Deltagare.Resultat FROM Robotar, Deltagare, Strider WHERE Robotar.Nummer = Deltagare.Robot AND Deltagare.Strid = Strider.Nummer;Explicit join:
SELECT Robotar.Nummer AS Robot, Strider.Datum, Deltagare.Resultat FROM Robotar JOIN Deltagare ON Robotar.Nummer = Deltagare.Robot JOIN Strider ON Deltagare.Strid = Strider.Nummer;
SELECT Robotar.Nummer AS Robot, COUNT(*) AS Antal FROM Robotar, Deltagare WHERE Robotar.Nummer = Deltagare.Robot GROUP BY Robotar.Nummer;Med en explicit join:
SELECT Robotar.Nummer AS Robot, COUNT(*) AS Antal FROM Robotar JOIN Deltagare ON Robotar.Nummer = Deltagare.Robot GROUP BY Robotar.Nummer;Om man inser att det räcker med tabellen Deltagare, och då behövs ingen join alls:
SELECT Robot, COUNT(*) AS Antal FROM Deltagare GROUP BY Robot;
SELECT Robotar.Nummer AS Robot, COUNT(Deltagare.Robot) AS Antal FROM Robotar LEFT JOIN Deltagare ON Robotar.Nummer = Deltagare.Robot GROUP BY Robotar.Nummer;