Bestudeer de SQL voorbeelden van deze gratis online training en wordt een Query master.

TAB

SQL voorbeeld met

SELECT

Selecteer alle rijen en kolommen van de tabel schilders.

SELECT

*


FROM

schilders

ID

Klantnummer

Voornaam

Tussenvoegsel

Achternaam

Geboortedatum

Geboorteplaats

Landcode

Geslacht

1

1

10068970

Adriana

Spilberg

1650-12-05

Amsterdam

NL

V

2

2

4074970

Claude

Monet

1840-11-14

Parijs

FR

M

3

3

10639987

Johannes

Vermeer

1632-10-31

Delft

NL

M

4

4

16337462

Leonardo

da

Vinci

1452-04-15

Anchiano

IT

M

5

5

4114282

Matthijs

Maris

1839-08-17

Den Haag

NL

M

6

6

2783722

Pablo

Picasso

1881-10-25

Malaga

ES

M

7

7

12387341

Peter Paul

Rubens

1577-06-18

Siegen

DE

M

8

8

11469859

Rembrandt

van

Rijn

1606-07-15

Leiden

NL

M

9

9

2071526

Salvador

Dali

1904-05-11

Figueres

ES

M

10

10

3724790

Therese

Schwartze

1851-12-20

Amsterdam

NL

V

11

11

3684528

Vincent

van

Gogh

1853-03-30

Zundert

NL

M

Aantal rijen: 11 Aantal kolommen: 9

Vergelijk het resultaat van bovenstaande query met onderstaande referentie tabel. Let op het aantal rijen en het aantal kolommen en de volgorde van deze rijen en kolommen. Stel jezelf bijvoorbeeld de vraag waarom bovenstaande tabel 11 rij(en) en 9 kolommen heeft.

SELECT

*


FROM

schilders

ID

Klantnummer

Voornaam

Tussenvoegsel

Achternaam

Geboortedatum

Geboorteplaats

Landcode

Geslacht

1

1

10068970

Adriana

Spilberg

1650-12-05

Amsterdam

NL

V

2

2

4074970

Claude

Monet

1840-11-14

Parijs

FR

M

3

3

10639987

Johannes

Vermeer

1632-10-31

Delft

NL

M

4

4

16337462

Leonardo

da

Vinci

1452-04-15

Anchiano

IT

M

5

5

4114282

Matthijs

Maris

1839-08-17

Den Haag

NL

M

6

6

2783722

Pablo

Picasso

1881-10-25

Malaga

ES

M

7

7

12387341

Peter Paul

Rubens

1577-06-18

Siegen

DE

M

8

8

11469859

Rembrandt

van

Rijn

1606-07-15

Leiden

NL

M

9

9

2071526

Salvador

Dali

1904-05-11

Figueres

ES

M

10

10

3724790

Therese

Schwartze

1851-12-20

Amsterdam

NL

V

11

11

3684528

Vincent

van

Gogh

1853-03-30

Zundert

NL

M

Aantal rijen: 11 Aantal kolommen: 9

Unit69

Memory Game

Sudoku Solver

unit69 Memory Game Sudoku Wizard.nl

De query voorbeelden op deze website zijn gebaseerd op Oracle PL/SQL.


Het klantnummer is kleiner dan (<) 4114282 en sorteer op het klantnummer.


Het klantnummer is kleiner dan (<) of gelijk aan (=) 4114282 en sorteer op het klantnummer.


Het klantnummer is groter dan (>) 4114282 en sorteer op het klantnummer.


Het klantnummer is groter dan (>) of gelijk aan (=) 4114282.


Het klantnummer is groter dan (>) 2783722 en kleiner dan (<) 4114282 en sorteer op het klantnummer.


Het klantnummer is groter dan (>) of gelijk aan (=) 2783722 en kleiner dan (<) of gelijk aan (=) 4114282.


Het klantnummer is gelijk aan (=) 4114282.


Het klantnummer is ongelijk aan (<>) 4114282 en sorteer op het klantnummer.


Het klantnummer is ongelijk aan (!=) 4114282 en sorteer op het klantnummer.


Absoluut (ABS) maakt van een negatief getal een positief getal.


Met en (AND) bepaal je aan welke (tweede en volgende) voorwaarde moet worden voldaan.


Met AS (alias) geef je de kolom een (andere) kolomnaam.


AVG geeft het gemiddelde per categorie (bijvoorbeeld de gemiddelde kosten per schilder).


Het klantnummer ligt tussen (BETWEEN) 2783722 en (AND) 4114282 en sorteer op het klantnummer.


