The best teachers do not simply spout information at their students and hope for the best. The best teachers are those who set expectations responsibly and ensure that students adopt a resilient, “can-do” frame of mind.
— Walter Shields, SQL QuickStart Guide: The Simplified Beginner's Guide to Managing, Analyzing, and Manipulating Data With SQL

Intro SQL

In dit hoofdstuk duik je voor het eerst in een databank. Je leert al doende de basisstructuur van een relationele databank en hoe je structuur en inhoud kan manipuleren. Alles wat we zien in dit hoofdstuk wordt verder uitgediept en uitgelegd in de komende hoofdstukken. Het is expliciet de bedoeling dat je de instructies in dit hoofdstuk ook uitvoert op de databankserver.

Vragen? Wij zijn er om je te helpen.

Onze eerste tabel: lijst van OPO’s

Onze opleiding Toegepaste informatica bestaat uit een lange lijst van OPO’s (OPleidingsOnderdelen). Sommige zijn verplicht, andere zijn keuze-OPO’s. Jouw ISP (Individueel StudieProgramma) maakt een selectie uit deze lijst. De opleiding verandert echter geregeld (zoals nu vanaf academiejaar 22–23 en volgende). De lijst van alle OPO’s moet ook die OPO’s vermelden die vroeger wel in het opleidingsprogramma zaten, maar nu niet meer. Zo beschikken we over een overzicht van alle huidige OPO’s en een archief van alle vorige in één tabel.

In dit voorbeeld vereenvoudigen we de werkelijkheid een heel stuk zodat we alle stappen aan bod kunnen laten komen zonder dat het te complex wordt.

Wat wil je bijhouden?

Vooraleer je begint te coderen moet je eerst nadenken. Wat wil ik juist bijhouden? Waarvoor moet de data dienen?

Bekijk even het onderwijsaanbod van Toegepaste informatica. Je vindt hier alle OPO’s van onze bacheloropleiding van dit jaar. Bovendien is er een archief waarop je alle OPO’s van voorgaande jaren ook terugvindt. Dit overzicht is heel erg verschillend van dat van 2021–22, want we zijn in academiejaar 2022–23 met een volledig vernieuwde opleiding gestart.

Bekijk eens één van je OPO’s, bvb. ‘Front-end Development’:

ECTS fiche van het OPO front-end development

Welke informatie vind je hier terug? Vanzelfsprekend gaan we ons in dit inleidend voorbeeld erg beperken tot de basis.

We willen vooral dat die info die nuttig is om je ISP samen te stellen hier voorzien wordt. We kiezen voor volgende gegevens:

De gegevens uit de lijst hierboven worden de kolommen (verticaal) van de tabel. Per OPO komt er dan een rij (horizontaal) in de tabel.

Enkele eenvoudige datatypes

Een databank zoals PostgreSQL gebruikt verschillende datatypes. Vooraleer we met SQL aan de slag kunnen gaan, moeten we eerst iets vertellen over datatypes. Elk datatype heeft zijn specifiek doel en eigenschappen. Het is belangrijk dat je op voorhand goed nadenkt over het meest geschikte datatype. In deze inleiding beperken we ons tot een kleine selectie van datatypes.

char()

Soms weet je op voorhand dat de waarde van een bepaald attribuut (kolom) een tekst is. Men spreekt dan over ‘alfanumerieke waarden’: letters en cijfers, geïnterpreteerd als karakters. Als die tekst altijd hetzelfde aantal karakters heeft, dan is het datatype char in dit geval het meest geschikte. Een OPOcode bestaat altijd uit zes karakters (bij TI: ‘MBI’ gevolgd door twee cijfers en tenslotte nog een letter). We gebruiken dus best char(6) als datatype.

Analoog wordt elke lector uniek geïdentificeerd met een code die bestaat uit een ‘u’ gevolgd door zeven cijfers, bvb ‘u0012047’ (a.k.a. Jan Van Hee). Hiervoor ligt dus char(8) voor de hand als datatype.

Voor het bewaren van de taal van een OPO is dit datatype ook geschikt. Elke taal kan namelijk voorgesteld worden via ISO 639-1 codes (https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). Nederlands (‘nl’), Engels (‘en’), Frans (‘fr’), … en dus is een char(2) een goede keuze.

varchar()

