Nederlands Minecraft Forum

Minecraft => Tutorials => Topic gestart door: ArjanforGames op 24 augustus 2016, 21:31:12

Titel: [TUT] De basis van SQL
Bericht door: ArjanforGames op 24 augustus 2016, 21:31:12
Voordat je begint
Dit is mijn eerste tutorial dus ik heb erg belang bij feedback en tips! Deze tutorial kan worden gebruikt bij het maken van Minecraft plugins, maar is zeker niet gelimiteerd tot Minecraft. SQL kan in bijna alle programmeertalen worden gebruikt en is dus zeker een must om onder de knie te hebben!


Inleiding
In deze tekst-based tutorial ga ik je leren hoe de basis van SQL in elkaar zit en zal ik uitleg geven bij voorbeeldqueries zodat je weet hoe de desbetreffende query er uit ziet en dat je weet hoe hij precies werkt. Ook zal ik een paar simpele tabellen toevoegen om de voorbeelden nog meer te visualiseren. Deze SQL tutorial is puur gericht op zichzelf en ik ga niet bespreken hoe je dit in je bestaande plugins kunt implementeren. Als er onduidelijkheden zijn in de tutorial dan raad ik je aan om even in een reactie te plaatsen waar het om gaat zodat ik het kan aanpassen.

Wat is SQL en waar staat het voor?
SQL, of Structured Query Language, werd tegen het einde van de jaren zeventig ontwikkeld door IBM Corporation en in 1986 door het American National Standards Institute (ANSI) benoemd tot een Amerikaanse nationale standaard en in 1987 door de International Organistation of Standardization (ISO). SQL is geen volledige programmeertaal zoals Java of C#. SQL wordt in plaats daarvan een datasubtaal genoemd, omdat deze taal alleen statements kent voor het definiëren en verwerken van databasegegevens en databasemetagegevens. Je kunt SQL-statements op allerlei verschillende manieren gebruiken. In deze tutorial gaan we echter alleen de basis dingen behandelen plus de kracht van SQL laten zien. SQL is heel precies en daarom is voor het programmeren in SQL enige vaardigheid essentieel.

De Eerste Stappen
Eerst gaan we even naar de fundamentele basis voor SQL-querystatements kijken. De basis wordt ook wel beschreven als SELECT/FROM/WHERE, dit zijn de essentiële functies in een SQL-statement. Stel je voor dat we de volgende table hebben:

GAMES
Spel Winkel Prijs
Minecraft InterToys 20
Minecraft BartSmit 20
Battlefield BartSmit 50
Figuur 1.1

Een database bevat meestal meerdere tables. Elke table wordt gekenmerkt door een eigen naam, in dit geval geef ik elke table een ‘all caps’ naam. Dit is niet verplicht, maar dit maakt het voor nu makkelijker om het uit elkaar te houden. Tables bevatten rijen (records) met data. De bovenstaande tabel (Figuur 1.1) bevat drie records met elk drie kolommen (Spel, Winkel en Prijs). Als eerste gaan we alle informatie ophalen uit de GAMES table, dit doen we als volgt:

SELECT * FROM GAMES;
Dit is handig als je alle info wil hebben uit een table, maar specifiek is het niet. Laten we in het volgende hoofdstukje is gaan kijken hoe we specifiek een record kunnen ophalen.

Het SELECT Statement
Het SELECT statement wordt gebruikt om informatie te selecteren uit de database. Het resultaat van de statement wordt in een resultaat tabel gezet. Dit wordt ook wel een result-set genoemd.
Stel nou dat we uit de tabel van figuur 1.1 de spellen en de prijs willen verkrijgen, de winkel is niet interessant. Dit zouden we op de volgende manier kunnen doen:

SELECT Spel, Prijs FROM GAMES;
Het resultaat van dit statement is:

Spel Prijs
Minecraft 20
Minecraft 20
Battlefield 50

Zoals je ziet staat Minecraft er twee keer tussen. Omdat de prijs toch hetzelfde is zien we liever dat het er maar een keer tussen staat. Om dubbele records te voorkomen kunnen we ‘DISTINCT’ gebruiken. Dit betekent ook wel different.

SELECT DISTINCT Spel, Prijs FROM GAMES;
Het resultaat van dit statement is:

Spel Prijs
Minecraft 20
Battlefield 50

Wat we ook kunnen doen is alle spellen selecteren die bij de Bart Smit te koop zijn. Om dit te bereiken kunnen we de volgende query uitvoeren.

SELECT Spel, Prijs FROM GAMES WHERE Winkel = ‘BartSmit’;
Zoals je ziet is de winkelnaam tussen twee apostroffen gezet. Bij tekenreeksen is dit verplicht, maar bij getallen kun je het weg laten.

