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)

=

'K'


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

Kaag en Braassem

Zuid-Holland

nee

Alkemade

2

Kaag en Braassem

Zuid-Holland

nee

Leimuiden

3

Kaag en Braassem

Zuid-Holland

nee

Vierambachtspolder

4

Kaag en Braassem

Zuid-Holland

nee

Oudendijkse Polder

5

Kaag en Braassem

Zuid-Holland

ja

Kaag en Braassem

6

Kaag en Braassem

Zuid-Holland

nee

Woubrugge

7

Kaag en Braassem

Zuid-Holland

nee

Kaagdorp

8

Kaag en Braassem

Zuid-Holland

nee

Kaag

9

Kaag en Braassem

Zuid-Holland

nee

Hoogmade

10

Kaag en Braassem

Zuid-Holland

nee

Jacobswoude

11

Kaag en Braassem

Zuid-Holland

nee

Nieuwe Wetering

12

Kaag en Braassem

Zuid-Holland

nee

Ofwegen

13

Kaag en Braassem

Zuid-Holland

nee

Vriezekoop

14

Kaag en Braassem

Zuid-Holland

nee

Bilderdam

15

Kaag en Braassem

Zuid-Holland

nee

Oud-Ade

16

Kaag en Braassem

Zuid-Holland

nee

Oude Wetering

17

Kaag en Braassem

Zuid-Holland

nee

Roelofarendsveen

18

Kaag en Braassem

Zuid-Holland

nee

Zevenhuizen

19

Kaag en Braassem

Zuid-Holland

nee

Rijpwetering

20

Kaag en Braassem

Zuid-Holland

nee

Zuidhoek

21

Kaag en Braassem

Zuid-Holland

nee

Rijnsaterwoude

22

Kampen

Overijssel

ja

Kampen

23

Kampen

Overijssel

nee

Kampereiland

24

Kampen

Overijssel

nee

Kamperveen

25

Kampen

Overijssel

nee

Wilsum

26

Kampen

Overijssel

nee

Oranjewijk

27

Kampen

Overijssel

nee

Veecaten

28

Kampen

Overijssel

nee

Oosterholt

29

Kampen

Overijssel

nee

Mastenbroek (ged.)

30

Kampen

Overijssel

nee

Plas, De

31

Kampen

Overijssel

nee

Nieuwstad

32

Kampen

Overijssel

nee

IJsselmuiden

33

Kampen

Overijssel

nee

Hanzewijk

34

Kampen

Overijssel

nee

Grafhorst

35

Kampen

Overijssel

nee

Zalk

36

Kampen

Overijssel

nee

Bisschopswetering

37

Kampen

Overijssel

nee

Zande, De

38

Kampen

Overijssel

nee

Brunnepe

39

Kampen

Overijssel

nee

Zandberg

40

Kampen

Overijssel

nee

Heerenbroek, 's-

41

Kampen

Overijssel

nee

Zuideinde

42

Kampen

Overijssel

nee

Zwartendijk

43

Kampen

Overijssel

nee

Hogeweg

44

Kapelle

Zeeland

nee

Wemeldinge

45

Kapelle

Zeeland

nee

Eversdijk

46

Kapelle

Zeeland

nee

Schore

47

Kapelle

Zeeland

nee

Biezelinge

48

Kapelle

Zeeland

ja

Kapelle

49

Katwijk

Zuid-Holland

nee

Katwijk aan Zee

50

Katwijk

Zuid-Holland

nee

Valkenburg

51

Katwijk

Zuid-Holland

nee

Rijnsburg

52

Katwijk

Zuid-Holland

nee

Katwijk aan den Rijn

53

Katwijk

Zuid-Holland

ja

Katwijk

54

Kerkrade

Limburg

nee

Vink

55

Kerkrade

Limburg

nee

Nulland

56

Kerkrade

Limburg

nee

Haanrade

57

Kerkrade

Limburg

nee

Rolduc

58

Kerkrade

Limburg

nee

Bleijerheide

59

Kerkrade

Limburg

nee

Ham

60

Kerkrade

Limburg

nee

Kaalheide

61

Kerkrade

Limburg

nee

Heilust

62

Kerkrade

Limburg

nee

Holz

63

Kerkrade

Limburg

nee

Chevremont

64

Kerkrade

Limburg

nee

Spekholzerheide

65

Kerkrade

Limburg

ja

Kerkrade

66

Kerkrade

Limburg

nee