Van sommige kolommen weet je wel dat ze tekst bevatten, maar niet op voorhand hoe lang die tekst is. Je zou nog steeds char kunnen gebruiken, maar dat heeft als nadeel dat je altijd deze geheugenruimte reserveert. Stel dat je voor de naam van een OPO als datatype char(100) gebruikt, want het is mogelijk dat er nieuwe OPO’s bijkomen die een hele lange naam of beschrijving hebben. Een OPO als ‘Database foundations’ gebruikt maar 20 van de gereserveerde 100 bytes. Dat is inefficiënt geheugengebruik.

Voor dit soort van data gebruik je best varchar(100). Het getal 100 geeft de maximumlengte van de string.

De totale geheugenruimte die een waarde nu inneemt is het aantal karakters plus 1 of 2 bytes voor informatie over de lengte. In dit geval zou ‘Database foundations’ dus 21 bytes (lengte = 20 + 1 extra byte) geheugenruimte in beslag nemen.

Maar “elk voordeel heb zijn nadeel” (of was het omgekeerd?): varchar is efficiënter qua geheugen, maar is wel trager dan char. Bovendien is char geschikter voor data die dikwijls verandert. Voor de kleine tabellen die wij zullen maken in dit OPO heeft de snelheid natuurlijk geen belang. Maar het is wel degelijk een belangrijke afweging die in grote databanken moet gemaakt worden.

integer

Voor gehele getallen volstaat momenteel het datatype integer (4 bytes, van − 2147483648 tot 2147483647). Dat is natuurlijk wat overkill voor de kolom ‘studiepunten’. PostgreSQL kent ook smallint dat maar 2 bytes in beslag neemt en getallen toelaat tussen -32768 en +32767. Dat is eigenlijk de betere keuze hier, dus laten we daar maar voor gaan.

Als vuistregel kies je altijd voor het datatype met het kleinste geheugengebruik, dat toch voldoet aan de vereisten. Meer over de verschillende getal-datatypes vind je in de documentatie van postgresql.

date

Werken met datums is een belangrijk onderdeel van een database. In dit inleidend voorbeeld moeten we kunnen aangeven wanneer een OPO gestart is en tot welke datum het een deel van de opleiding was. Er zijn erg veel manieren om een datum in te voeren, dus we houden het hier simpel. Als het OPO ‘webontwikkeling 1’ gestart is op 16 september 2015, dan kunnen we die datum invoeren in ISO 8601 formaat als ‘2015-09-16’.

Schema aanmaken

Een databankserver zoals PostgreSQL kan heel wat databases bevatten. Elke databank kan bestaan uit verschillende schema’s. Voor deze opdracht maken we eerst een nieuw schema.

Voer volgende stappen uit in pgAdmin.

  1. Open de pooling_62425 connectie.

  2. Open de databank die overeenkomt met je reeks (bvb. 1TI5 als je in reeks 5 zit).

  3. Klik rechts op ‘Schemas’ en kies ‘Query Tool’. In dit venster kan je nu SQL-code (zogenaamde ‘statements’ of ‘query’s’) uitvoeren.

  4. Maak een nieuw schema aan voor deze oefening in de databank die hoort bij je reeks. De naam van het schema is je r-nummer (waarbij de code toont hoe ik het voor mijn account zou doen, gebruik natuurlijk je eigen studentennummer ipv mijn u-nummer). Tik deze code in en voer uit met het driehoek symbool ▸ (sneltoets: F5, onthou dit best want je gaat dit commando dikwijls gebruiken).

    CREATE SCHEMA u0012047 -- gebruik je eigen rnummer! (commentaar begint met -- in SQL)

    SQL-statements worden meestal in hoofdletters geschreven (‘CREATE’), maar verplicht is dat niet. Het is best om geen spaties te gebruiken in namen van schema’s. Het kan wel, maar dan moet je deze naam tussen dubbele aanhalingstekens ("…") zetten. Liever niet, dus. Ook geen hoofdletters of koppelteken want ook dan zijn dubbele aanhalingstekens verplicht. Als er geen fouten zijn antwoordt de databankserver iets in deze zin:

    CREATE SCHEMA
    Query returned successfully in 293 msec.
  5. Je moet nu de lijst met schema’s verversen. Klik rechts op Schemas en kies ‘Refresh…’. Jouw nieuw schema staat nu bij in de lijst. Prima!

Soms zegt een bewegend beeld meer dan gewone tekst. Daarom hebben we het creëren van het schema en de tabel even in onderstaande video gegoten.

Tabel aanmaken in dit schema

