RESET PL/SQL tips
PlaatsnamenMySQL variant

Free Online SQL Training met query voorbeelden.

Free online SQL training met query voorbeelden.
Query voorbeeld met SELECT.
Selecteer (SELECT) alle rijen en kolommen van de tabel schilders.

SELECT

*


FROM

schilders

ID

Klantnr

Voornaam

Tussen

Achternaam

Geboortedatum

Geboorteplaats

Land

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

Klantnr

Voornaam

Tussen

Achternaam

Geboortedatum

Geboorteplaats

Land

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

Memory Game

Sudoku Solver

logo memorygame.nl logo sudokuwizard.nl

Query voorbeelden gebaseerd op Oracle PL/SQL.

De SQL voorbeelden op Querymaster zijn gebaseerd op PL/SQL van Oracle en deze voorbeelden vormen samen een free online SQL training. SQL staat voor Structured Query Language en dit is een taal die wordt gebruikt voor het bevragen van een database. Een database is een verzameling van tabellen. Indien de PL/SQL query afwijkt van de MySQL query, dan staat op Querymaster ook een voorbeeld van de MySQL query. Daarnaast kun je op Querymaster algemene PL/SQL tips vinden.


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.

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.

PL/SQL tips.

PL/SQL tip 1: 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 ;

PL/SQL tip 2: 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 ;

PL/SQL tip 3: 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 ;

Plaatsnamen per gemeente.
Gemeentenaam

Deze tabel geeft een overzicht van de plaatsnamen per gemeente in Nederland in 2010.
Bron: CBS.
Hieronder een praktijk voorbeeld van de query op de tabel plaatsnamen.

SELECT

*


FROM

plaatsnamen


WHERE

SUBSTR(gemeentenaam,1,1)

=

'P'


ORDER

BY

gemeentenaam

A   B   C    D   E    F   G    H   I    J    K    L   M

N   O    P   Q    R    S   T    U   V    W    X    Y    Z

Plaatsnaam

1

Papendrecht

Zuid-Holland

nee

Oosteind

2

Papendrecht

Zuid-Holland

ja

Papendrecht

3

Papendrecht

Zuid-Holland

nee

Westeind

4

Peel en Maas

Limburg

nee

Molenbaan

5

Peel en Maas

Limburg

nee

Nederweerterdijk

6

Peel en Maas

Limburg

nee

Onder-Eindt

7

Peel en Maas

Limburg

nee

Kesseleik

8

Peel en Maas

Limburg

nee

Panningen

9

Peel en Maas

Limburg

ja

Peel en Maas

10

Peel en Maas

Limburg

nee

Meijel

11

Peel en Maas

Limburg

nee

Maasbree

12

Peel en Maas

Limburg

nee

Loo

13

Peel en Maas

Limburg

nee

Leegheide

14

Peel en Maas

Limburg

nee

Lange Heide

15

Peel en Maas

Limburg

nee

Korte Heide

16

Peel en Maas

Limburg

nee

Koningslust

17

Peel en Maas

Limburg

nee

Kievitsheide

18

Peel en Maas

Limburg

nee

Keuperheide

19

Peel en Maas

Limburg

nee

Rinkesfort

20

Peel en Maas

Limburg

nee

Roggelsedijk

21

Peel en Maas

Limburg

nee

Zandberg

22

Peel en Maas

Limburg

nee

Witdonk

23

Peel en Maas

Limburg

nee

Westering

24

Peel en Maas

Limburg

nee

Vosberg

25

Peel en Maas

Limburg

nee

Vliegert

26

Peel en Maas

Limburg

nee

Vieruitersten

27

Peel en Maas

Limburg

nee

Veers

28

Peel en Maas

Limburg

nee

Tongerlo

29

Peel en Maas

Limburg

nee

Stox

30

Peel en Maas

Limburg

nee

Stogger

31

Peel en Maas

Limburg

nee

Steenoven

32

Peel en Maas

Limburg

nee

Spurkt

33

Peel en Maas

Limburg

nee

Soeterbeek

34

Peel en Maas

Limburg

nee

