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)

=

'C'


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

Capelle aan den IJssel

Zuid-Holland

ja

Capelle aan den IJssel

2

Capelle aan den IJssel

Zuid-Holland

nee

Gravenweg, 's- (ged.)

3

Capelle aan den IJssel

Zuid-Holland

nee

Keten

4

Capelle aan den IJssel

Zuid-Holland

nee

Schenkel

5

Castricum

Noord-Holland

nee

Noord-Bakkum

6

Castricum

Noord-Holland

nee

Schulpstet

7

Castricum

Noord-Holland

nee

Noord-End

8

Castricum

Noord-Holland

nee

Dusseldorp

9

Castricum

Noord-Holland

nee

Starting

10

Castricum

Noord-Holland

nee

Oosterbuurt

11

Castricum

Noord-Holland

ja

Castricum

12

Castricum

Noord-Holland

nee

Duin en Bosch

13

Castricum

Noord-Holland

nee

Limmen

14

Castricum

Noord-Holland

nee

Akersloot

15

Castricum

Noord-Holland

nee

Bakkum

16

Castricum

Noord-Holland

nee

Binnengeest

17

Castricum

Noord-Holland

nee

Woude en De Stierop, De

18

Coevorden

Drenthe

nee

Loo

19

Coevorden

Drenthe

nee

Holsloot

20

Coevorden

Drenthe

nee

Nieuw-Zwinderen

21

Coevorden

Drenthe

nee

Hool, Den

22

Coevorden

Drenthe

nee

Nieuwlande

23

Coevorden

Drenthe

nee

Meppen

24

Coevorden

Drenthe

nee

Kibbelveen

25

Coevorden

Drenthe

nee

Kiel, De

26

Coevorden

Drenthe

nee

Noord-Sleen

27

Coevorden

Drenthe

nee

Stieltjeskanaal

28

Coevorden

Drenthe

nee

Wezuperbrug

29

Coevorden

Drenthe

nee

Wezup

30

Coevorden

Drenthe

nee

Weijerswold

31

Coevorden

Drenthe

nee

Wachtum

32

Coevorden

Drenthe

nee

Vossebelt

33

Coevorden

Drenthe

nee

Vlieghuis

34

Coevorden

Drenthe

nee

Veenhuizen

35

Coevorden

Drenthe

nee

Steenwijksmoer

36

Coevorden

Drenthe

nee

Sleen

37

Coevorden

Drenthe

nee

Schoonoord

38

Coevorden

Drenthe

nee

Zwinderen

39

Coevorden

Drenthe

nee

Padhuis

40

Coevorden

Drenthe

nee

Oosterhesselen

41

Coevorden

Drenthe

nee

Zweeloo

42

Coevorden

Drenthe

nee

Hare

43

Coevorden

Drenthe

nee

Gees

44

Coevorden

Drenthe

ja

Coevorden

45

Coevorden

Drenthe

nee

Dalerpeel

46

Coevorden

Drenthe

nee

Dalerveen

47

Coevorden

Drenthe

nee

Diphoorn

48

Coevorden

Drenthe

nee

Aalden

49

Coevorden

Drenthe

nee

Dalen

50

Coevorden

Drenthe

nee

Eendracht, De

51

Coevorden

Drenthe

nee

Eeserveen

52

Coevorden

Drenthe

nee

Geesbrug

53

Coevorden

Drenthe

nee

Erm

54

Coevorden

Drenthe

nee

Achterste Erm

55

Coevorden

Drenthe

nee

Ballast

56

Coevorden

Drenthe

nee

Nieuwe Krim

57

Coevorden

Drenthe

nee

Haar, De

58

Coevorden

Drenthe

nee

Benneveld

59

Coevorden

Drenthe

nee

Binnenvree

60

Coevorden

Drenthe

nee

Haantje, 't

61

Cranendonck

Noord-Brabant

nee

Schoot

62

Cranendonck

Noord-Brabant

nee

Bosch

63

Cranendonck

Noord-Brabant

nee

Budel

64

Cranendonck

Noord-Brabant

nee

Toom

65

Cranendonck

Noord-Brabant

nee

Dorplein

66

Cranendonck

Noord-Brabant

ja

Cranendonck

67

Cranendonck

Noord-Brabant

nee

Berg

68

Cranendonck

Noord-Brabant

nee

Soerendonk

69

Cranendonck

Noord-Brabant

nee

Schoordijk

70

Cranendonck

Noord-Brabant

nee

Broekkant

71

Cranendonck

Noord-Brabant

nee

Klein-Schoot

72

Cranendonck

Noord-Brabant

nee

Laar

73

Cranendonck

Noord-Brabant

nee

Heesakker

74

Cranendonck

Noord-Brabant

nee

Keunenhoek

75

Cranendonck

Noord-Brabant

nee

Gastel

76

Cranendonck

Noord-Brabant

nee

Maarheeze

77

Cranendonck

Noord-Brabant

nee

Meemortel

78

Cranendonck

Noord-Brabant

nee

Hugten

79

Cranendonck

Noord-Brabant

nee

Midbuul

80

Cranendonck

Noord-Brabant

nee

Heikant

81

Cromstrijen

Zuid-Holland

nee

Schuring

82

Cromstrijen

Zuid-Holland

nee

Numansdorp

83

Cromstrijen

Zuid-Holland

nee

Oudesluis

84

Cromstrijen

Zuid-Holland

nee

Middelsluis

85

Cromstrijen

Zuid-Holland

ja

Cromstrijen

86

Cromstrijen

Zuid-Holland

nee

Klaaswaal

87

Cuijk

Noord-Brabant

nee

Klein Linden

88

Cuijk

Noord-Brabant

nee

Heihoek

89

Cuijk

Noord-Brabant

nee

Vianen

90

Cuijk

Noord-Brabant

nee

Katwijk

91

Cuijk

Noord-Brabant

nee

Huij

92

Cuijk

Noord-Brabant

nee

Beers

93

Cuijk

Noord-Brabant

nee

Ewinkel

94

Cuijk

Noord-Brabant

nee

Tongelaar

95

Cuijk

Noord-Brabant

ja

Cuijk

96

Cuijk

Noord-Brabant

nee

Nieuw-Gassel

97

Cuijk

Noord-Brabant

nee

Dommelsvoort

98

Cuijk

Noord-Brabant

nee

Ossenbroek

99

Cuijk

Noord-Brabant

nee

Galberg

100

Cuijk

Noord-Brabant

nee

Plaats, De

101

Cuijk

Noord-Brabant

nee

Haps

102

Cuijk

Noord-Brabant

nee

Linden

103

Cuijk

Noord-Brabant

nee

Sint Agatha

104

Culemborg

Gelderland

nee

Goilberdingen

105

Culemborg

Gelderland

ja

Culemborg

106

Culemborg

Gelderland

nee

Redichem

Aantal rijen: 106 Aantal kolommen: 4