Een databankschema bestaat meestal uit vele tabellen die met elkaar verbonden zijn door zogenaamde sleutels. In dit inleidend voorbeeld beperken we ons tot slechts één tabel met de naam ‘opleidingsonderdeel’. De tabel heeft acht kolommen.

Vanaf hier is het een goed idee om dingen die je intypt ook te bewaren in een apart .txt bestand. Op het einde van deze les vragen we je om rijen te deleten en de tabel te droppen. Dan ben je natuurlijk alles kwijt en daarom is het logisch om je werk in een tekstbestand te bewaren, bvb eentje voor elke les.

Code voor CREATE

Typ de code in het codeblok hieronder in (in dezelfde query tool) De uitleg volgt na de code. I.v.m. code overtypen volgende bedenking. Je kan die code ook copy/pasten uit deze tekst. We zouden willen aanraden om dat niet te doen. Er is zoiets als ‘spiergeheugen’ wat je in IT niet mag onderschatten. Door iets rustig in te typen train je je hersenen op een manier die niet gebeurt bij een kopie.

CREATE  TABLE opleidingsonderdeel (
  opocode              char(6)  NOT NULL ,
  studiepunten         smallint  NOT NULL ,    
  naam                 varchar(100)  NOT NULL , 
  van                  date  NOT NULL ,    
  tot                  date ,    
  taal                 char(2)  NOT NULL ,    
  semester             smallint  NOT NULL ,    
  coordinator          char(8)  NOT NULL ,    
  CONSTRAINT pk_opleidingsonderdeel_opocode PRIMARY KEY ( opocode ) 
);

Enkele opmerkingen over deze SQL-code:

Na de ; voer je de code uit (F5).

Als alles goed is, antwoordt de databankserver met:

CREATE TABLE
Query returned successfully in 1 secs 151 msec.

De eerste student uit de reeks die deze code uitvoert zal inderdaad deze melding krijgen. Alle volgende studenten echter krijgen een fout in deze stijl:

ERROR:  relation "opleidingsonderdeel" already exists
SQL state: 42P07

In een volgende sectie onderzoeken we deze veel gemaakte fout en krijg je twee oplossingen aangereikt.

Het juiste schema kiezen

We hebben je met opzet een fout laten maken die iedereen minstens één keer moet (en zal) maken. Elke tabel die je aanmaakt komt automatisch in het schema ‘public’ terecht. Kijk het maar na … Je zal zien dat de tabel ‘opleidingsonderdeel’ daar staat. Dat is de reden waarom iedereen – behalve de eerste student – de foutmelding krijgt dat er al een tabel met die naam bestaat. Iedereen zit in ‘public’ te werken en probeert een tabel met een reeds bestaande naam aan te maken in hetzelfde schema.

Er zijn twee oplossingen voor dit probleem:

  1. Laat de naam van een tabel altijd vooraf gaan door de naam van het schema. Concreet betekent dat voor mij (gebruik zelf de naam van je eigen schema, dus met je r-nummer) dat ik het CREATE statement moet aanpassen tot:

    CREATE  TABLE u0012047.opleidingsonderdeel (
      opocode              char(6)  NOT NULL ,
      ...
    );

    Deze oplossing wordt door veel mensen gesuggereerd als ‘best practice’ en veel softwaretools (we zullen later DBSchema gebruiken) doen het systematisch op deze manier.

  2. Een alternatief is dat je eerst bovenaan je code het search_path definieert. Mijn code wordt dan (vergeet de ; niet tussen twee SQL statements):

    SET search_path to u0012047;
    CREATE  TABLE opleidingsonderdeel (
      opocode              char(6)  NOT NULL ,
      ...
    );

Herhaal nu het bovenstaande CREATE statement uit de vorige sectie om de tabel in je eigen schema aan te maken.

Data toevoegen met INSERT INTO

Onze tabel staat klaar. De kolommen zijn gedefinieerd. Het enige wat ontbreekt is data (rijen). Laten we een OPO toevoegen, bvb. het OPO waar je nu mee bezig bent: Database Foundations. Zoek alle info op in de ECTS fiche van dit OPO (vind je o.a. via Toledo of via het onderwijsaanbod). Er zijn twee manieren om de gewenste info toe te voegen als een rij in ons schema: met of zonder vermelding van de kolomnaam.

Met vermelding van alle kolommen die een waarde moeten krijgen

Typ volgende code in en voer ze uit (en voor de laatste keer: vervang mijn schemanaam door de naam van je eigen schema). Je kan natuurlijk ook je search_path goed zetten en dan hoef je niet telkens de naam van het schema voor de naam van de tabel typen.