Simonshoek

35

Peel en Maas

Limburg

nee

Schoorveld

36

Peel en Maas

Limburg

nee

Rooth

37

Peel en Maas

Limburg

nee

Zelen-Hub

38

Peel en Maas

Limburg

nee

Keup

39

Peel en Maas

Limburg

nee

Kessel

40

Peel en Maas

Limburg

nee

Everlo

41

Peel en Maas

Limburg

nee

Driessen

42

Peel en Maas

Limburg

nee

Heldensedijk

43

Peel en Maas

Limburg

nee

Donk

44

Peel en Maas

Limburg

nee

Bout, Op den

45

Peel en Maas

Limburg

nee

Bong

46

Peel en Maas

Limburg

nee

Dubbroek

47

Peel en Maas

Limburg

nee

Grashoek

48

Peel en Maas

Limburg

nee

Helden

49

Peel en Maas

Limburg

nee

Groeze

50

Peel en Maas

Limburg

nee

Beringerhoek

51

Peel en Maas

Limburg

nee

Hert

52

Peel en Maas

Limburg

nee

Beringe

53

Peel en Maas

Limburg

nee

Katsberg

54

Peel en Maas

Limburg

nee

Egchel

55

Peel en Maas

Limburg

nee

Egchelheide

56

Peel en Maas

Limburg

nee

Baarlo

57

Peel en Maas

Limburg

nee

Egchelhoek

58

Peel en Maas

Limburg

nee

Eijndt

59

Peel en Maas

Limburg

nee

Hout en Oijen

60

Peel en Maas

Limburg

nee

Hof

61

Peel en Maas

Limburg

nee

Broek

62

Pekela

Groningen

ja

Pekela

63

Pekela

Groningen

nee

Dwarsdiep

64

Pekela

Groningen

nee

Bronsveen

65

Pekela

Groningen

nee

Oude Pekela

66

Pekela

Groningen

nee

Zuiderkolonie

67

Pekela

Groningen

nee

Kruiselwerk

68

Pekela

Groningen

nee

Hoetmansmeer

69

Pekela

Groningen

nee

Wilde Plaats

70

Pekela

Groningen

nee

Nieuwe Pekela

71

Pekela

Groningen

nee

Noorder Kolonie

72

Pijnacker-Nootdorp

Zuid-Holland

nee

Katwijk

73

Pijnacker-Nootdorp

Zuid-Holland

nee

Kalisbuurt

74

Pijnacker-Nootdorp

Zuid-Holland

nee

Oude Leede

75

Pijnacker-Nootdorp

Zuid-Holland

nee

Noukoop

76

Pijnacker-Nootdorp

Zuid-Holland

nee

Delfgauw

77

Pijnacker-Nootdorp

Zuid-Holland

nee

Pijnacker

78

Pijnacker-Nootdorp

Zuid-Holland

nee

Vlieland

79

Pijnacker-Nootdorp

Zuid-Holland

nee

Nootdorp

80

Pijnacker-Nootdorp

Zuid-Holland

ja

Pijnacker-Nootdorp

81

Purmerend

Noord-Holland

ja

Purmerend

82

Purmerend

Noord-Holland

nee

Neck (ged.)

83

Purmerend

Noord-Holland

nee

Zuiderpolder

84

Purmerend

Noord-Holland

nee

Overwhere

85

Putten

Gelderland

nee

Gerven

86

Putten

Gelderland

nee

Hell

87

Putten

Gelderland

nee

Hoef

88

Putten

Gelderland

nee

Krachtighuizen

89

Putten

Gelderland

nee

Koudhoorn

90

Putten

Gelderland

nee

Bijsteren

91

Putten

Gelderland

nee

Huinen

92

Putten

Gelderland

nee

Norden

93

Putten

Gelderland

nee

Nuld

94

Putten

Gelderland

nee

Halvinkhuizen

95

Putten

Gelderland

nee

Veenhuizerveld

96

Putten

Gelderland

ja

Putten

97

Putten

Gelderland

nee

Diermen

Aantal rijen: 97 Aantal kolommen: 4