De kracht van SQL
Omdat ik de tutorial niet al te lang wil maken zal ik eerst nog wat handige dingen vertellen en zal ik de meer uitgebreidere en specifiekere queries achterwege laten.
SQL kent namelijk ook een aantal functies om met records te kunnen rekenen.
Enkele rekenfuncties zijn: MIN, MAX en AVG. Voordat ik hier voorbeelden van geef wil ik nog even uitleg geven over de AS statement. Dit gebruik je om een naam aan het resultaat te geven van bijvoorbeeld een MIN of MAX statement.

SELECT MIN(Prijs) AS GoedkoopsteSpel FROM GAMES;
GoedkoopsteSpel
20

Het bovenstaande statement zoekt naar het laagste getal in de ‘Prijs’ kolom. In dit geval 20.
Precies hetzelfde geld voor de MAX functie alleen resulteert dit in het hoogste bedrag, namelijk 50.

Het volgende statement verkrijgt de gemiddelde prijs van alle records samen.

SELECT AVG(Prijs) AS Gemiddelde FROM GAMES;
Gemiddelde
30

In dit geval krijg je dan 20 + 20 + 50 = 90. 90 / 3 = 30. Dit is natuurlijk geen goed resultaat want we rekenen Minecraft twee keer mee. Om dit te voorkomen gebruiken we een functie die we al eerder hebben behandeld namelijk ‘DISTINCT’. De query ziet er dan als volgt uit:

SELECT AVG(DISTINCT Prijs) AS gemiddelde FROM GAMES;
Nu zal het resulteren in 20 + 50 = 70. 70 / 2 = 35.

Nawoord
De tutorial is misschien wat klein en minimalistisch, maar dat komt omdat ik niet weet of een tutorial over SQL hier in de smaakt valt. Mochten mensen hier echt iets aan hebben dan komt er zeker een deel twee met uitgebreidere statements, specifiekere statements en info halen uit meerdere tabellen (subqueries). Remember, give feedback  ;)
Titel: Re: [TUT] De basis van SQL
Bericht door: VirtualGhoul op 25 augustus 2016, 10:33:43
Ziet er goed uit. Ik wilde me al langer verdiepen in SQL dus dit lijkt me een mooi beginpunt.
Titel: Re: [TUT] De basis van SQL
Bericht door: Dennis op 25 augustus 2016, 11:12:33
Leuke tutorial! :) SQL kan heel leuk en ver gaan.

Wat ik me wel afvraag, is er een reden dat je je columns met hoofdletters schrijft?
Titel: Re: [TUT] De basis van SQL
Bericht door: Enzyme op 25 augustus 2016, 12:22:51
Nice tutorial!
Titel: Re: [TUT] De basis van SQL
Bericht door: ArjanforGames op 25 augustus 2016, 14:47:18
Ziet er goed uit. Ik wilde me al langer verdiepen in SQL dus dit lijkt me een mooi beginpunt.
Thanks!

Leuke tutorial! :) SQL kan heel leuk en ver gaan.

Wat ik me wel afvraag, is er een reden dat je je columns met hoofdletters schrijft?
Ik zie dat ik dat ben vergeten te vermelden. In principe mag je zelf weten hoe je tabel namen vernoemd en hoe je kolommen vernoemd, maar voor het gemak gaf ik de tabel een "all-caps" naam en de kolommen per woord een hoofdletter.

Nice tutorial!
Dankje.
Titel: Re: [TUT] De basis van SQL
Bericht door: devver op 25 augustus 2016, 14:56:55
Titel: Re: [TUT] De basis van SQL
Bericht door: ArjanforGames op 25 augustus 2016, 15:48:48
Daar zijn natuurlijk uitzonderingen op, en dat zijn er ondertussen best wat
https://dev.mysql.com/doc/refman/5.7/en/keywords.html
Ik zie er inderdaad wat tussen staan. MySQL is echter een database management systeem en deze tutorial is gewijd aan SQL. Er zijn meerdere database management systemen die andere regels hebben met betrekking tot namen en query syntax.
Titel: Re: [TUT] De basis van SQL
Bericht door: devver op 25 augustus 2016, 15:59:32
Daar heb je dan weer gelijk in.  :)
 Ik probeerde echter alleen duidelijk te maken dat je over het algemeen wel op moet letten hoe je een tabel noemt.
Titel: Re: [TUT] De basis van SQL
Bericht door: ArjanforGames op 25 augustus 2016, 17:31:03
Het is echter de standaard onder developers om tabelnamen als kleine letters te schrijven met een underscore tussen letters, zoals 'tabel_naam'
Het klopt dat dat veelal wordt gedaan inderdaad, maar nogmaals: ik heb het op deze manier gedaan zodat het voor de lezer (zonder enige database kennis) gemakkelijk is om te volgen wat er gebeurd.
Plus, het is 'gebruikelijk', maar niet verplicht.