INSERT INTO u0012047.opleidingsonderdeel(opocode, studiepunten, naam, van, taal, semester,
coordinator) VALUES ('MBI10H', 6, 'Database Foundations', '2022-09-15', 1, 'u0092735');
-- commentaar: De coordinator is Rudi Swennen, dit is zijn personeelsnr
-- wat je bvb vindt via een zoekopdracht bij teams chat

Tekst en datums zet je tussen enkele aanhalingstekens. De studiepunten en het semester zijn een geheel getal, dus zonder aanhalingstekens.

Je krijgt echter een foutmelding van de databankserver terug. Probeer die te interpreteren en pas de query aan zodat het wel lukt om deze info toe te voegen.

Als de server antwoordt met ‘successfully’ kan je nakijken wat de inhoud van de volledige tabel nu is met het SELECT commando (waar we later in deze cursussite uitgebreid op terugkomen):

SELECT * -- de ster * betekent: geef de volledige rij weer
FROM u0012047.opleidingsonderdeel

De server antwoordt met het volgende overzicht:

Resultaat na één insert statement

Merk op dat het veld ‘tot’ de waarde NULL heeft. Dit betekent dat er geen waarde is voor dit veld.

Zonder vermelding van de kolommen

Er is een kortere manier om een rij toe te voegen, waar de waarde NULL wel erg belangrijk is. Laten we als voorbeeld het OPO ‘Programming 1’ toevoegen. Doe dat met volgende code:

INSERT INTO u0012047.opleidingsonderdeel
VALUES ('MBI02H', 6, 'Programming 1', '2022-09-15', NULL, 'nl', 1, 'u0118171');
-- De coordinator is Karen Baerts u0118171

Zie je wat het grote verschil is? Je hoeft de kolomnamen niet meer allemaal op te noemen, maar nu moet je wel expliciet de waarde NULL invullen voor de kolom ‘tot’. Kijk na via SELECT * FROM ... dat ook dit OPO toegevoegd is aan je schema.

Opdracht

Voeg nu zelf een aantal (minstens 10) OPO’s toe aan je schema. Zorg dat je ook minstens één OPO uit semesters 2, 3, 4, 5 en 6 hebt. Voeg ook liefst een OPO in een andere taal toe (e.g. Français pour le boulot, Visuele gebruikersomgevingen, … bedenk desnoods zelf maar iets). Er moeten ook enkele OPO’s toegevoegd worden met minder of meer dan 6 SP. Er is ook een archief van oude ECTS-fiches. Voeg ook enkele oude OPO’s toe die nu niet meer gegeven worden. Voor deze OPO’s zal je een einddatum moeten invullen voor het veld ‘tot’. Kies daarvoor bvb. 14 september van het jaar waar dit OPO gestopt is. Een voorbeeld: het OPO ‘Probleemoplossend Denken’ werd gegeven tot en met academiejaar 2021–22, dus de waarde van ‘tot’ wordt ’2022-09-14’. Voor de waarde van het veld ‘van’ kies je maar een 15de september een aantal jaren terug in de tijd. Zolang de data er realistisch uitziet is het prima.

Belangrijke tip: straks zullen we de volledige tabel vernietigen. Hou dus al je query’s die je schrijft om nieuwe rijen toe te voegen bij in een .txt bestand.

Zolang je pgAdmin niet sluit, vind je alle vorige query’s onder het tabblad ‘Query History’.

Data bekijken met SELECT

Je gebruikte hierboven al SELECT * FROM tabelnaam om de volledige inhoud van je tabel te bekijken. Ik voegde in totaal 11 OPO’s toe aan mijn tabel. Deze 11 rijen laten toe om voor het vervolg van deze tekst verschillende mogelijke query’s te laten zien.

Je kan deze tabel bekijken in de databank ‘df’, schema ‘sql_intro’. Elke student kreeg USAGE rechten op het schema en SELECT rechten op de tabel. Je kan dus in deze tabel geen rijen toevoegen, updaten of deleten. Daarom werk je in je eigen schema en tabel, waar je dat allemaal wel kan. Het thema rechten komt in een later hoofdstuk aan bod.

Soms wil je natuurlijk niet alle kolommen te zien krijgen. Stel: je wilt enkel een lijst met alle namen van OPO’s, gevolgd door hun aantal studiepunten. In de SELECT geef je dan expliciet die kolommen in de juiste volgorde op.