Als (CASE WHEN) het geslacht gelijk is aan M, dan (THEN) moet er Man staan; anders (ELSE) Vrouw.


Een CASE WHEN voorbeeld met meerdere mogelijkheden.


Een CASE WHEN voorbeeld met een AND in het statement.


COALESCE selecteert de eerste non-null (niet lege) waarde in een lijst.


Gebruik bij de selectie van de kolommen de volledige tabelnaam.


Geef de tabel schilders de alias sch en gebruik deze alias bij de selectie van de kolommen.


Voeg de kolommen voornaam, tussenvoegsel en achternaam samen (CONCAT).


COUNT telt het aantal per categorie (bijvoorbeeld het aantal schilderijen per schilder).


COUNT DISTINCT telt het aantal unieke waarden per categorie (bijvoorbeeld het aantal museums per schilder).


Met DECODE geef je de landcodes een andere naam.


DISTINCT selecteert unieke waardes, zoals de unieke landcodes uit de tabel schilders.


DUAL is een fictieve tabel waar je o.a. kunt rekenen of de systeemdatum kunt ophalen.


Selecteer met EXTRACT de dag, de maand en het jaar uit de geboortedatum.


FLOOR rondt af naar beneden, naar een geheel getal.


In de FROM staan de tabellen waarvan de gegevens worden geselecteerd, zoals de tabel schilders.


GREATEST selecteert de grootste (sorteer)waarde in een lijst.


GROUP BY in combinatie met SUM, COUNT of AVG (bv groepeer de kosten per klantnummer of schilder).


HAVING in combinatie met AVG, COUNT, MAX, MIN of SUM om het resultaat te beperken (bv som is groter dan 400000). De HAVING komt na de GROUP BY.


Selecteer alle rijen en kolommen van de tabel schilders waarvan de landcodes IN de opgegeven lijst staan.


Met INSTR (in string) bepaal je de positie, die je kunt gebruiken met SUBSTR (substring).


Selecteer alle rijen en kolommen waarvan de kolom tussenvoegsel niet leeg is (IS NOT NULL).


Selecteer alle rijen en kolommen van de tabel schilders waarvan de kolom tussenvoegsel leeg is (IS NULL).


Met JOIN koppel je twee tabellen aan elkaar (ON). Je krijgt alle rijen met dezelfde waarde (bv het klantnummer).


Selecteer de laatste dag (LAST_DAY) van de maand van de geboortedatum.


LEAST selecteert de kleinste (sorteer)waarde in een lijst.


Met LEFT JOIN koppel je twee tabellen aan elkaar (ON). Je krijgt alle rijen van de linkertabel en alleen de rijen met dezelfde waarde van de rechtertabel.


Met LENGTH bepaald je het aantal tekens.


Selecteer de voornamen die lijken op (LIKE) Pa.


Selecteer kleine letters (LOWER) en hoofdletters (UPPER).


MAX (maximaal) geeft de hoogste waarde. Bijvoorbeeld de hoogste prijs van een schilderij per klantnummer.


MIN (minimaal) geeft de laagste waarde. Bijvoorbeeld de laagste prijs van een schilderij per klantnummer.


MONTHS_BETWEEN is het aantal maanden verschil tussen 2 datums. Ideaal om de leeftijd te bepalen.


Met NOT EXISTS kun je de hoogste (of laagste) waarde selecteren. In de NOT EXISTS wordt bijvoorbeeld het hoogste schilderijnummer per klantnummer bepaald, door alle schilderijnummers af te gaan totdat het hoogste nummer is bereikt. De subquery van de NOT EXISTS is gekoppeld aan de hoofdquery.


Selecteer alle rijen en kolommen waarvan de landcode niet in (NOT IN) de opgegeven lijst staat.


Selecteer de voornamen die niet lijken op (NOT LIKE) Pa.


NVL geeft de voorzet waarde ( - ) bij een leeg veld.


Selecteer alle rijen en kolommen waarvan de landcode gelijk is aan NL of (OR) gelijk is aan ES.


Met ORDER BY wordt standaard gesorteerd van laag naar hoog (in de kolom geboorteplaats).


Met ORDER BY ASC wordt gesorteerd van laag naar hoog (in de kolom klantnummer).


Met ORDER BY DESC wordt gesorteerd van hoog naar laag (in de kolom klantnummer).


Met ORDER BY kun je ook sorteren op het kolomnummer (hier de 7e kolom) i.p.v. de kolomnaam.


Met REPLACE kun je tekst vervangen, zoals "van" door "from" in de kolom tussenvoegsel.


