Klas Veldnaam Datatype Lengte KLASNAAM Short Text 3 Characters JONGENS Number Integer MEISJES Number Integer Lessen Veldnaam Datatype Lengte KLASNAAM Short Text 3 Characters DOCCODE Short Text 3 Characters DAG Number Integer UUR Number Integer VAKCODE Short Text 3 Characters Docenten Veldnaam Datatype Lengte DOCCODE Short Text 3 Characters URENPERWEEK Number Integer TAKEN Short Text 24 Characters Maak de tabellen en relaties met SQL queries (DDL) Voeg de records toe met SQL queries (DML) Klas: H3a, 12, 14 Lessen: H3a, ES, 2, 3, ICT Docenten: ES, 27, Sectie Voorzitter Open Games_DB Toon de relaties (met Access tools), welke zijn er? Toon alle velden van GENRES met SQL query (DML) Toon alle velden van GAMES met SQL query (DML) Toon alle velden van UITGEVERS met SQL query (DML) Toon alle unieke jaren dat er een game gemaakt werd van GAMES Toon alle titels en JAAR van GAMES die een O in de titel hebben Toon alle UITGEVERNAAM velden die beginnen met een M Toon TITEL, JAAR en PLATVORM van GAMES die voor het jaar 2000 uitkwamen op Nintendo 64 Toon TITEL, JAAR en UITGEVERNAAM van GAMES die zijn uitgegeven door een uitgever met cap in de naam en sorteer het resultaat op TITEL
Oplossingen: Tabelnaam = blauw Veldnaam = rood Alias = groen Keywords = bold Data = oranje Maak eerst de buitenste tabellen en de tussentabel als laatst: CREATE TABLE Klas ( KLASNAAM TEXT(3) CONSTRAINT PK_KLASNAAM PRIMARY KEY, JONGENS INTEGER, MEISJES INTEGER ); CREATE TABLE Docenten ( DOCCODE TEXT(3) CONSTRAINT PK_ DOCCODE PRIMARY KEY, URENPERWEEK INTEGER, TAKEN TEXT(24) ); Klik op de gecreëerde tabellen en kijk met design view of ze kloppen. Zijn bijv. de sleutels correct gezet, kloppen de veldlengtes enz. CREATE TABLE Lessen ( KLASNAAM TEXT(3) CONSTRAINT FK_KLASNAAM REFERENCES Klas(KLASNAAM), DOCCODE TEXT(3) CONSTRAINT FK_DOCCODE REFERENCES Docenten(DOCCODE), DAG INTEGER, UUR INTEGER, VAKCODE TEXT(3) ); Klik op de Database Tools / Relationships en kijk of de relaties kloppen. De 2 regels met REFERENCES hebben als het goed is de relaties gemaakt. Dit kan alleen maar als de tabellen Klas en Docenten bestaan en dus eerst zijn gemaakt. Bewaar (Save) deze als 3 aparte queries.
Voer nu per tabel een record in met de juiste queries. Per tabel 1, dus 3x een query maken. INSERT INTO Klas ( KLASNAAM, JONGENS, MEISJES ) VALUES ( H3a, 12, 14 ); De toegevoegde extra spaties zijn niet zo belangrijk. Dat is alleen maar om de leesbaarheid te verbeteren. Alles mag zelfs op 1 regel maar het bovenstaande voorbeeld is makkelijker leesbaar. INSERT INTO Docenten ( DOCCODE, URENPERWEEK, TAKEN ) VALUES ( ES, 27, Sectie Voorzitter ); INSERT INTO Lessen ( KLASNAAM, DOCCODE, DAG, UUR, VAKCODE ) VALUES ( H3a, ES, 2, 3, ICT ); Het aantal values moet overeenkomen met het aantal kolommen dat je hebt opgegeven. Dus 5 in het bovenstaande geval. Bewaar dit ook weer als 3 aparte queries. Dus samen met de CREATE TABLE queries heb je nu 6 queries in total en daarmee is het eerste gedeelte klaar. Bewaar dit in een file op de Desktop.
SELECT * FROM GENRES; Toon alle velden van GENRES SELECT * FROM GAMES; Toon alle velden van GAMES SELECT * FROM UITGEVERS; Toon alle velden van UITGEVERS Naast het bekijken van Database Tools / Relationships, om een indruk te krijgen van de structuur van een database, zijn de bovenstaande SQL commando s handig om te zien wat er in de tabellen staat en hoe de kolommen per tabel heten. SELECT DISTINCT JAAR FROM GAMES; Toon alle unieke jaren dat er een game gemaakt werd van GAMES SELECT TITEL, JAAR FROM GAMES WHERE TITEL LIKE *o* ; Toon alle titels en JAAR van GAMES die een O in de titel hebben. LIKE is NIET case sensitive! SELECT TITEL, JAAR FROM GAMES WHERE TITEL NOT LIKE *o* ; Omgekeerde geval : Toon alle titels en JAAR van GAMES die GEEN O in de titel hebben SELECT COUNT(*) FROM GAMES WHERE TITEL LIKE *o* ; Tellen hoeveel titels er een O in de titel hebben. SELECT UITGEVERNAAM FROM UITGEVERS WHERE TITEL LIKE m* ; Toon alle UITGEVERNAAM velden die beginnen met een M (geen * voor de m)
SELECT GAMES.TITEL, GAMES.JAAR, PLATVORMEN.PLATVORM FROM GAMES, PLATVORMEN, GAME_PLATVORM WHERE PLATVORMEN.PLATVORM = "Nintendo 64" AND GAMES.JAAR < 2000 AND PLATVORMEN.PLATVORM_ID = GAME_PLATVORM.PLATVORM_ID AND GAME_PLATVORM.GAME_ID = GAMES.GAME_ID; Toon TITEL, JAAR en PLATVORM van GAMES die voor het jaar 2000 uitkwamen op Nintendo 64 Merk op dat zodra we gegevens uit meerdere tabellen gaan halen het verstandig is om in de notatie van kolomnamen de tabelnaam op te nemen. Zet deze er met een punt voor. Voorbeeld: GAMES.TITEL In het bovenstaande voorbeeld laten we kolommen zien uit 2 tabellen maar er is een 3e tabel nodig om GAMES en PLATVORMEN met elkaar te verbinden (zie relationships): GAME_PLATVORM De 2 laatste condities zijn nodig om via de relaties de records die bij elkaar horen ook bij elkaar te houden: ----- AND PLATVORMEN.PLATVORM_ID = GAME_PLATVORM.PLATVORM_ID AND GAME_PLATVORM.GAME_ID = GAMES.GAME_ID; Deze condities zijn opgebouwd door een Foreign Key van 1 tabel met een Primary Key uit de gerelateerde tabel te vergelijken. Grafische voorstelling: De rode velden moeten we tonen. Op 2 van de rode velden hebben we 2 condities (zie blauwe tekst). De blauwe velden zijn sleutelvelden die via de relaties de gegevens bij elkaar houden. Door ze met een = teken aan elkaar gelijk te stellen koppelen we de 3 tabellen aan elkaar.
SELECT GAMES.TITEL, GAMES.JAAR, UITGEVERS.UITGEVERNAAM FROM GAMES, UITGEVERS, GAME_UITGEVER WHERE UITGEVERS.UITGEVERNAAM LIKE "*Cap*" AND UITGEVERS.UITGEVER_ID = GAME_UITGEVER.UITGEVER_ID AND GAME_UITGEVER.GAME_ID = GAMES.GAME_ID ORDER BY GAMES.TITEL; Toon TITEL, JAAR en UITGEVERNAAM van GAMES die zijn uitgegeven door een uitgever met cap in de naam en sorteer het resultaat op TITEL In het laatste voorbeeld zoeken we weer in 3 tabellen en sorteren we tenslotte op GAMES.TITEL Het keyword ASC is weggelaten, dan wordt ASC (oplopend) als default waarde aangenomen. ----- ORDER BY GAMES.TITEL ASC; Voorbeeld met oplopend sorteren. ----- ORDER BY GAMES.TITEL DESC; Voorbeeld met aflopend sorteren.