SELECT naam, studiepunten
FROM u0012047.opleidingsonderdeel
Alleen de kolommen naam en aantal studiepunten worden getoond

Bij nader inzien vind ik de kolomhoofding in bovenstaand overzicht niet zo geschikt. In plaats van ‘naam’ in de kolomhoofding zou ik liever ‘naam OPO’ zetten. Dat kan met volgende query, waarbij je gebruik maakt van AS:

SELECT naam AS "naam OPO", studiepunten
FROM u0012047.opleidingsonderdeel
Merk op dat je "naam OPO" tussen dubbele aanhalingstekens moet zetten omdat deze string een spatie bevat.

Specifieke rijen selecteren met WHERE

Het resultaat van SELECT ... FROM ... bevat alle rijen in de tabel. Meestal ben je niet geïnteresseerd in alle rijen, maar alleen in rijen die aan één of meerdere voorwaarden voldoen. Een voorbeeld: ik wil een overzicht van alle OPO’s waar ik coördinator van ben of geweest ben. Mijn personeelsnummer is ‘u0012047’. Het overzicht mag alle kolommen tonen. De query wordt:

SELECT *
FROM u0012047.opleidingsonderdeel
WHERE coordinator = 'u0012047'

Er worden twee rijen getoond:

Ik ben of was coördinator van twee OPO's
Let op het gebruik van de enkele aanhalingstekens bij strings. Bovendien is de vergelijkingsoperator in SQL hoofdlettergevoelig (‘case sensitive’). Dezelfde query met WHERE coordinator = 'U0012047' zou geen enkele rij hebben opgeleverd omdat alle personeelsnummers met kleine letter zijn ingevoerd.

Logische operatoren

Je kan voorwaarden combineren met zogenaamde ‘logische operatoren’: AND, OR en NOT. Later volgt een volledige bespreking , maar nu één klein voorbeeld. Een samengestelde voorwaarde met AND is enkel waar als beide voorwaarden waar zijn. Probeer zelf eens volgende oefening.

Geef een lijst van alle OPO’s die minder dan 6 SP hebben en gegeven worden in het Nederlands. Het overzicht bevat enkel de kolommen naam, opocode en het aantal studiepunten.

SELECT naam, opocode, studiepunten
FROM u0012047.opleidingsonderdeel
WHERE studiepunten < 6 AND taal = 'nl'

Testen op lege velden

Als je wilt testen op de waarde NULL mag je geen gelijkheidsteken gebruiken maar moet je het doen met IS NULL of IS NOT NULL. We maken even een kleine oefening.

Geef een overzicht van alle OPO’s die nu niet meer bestaan.

Bekijk eerst even de volledige tabel. De OPO’s die nu niet meer in de opleiding zitten hebben een einddatum in het veld ‘tot’. Die einddatum kan vanalles zijn (er zijn vroeger immers al dikwijls hervormingen gebeurd in de opleiding TI). Je kan dus niet selecteren op een specifieke einddatum. Het enige dat je weet is dat er een einddatum zal staan in dit veld en dat het dus niet leeg is. De query wordt dan:
SELECT *
FROM u0012047.opleidingsonderdeel
WHERE tot IS NOT NULL

Rijen verwijderen met DELETE

Een databankserver moet ook rijen kunnen verwijderen. Misschien is de data verouderd, niet meer van toepassing of gewoon foutief. Vanzelfsprekend is dit een operatie waarmee je voorzichtig moet zijn. Je gebruikt het DELETE commando bijna altijd in combinatie met WHERE om enkel bepaalde rijen te verwijderen uit de tabel.

Bij wijze van voorbeeld verwijderen we alle OPO’s uit de tabel die minder dan 4 SP hebben:

DELETE
FROM u0012047.opleidingsonderdeel
WHERE studiepunten < 4

De databaseserver antwoordt met de melding dat er drie rijen verwijderd zijn uit de tabel. Kijk zelf na met een SELECT * welke rijen verdwenen zijn.

DELETE 3  
Query returned successfully in 76 msec.

Er bestaat ook een TRUNCATE statement waarmee je de volledige inhoud van een tabel wist. De tabel zelf blijft bestaan, maar alle rijen worden verwijderd.

Data aanpassen met UPDATE