Met GROUP BY ROLLUP kun je subtotalen en een eindtotaal toevoegen aan het resultaat van je query. Met drie queries i.c.m. een UNION kun je hetzelfde resultaat krijgen. Met de IS NULL in de ORDER BY wordt het lege veld onderaan geplaatst.


Met ROUND kun je afronden met het aantal cijfers achter de komma (bijvoorbeeld 2 cijfers).


Met ROW_NUMBER() kun je een extra kolom toevoegen met een rijnummer. In MySQL moet je daarvoor eerst een variabele aanmaken.


Selecteer (SELECT) alle rijen en kolommen van de tabel schilders.


Met een subquery in de SELECT (rode tekst) wordt een extra kolom toegevoegd (de kolom schilder) aan de hoofdquery (blauwe tekst). De subquery kan maar 1 resultaat hebben en de subquery moet gekoppeld worden aan de hoofdquery.


Een subquery in de FROM (rode tekst) geeft een nieuwe tabel en deze kan meer dan 1 resultaat hebben. De gegevens van deze nieuwe tabel kun je gebruiken in de SELECT van de hoofdquery (blauwe tekst).


Met twee querys in de FROM kun je de output van query1 en query2 naast elkaar weergeven i.p.v. onder elkaar.


Met SUBSTR (tekst, start tekst, aantal tekens) bepaal je welk deel van de tekst (SUBSTRING) je wil selecteren.


SUM geeft de som per categorie (bijvoorbeeld de som van de prijzen per schilder).


Met SYSDATE krijg je de systeemdatum en tijd.


Selecteer alle rijen en kolommen van de tabel schilders en geeft de tabel de alias sch.


Met TO_CHAR wordt een datum of nummer omgezet naar tekst, bijvoorbeeld notatie dd-mm-yyyy.


Met TO_DATE wordt tekst omgezet naar een datum.


Met TRIM worden spaties aan het begin (links LTRIM) en einde (rechts RTRIM) verwijderd.


TRUNC geeft de datum i.p.v. de systeemdatum, door de tijd af te kappen van de datum.


UNION geeft unieke waardes als je meerdere querys (met dezelfde kolomindeling) koppelt.


UNION ALL geeft geen unieke waardes als je meerdere querys (met dezelfde kolomindeling) koppelt.


Selecteer hoofdletters (UPPER) en kleine letters (LOWER).


Met WHERE bepaal je aan welke (eerste) voorwaarde moet worden voldaan.

Indien van toepassing de MySQL variant van de query.

MySQL decodeert m.b.v. een positie (FIELD) in de index (ELT) i.p.v. met DECODE.


Selecteer alle rijen en kolommen waarvan de kolom tussenvoegsel ongelijk aan leeg is.


Selecteer alle rijen en kolommen van de tabel schilders waarvan de kolom tussenvoegsel leeg is.


PERIOD_DIFF is het aantal maanden verschil tussen 2 datums (YYYYMM). Ideaal om de leeftijd te bepalen.


Met een CASE WHEN krijg je in MySQL hetzelfde resultaat als met NVL.


MySQL kent geen GROUP BY ROLLUP. Met drie queries i.c.m. een UNION kun je hetzelfde resultaat krijgen. Met de IS NULL in de ORDER BY wordt het lege veld onderaan geplaatst.


MySQL kent geen ROW_NUMBER(). In MySQL moet je daarvoor eerst een variabele aanmaken.


MySQL sysdate() (met haakjes) i.p.v. sysdate (zonder haakjes).


MySQL datumnotatie d.m.v. DATE_FORMAT i.p.v. TO_CHAR.


MySQL zet tekst om naar een datum met STR_TO_DATE.


MySQL datumnotatie d.m.v. DATE of DATE_FORMAT i.p.v. TRUNC.

PLSQL tips.

Als je in het SQL scherm twee streepjes -- voor de tekst zet, dan wordt dit als tekst gezien en niet als een query.

--Dit is tekst en geen query om bijvoorbeeld uitleg te geven.


SELECT

*


FROM

schilders ;

Als in het SQL scherm de tekst begint met /* en eindigt met */, dan wordt dit ook als tekst gezien.

/*Dit is tekst en geen query
om bijvoorbeeld uitleg te geven.*/


SELECT

*


FROM

schilders ;

Als je in het SQL scherm twee query's onder elkaar zet met een punt komma ; aan het einde, dan krijg je twee tabbladen in PLSQL. Deze tabbladen kun je een naam geven met --tab=naam.

--tab=query1


SELECT

*


FROM

schilders ;


--tab=query2


SELECT

*


FROM

schilderijen ;