Krichelberg

67

Kerkrade

Limburg

nee

Locht (ged.)

68

Kerkrade

Limburg

nee

Hopel (ged.)

69

Kerkrade

Limburg

nee

Gracht (ged.)

70

Kerkrade

Limburg

nee

Eygelshoven

71

Kerkrade

Limburg

nee

Terwinselen (ged.)

72

Kerkrade

Limburg

nee

Kloosterbosch

73

Koggenland

Noord-Holland

nee

Zuidermeer

74

Koggenland

Noord-Holland

nee

Westeinde

75

Koggenland

Noord-Holland

nee

Scharwoude

76

Koggenland

Noord-Holland

nee

Spierdijk

77

Koggenland

Noord-Holland

nee

Rustenburg

78

Koggenland

Noord-Holland

nee

Wester-Koggenland

79

Koggenland

Noord-Holland

nee

Wogmeer

80

Koggenland

Noord-Holland

nee

Ursem

81

Koggenland

Noord-Holland

nee

Oostmijzen

82

Koggenland

Noord-Holland

nee

Hulk, De

83

Koggenland

Noord-Holland

nee

Kathoek

84

Koggenland

Noord-Holland

nee

Mijzerkoog

85

Koggenland

Noord-Holland

nee

Hensbroek

86

Koggenland

Noord-Holland

nee

Grosthuizen

87

Koggenland

Noord-Holland

nee

Avenhorn

88

Koggenland

Noord-Holland

nee

Goorn, De

89

Koggenland

Noord-Holland

nee

Bobeldijk

90

Koggenland

Noord-Holland

nee

Noorddijk

91

Koggenland

Noord-Holland

nee

Berkhout

92

Koggenland

Noord-Holland

nee

Obdam

93

Koggenland

Noord-Holland

nee

Baarsdorpermeer

94

Koggenland

Noord-Holland

nee

Oudendijk

95

Koggenland

Noord-Holland

ja

Koggenland

96

Kollumerland en Nieuwkruisland

Friesland

ja

Kollumerland en Nieuwkruisland

97

Kollumerland en Nieuwkruisland

Friesland

nee

Kollum

98

Kollumerland en Nieuwkruisland

Friesland

nee

Westergeest

99

Kollumerland en Nieuwkruisland

Friesland

nee

Augsbuurt

100

Kollumerland en Nieuwkruisland

Friesland

nee

Zwagerveen

101

Kollumerland en Nieuwkruisland

Friesland

nee

Zwagerbosch

102

Kollumerland en Nieuwkruisland

Friesland

nee

Zandbulten

103

Kollumerland en Nieuwkruisland

Friesland

nee

Warfstermolen

104

Kollumerland en Nieuwkruisland

Friesland

nee

Kollumerpomp

105

Kollumerland en Nieuwkruisland

Friesland

nee

Kollumerzwaag

106

Kollumerland en Nieuwkruisland

Friesland

nee

Oudwoude

107

Kollumerland en Nieuwkruisland

Friesland

nee

Veenklooster

108

Kollumerland en Nieuwkruisland

Friesland

nee

Burum

109

Kollumerland en Nieuwkruisland

Friesland

nee

Triemen

110

Kollumerland en Nieuwkruisland

Friesland

nee

Munnekezijl

111

Korendijk

Zuid-Holland

nee

Schenkeldijk

112

Korendijk

Zuid-Holland

nee

Oosthoek

113

Korendijk

Zuid-Holland

nee

Piershil

114

Korendijk

Zuid-Holland

nee

Zuidzijde

115

Korendijk

Zuid-Holland

nee

Oudendijk

116

Korendijk

Zuid-Holland

nee

Zuid-Beijerland

117

Korendijk

Zuid-Holland

nee

Nieuwendijk

118

Korendijk

Zuid-Holland

nee

Zwartsluisje

119

Korendijk

Zuid-Holland

nee

Nieuw-Beijerland

120

Korendijk

Zuid-Holland

nee

Goudswaard

121

Korendijk

Zuid-Holland

nee

Tiengemeten

122

Korendijk

Zuid-Holland

ja

Korendijk

123

Krimpen aan den IJssel

Zuid-Holland

nee

Kortland (polder)

124

Krimpen aan den IJssel

Zuid-Holland

ja

Krimpen aan den IJssel

125

Krimpen aan den IJssel

Zuid-Holland

nee

Stormpolder

Aantal rijen: 125 Aantal kolommen: 4