Lectoren krijgen andere taken, OPO’s veranderen van naam, studiepunten of semester, … Je moet dus ook rijen kunnen aanpassen. Door een verandering in mijn opdracht ben ik niet meer coördinator van het OPO ‘Front-end Development’. De nieuwe coördinator is Johan, met personeelsnummer ‘u0039456’. We passen deze info aan in de tabel met de wat moeilijker query UPDATE ... SET ... WHERE ...:

UPDATE u0012047.opleidingsonderdeel
SET coordinator = 'u0039456'
WHERE opocode = 'MBI01H'

Als de conditie in de WHERE op meerdere rijen van toepassing is, dan wordt in dit geval de coördinator van al deze rijen aangepast. Het is m.a.w. een query waar je voorzichtig moet mee omspringen. Vermits we hier een test doen op de primaire sleutel ‘opocode’ is er maar één rij waar deze test slaagt en die dus geüpdatet kan worden.

Als je operatie succesvol was, kan je het resultaat bekijken met een gewone SELECT.

Nieuwe coördinator voor het OPO MBI01H

Verander van alle OPO’s die nu tot de opleiding behoren en in het derde semester gegeven worden het semester naar 4.

UPDATE u0012047.opleidingsonderdeel
SET semester = 4
WHERE semester = 3 AND tot IS NULL

Rijen sorteren met ORDER BY

De database server geeft het resultaat van een query in een bepaalde volgorde die je niet kan voorspellen. Die hangt af van het type server (postgreSQL doet het anders dan InnoDB bvb), van de query, interne optimalisatie enz. Je wilt lijsten vaak sorteren volgens één of meerdere kolommen: alfabetisch, van klein naar groot, … Volgende query sorteert alle OPO’s volgens stijgend aantal SP, d.w.z. dat het OPO met het kleinste aantal SP bovenaan staat.

SELECT *
FROM u0012047.opleidingsonderdeel
ORDER BY studiepunten ASC

De standaardsortering is van klein naar groot (‘ASCending’, wordt ook wel ‘oplopend sorteren’ genoemd). Je mag in dit geval het woord ‘ASC’ weglaten. Dit is dus evenwaardig:

SELECT *
FROM u0012047.opleidingsonderdeel
ORDER BY studiepunten

Het kan zelfs nog korter. I.p.v. de naam van de kolom waarop je sorteert, kan je gewoon het volgnummer van de kolom vermelden. Dat is wat minder leesbaar maar wel korter. De studiepunten staan in de tweede kolom van alle getoonde kolommen in deze SELECT dus:

SELECT *
FROM u0012047.opleidingsonderdeel
ORDER BY 2

Je kan ook sorteren van groot naar klein (‘aflopend sorteren’ of ‘DESCending’). Deze query toont een overzicht van OPO’s (enkel naam, SP en coördinator) in omgekeerd alfabetische volgorde:

SELECT naam, studiepunten, coordinator
FROM u0012047.opleidingsonderdeel
ORDER BY naam DESC        -- alternatief is: ORDER BY 1 DESC
Van Z naar A sorteren

Je kan ook sorteren op meerdere kolommen door een komma te zetten tussen de kolomnamen (of -nummers) achter ORDER BY. Schrijf de query die de volledige lijst (alle kolommen) toont, gesorteerd volgens aantal studiepunten van klein naar groot en vervolgens (binnen een zelfde aantal SP) op dalend semester.

SELECT *
FROM u0012047.opleidingsonderdeel
ORDER BY studiepunten ASC, semester DESC   -- alternatief: ORDER BY 2, 7 DESC

Hele tabel verwijderen met DROP

In dit inleidend stukje kreeg je een kort overzicht van heel wat verschillende stappen: schema aanmaken, tabel definiëren, vullen met data, bevragen, updaten, deleten van rijen, sorteren enz. Tijd om te besluiten met het opruimen van wat we maakten. Een tabel verwijderen kan je enkel als je de eigenaar van de tabel bent . Zelfs als je rechten geeft aan andere mensen om jouw tabel te manipuleren, dan nog kunnen deze mensen je tabel niet verwijderen.

Vanzelfsprekend is dit een operatie waar je goed moet over nadenken. Weg is weg!

comic

Een tabel verwijder je met het commando DROP.

DROP TABLE u0012047.opleidingsonderdeel

De server antwoordt met:

DROP TABLE  
Query returned successfully in 128 msec.

Kijk zelf na (vergeet ‘Refresh’ niet) dat de tabel niet meer in je schema staat. Vervolgens kan je ook het schema zelf verwijderen met:

DROP SCHEMA u0012047