Hoe kan ik gegevens uit een database selecteren en manipuleren met SQL?

Trefwoorden: SQL, relationele database, query, database, SSS, server-side

1. Inleiding


SQL is een taal die dient om te communiceren met database als MySQL, SQL server,... In dit artikel zal ik de vier meest gebruikte opdrachten toelichten. Gegevens selecteren, bewerken, toevoegen aan een tabel en gegevens verwijderen.
Je kan bij deze constructies ook zeer uitgebreid gaan. Maar voorlopig bekijken we de meest voor de hand liggende met één tabel.
Voor je SQL gaat gebruiken heb je dus een tabel nodig in een database. Tabellen kan je ook aanmaken met SQL, maar ook dat laten we links liggen.
Als je nog geen tabel in de database hebt kan je jouw tabel ook opstellen met een beheerprogramma van de database zoals phpMyAdmin.

SQL kan je gebruiken voor databases offline, maar ook online.
MySQL bijvoorbeeld wordt veel gebruikt met dynamische programmeertalen als PHP en ASP. SQL wordt dan gebruikt voor het communiceren met de database vanuit de webpagina.

Een regel met een SQL-opdracht wordt een query genoemd. Deze benaming zullen we dus ook verder in dit artikel gebruiken

We zullen verschillende voorbeelden schetsen met volgende tabel (natuurlijk met fictieve gegevens:
adressen:

naamvoornaamstraatgemeentepostcode
JanssensJanKortrijkstraatZwevegem8550
MaesPietBakkerstraatBrussel1000
OpsomerSimonDoorniksesteenwegKotrijk8500


2. Meest gebruikte opdrachten


Nu zullen we de meest gebruikte opdrachten bespreken.

2.1. SELECT

2.1.1. Gegevens selecteren met SELECT

De eerste opdracht is SELECT, deze wordt waarschijnlijk het meest gebruikt en dient om records of gegevens uit de database te selecteren. Omdat deze het meest gebruikt is, zullen we hier dieper op ingaan dan bij de andere opdrachten.
Je begint de select-opdracht met:
CODE
  1. SELECT (veld) FROM (tabel)

Je geeft dus aan dat je gegevens wil selecteren vanuit een bepaalde tabel. Na SELECT geef je aan wat je wil selecteren van die tabel. Hier enkele voorbeelden:
CODE
  1. SELECT * FROM adressen
  2. SELECT postcode, gemeente FROM adressen

De eerste query zal alles uit de tabel adressen weergeven. Het sterretje (*) schrijf je dus al je alles uit de tabel wil halen.

Als je bepaalde gegevens nodig hebt kan je de namen van de kolommen intypen gescheiden door een komma.
De tweede query zal bv. Volgende gegevens selecteren:

Zwevegem 8550
Brussel 1000
Kotrijk 8500


Op dezelfde manier kan je ook gegevens uit meerdere tabellen selecteren.

2.1.2. Gegevens sorteren met ORDER BY

Met SQL kan je gegevens uit een tabel ook sorteren. Daarvoor gebruik je de opdracht ODER BY
CODE
  1. SELECT * FROM adressen ORDER BY naam

Met bovenstaande query worden alle gegevens uit de tabel adressen oplopen gesorteed op naam. Standaard wordt normaal oplopend gesorteerd (van A naar Z of bij numerieke waarden van 1 naar oneindig) Je kan dit ook aangeven met ASC (van ascending).
Je kan echter ook aflopend sorteren, dit doe je met DESC (van descending).
CODE
  1. SELECT * FROM adressen ORDER BY naam DESC

Deze query selecteert de gegevens uit de tabel adressen en sorteert ze aflopend op "naam", dus komt "Opsomer" eerst te staan, daarna "Maes" en als laatste "Janssens".

Ook hier kan je sorteren op meerdere velden door deze te scheiden van een komma. Er wordt dan eerst op het eerste veld gesorteerd en daarna op het tweede aangegeven veld.
Stel dat je sorteert op naam en voornaam en er zitten 2 mensen met de naam "Janssens" in je tabel. Dan wordt gesorteerd op de voornaam.

2.1.3. Selectief gegevens ophalen met WHERE

Als je slechts enkele gegevens wil selecteren uit je tabel kan je 2 manieren gebruiken.
De eerste is met de voorwaarde WHERE.
Deze verwacht een naam uit de tabel en een parameter tussen quotes.
CODE
  1. SELECT * FROM adressen WHERE voornaam = 'Simon'

Deze query selecteert alle gegevens uit de tabel adressen waar de voornaam gelijk is aan Simon.
Dit heeft als gevolg dat in onze tabel de derde rij wordt geselecteerd.
Je kan ook meerdere parameters opgeven met AND, OR en NOT.
CODE
  1. SELECT * FROM adressen WHERE voornaam = 'Simon' AND naam = 'Opsomer'

Deze query selecteert de gegevens waar de voornaam Simon is en de achternaam Opsomer.
AND betekent dus dat het record aan beide waarden moet voldoen. OR betekent dat één van de waarden moet kloppen voor het record en NOT betekent dat de parameter niet de gevolgde waarde mag hebben.

2.1.4. Selectief gegevens ophalen met LIMIT

De tweede manier om enkele gegevens te selecteren is met LIMIT. Hierbij moet je met twee numerieke waarden aangeven, gescheiden door een komma. De eerste is de positie uit de tabel vanaf waar je gegevens wil selecteren, de tweede dient om aan te geven hoeveel records je wil selecteren.
LIMIT kan handig zijn als je maar enkele gegevens op een pagina wil tonen. Zoals bij een gastenboek.
CODE
  1. SELECT * FROM adressen LIMIT 0, 2

Deze query geeft records 1 en 2 weer uit onze tabel.

Let op!:
Je ziet dat de beginpositie in de query 0 is, dit komt omdat de databases tellen vanaf 0. Dus als je LIMIT 1, 2 schrijft, zullen record 2 en 3 weergegeven worden.

2.1.5. Samenvatting SELECT

We hebben gezien dat je met SELECT gegevens kan selecteren uit één of meerdere tabellen. Dit kan samengevat worden in volgende code.
CODE
  1. SELECT (velden / *) FROM (tabellen)
  2. WHERE (voorwaarde)
  3. ORDER BY (veld om te sorteren)(DESC / ASC)
  4. LIMIT (beginpostie), (aantal te selecteren velden)

Hierbij zijn SELECT en FROM verplicht, de rest is optioneel.

Het is ook belangrijk om te weten dat je meerdere opdrachten kan combineren. In de bovenstaande voorbeelden hebben we telkens maar één opdracht per query gebruikt. Maar het is dus perfect mogelijk met LIMIT enkele velden te selecteren die je met ORDER BY sorteert.

2.2. UPDATE

2.2.1. Gegevens wijzigen met UPDATE

Om gegevens te wijzigen in de tabel gebruik je UPDATE. Deze opdracht kan je toepassen op één record, maar ook op meerdere records.
CODE
  1. UPDATE adressen SET voornaam = 'Simon'

Met deze code worden alle voornamen uit de tabel adressen de waarde Simon meegegeven. Uiteraard worden de vorige waarden gewist en vervangen door de nieuwe.

Je kan ook meerdere velden een nieuwe waarde geven, geef daarvoor gewoon verschillende parameters op gescheiden door een komma.

Merk op dat je tekenreeksen tussen quotes plaatst.

2.2.2. Gegevens selectief wijzigen met WHERE

Natuurlijk zou UPDATE helemaal niet zo handig zijn als je enkel de waarden van de gehele tabel kan aanpassen. Daarvoor kan je ook hier de WHERE-opdracht gebruiken.
CODE
  1. UPDATE adressen SET gemeente = 'Bruxelles' WHERE gemeente = 'Brussel'

Deze query past alle gemeentes aan in Bruxelles als de waarde van de gemeente Brussel is.
Ook hier is het mogelijk meerdere voorwaarden bij de WHERE te plaatsen.

Let op!:
Meestal wordt bij het wijzigen van gegevens de primaire sleutel van de tabel als voorwaarde meegegeven bij de WHERE-opdracht. Zo ben je er zeker van dat er maar één enkel record gewijzigd wordt.

2.2.3. Samenvatting UPDATE

UPDATE dient dus om gegevens te wijzigen en kan als volgt worden veralgemeend.
CODE
  1. UPDATE (tabel) SET (veld) = (waarde)
  2. WHERE (voorwaarde)

Hierbij zijn UPDATE en SET verplicht en is WHERE opnieuw optioneel.

2.3. INSERT

2.3.1. Gegevens invoegen met INSERT

Nog iets dat je met SQL kan doen is, is gegevens in de database stoppen met INSERT.
CODE
  1. INSERT INTO adressen (naam, voornaam, straat, gemeente, postcode)
  2. VALUES ('Holmes', 'Sherlock', 'Bakerstreet', 'London', 'SW1A 0AA ')

Deze query zorgt er voor de gegevens (na VALUE) ingevuld worden in de overeenkomstige velden (voor VALUE).
Voor deze gegevens wordt een nieuw record gemaakt in de database.
Het is ook perfect mogelijk dat je enkele velden weglaat. Zorg er dan wel voor dat dit ook mogelijk is in de database, met andere woorden moet het veld ook de waarde NULL of niets kunnen hebben.

Let op!:
Let op dat je gegevens na VALUE overeenkomen met de aangegeven velden. Anders is het mogelijk dat bv. de straatnaam ingevuld wordt in het veld voornaam.

2.3.2. Samenvatting INSERT

INSERT dient om gegevens in een tabel te voegen en kan als volgt worden veralgemeend.
CODE
  1. INSERT INTO (tabel) (veld1, veld2, veld3, ...)
  2. VALUES (waarde1, waarde2, waarde3, ...)

In deze query zijn zowel INSERT, INTO en VALUES verplicht te vermelden.


2.4. DELETE

2.4.1. Gegevens verwijderen met DELETE

De laatste opdracht die ik bespreek is DELETE, hiermee is het mogelijk gegevens uit de database te verwijderen.
CODE
  1. DELETE FROM adressen

Met deze query worden alle gegevens uit de tabel adressen verwijderd.

2.4.2. Gegevens selectief verwijderen met WHERE

Maar wat als je nu maar één record wil verwijderen uit de tabel? Hiervoor kan je ook gebruik maken van de opdracht WHERE.
CODE
  1. DELETE FROM adressen WHERE gemeente = 'Brussel'

Zoals je waarschijnlijk al verwachte verwijdert deze query het record of de records waar de gemeente Brussel is.

Let op!:
Ook hier is het beter gebruik te maken van een primaire sleutel als je er zeker van wil zijn dat je maar één record verwijdert.

2.4.3. Samenvatting DELETE

Met DELETE kan je gegevens verwijderen uit de database, dit gaat als volgt.
CODE
  1. DELETE FROM (tabel) WHERE (voorwaarde)

Ook in deze query zijn DELETE en FROM verplicht, WHERE is zoals altijd optioneel. Merk overigens ook op dat bij MySQL je niet DELETE * FROM moet gebruiken, maar DELETE FROM. De asterisk valt dus weg.


3. Slot


Dit was een korte inleiding tot de taal SQL.
Natuurlijk kan je hierin nog veel uitgebreider gaan om nog veel gerichter bepaalde opdrachten uitvoeren.

Hopelijk was het leerrijk.
Vragen kunnen gesteld worden in onze forums ;).Dit artikel werd geschreven door Simon op donderdag 25 januari 2007 om 21:31 en werd sindsdien 11824 keer gelezen.

  • Pagina
  • 1 van 1

Bericht geplaatst door Martijn op donderdag 25 januari 2007 om 22:22:18.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
SQL Statements mag je beïndigen met een ; (punt-komma), maar dat hoeft niet (al kan het voor structuur in je code zorgen). Indien je meerdere queries in een keer uitvoert, moet je deze echter wel scheiden door een punt-komma ;).
Met vriendelijke groeten,
Martijn Wouters
  • Pagina
  • 1 van 1