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)

=

'U'


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

Ubbergen

Gelderland

nee

Wijler

2

Ubbergen

Gelderland

nee

Ooij

3

Ubbergen

Gelderland

nee

Smorenhoek

4

Ubbergen

Gelderland

nee

Leuth

5

Ubbergen

Gelderland

nee

Kekerdom

6

Ubbergen

Gelderland

nee

Erlecom

7

Ubbergen

Gelderland

nee

Erlecom en Ooij

8

Ubbergen

Gelderland

nee

Groenlanden

9

Ubbergen

Gelderland

nee

Persingen

10

Ubbergen

Gelderland

ja

Ubbergen

11

Ubbergen

Gelderland

nee

Berg en Dal (ged.)

12

Ubbergen

Gelderland

nee

Beek

13

Uden

Noord-Brabant

nee

Odiliapeel

14

Uden

Noord-Brabant

nee

Loo

15

Uden

Noord-Brabant

nee

Hengstheuvel

16

Uden

Noord-Brabant

nee

Hoenderbos

17

Uden

Noord-Brabant

nee

Maatsehei

18

Uden

Noord-Brabant

nee

Melle

19

Uden

Noord-Brabant

nee

Lankes

20

Uden

Noord-Brabant

nee

Hoeven

21

Uden

Noord-Brabant

nee

Hulstheuvel

22

Uden

Noord-Brabant

nee

Hultje

23

Uden

Noord-Brabant

nee

Niemeskant

24

Uden

Noord-Brabant

nee

Kooldert

25

Uden

Noord-Brabant

nee

Lagenheuvel

26

Uden

Noord-Brabant

nee

Heikant

27

Uden

Noord-Brabant

nee

Oosterens

28

Uden

Noord-Brabant

nee

Bedaf

29

Uden

Noord-Brabant

nee

Biesthoek

30

Uden

Noord-Brabant

nee

Bitswijk

31

Uden

Noord-Brabant

ja

Uden

32

Uden

Noord-Brabant

nee

Volkel

33

Uden

Noord-Brabant

nee

Slabroek

34

Uden

Noord-Brabant

nee

Rakt

35

Uden

Noord-Brabant

nee

Schadron

36

Uden

Noord-Brabant

nee

Duifhuis

37

Uden

Noord-Brabant

nee

Eikenheuvel

38

Uden

Noord-Brabant

nee

Raam

39

Uitgeest

Noord-Holland

nee

Assum

40

Uitgeest

Noord-Holland

ja

Uitgeest

41

Uitgeest

Noord-Holland

nee

Dorregeest

42

Uitgeest

Noord-Holland

nee

Koog, De

43

Uithoorn

Noord-Holland

ja

Uithoorn

44

Uithoorn

Noord-Holland

nee

Thamerdal

45

Uithoorn

Noord-Holland

nee

Noorderlegmeerpolder (ged.)

46

Uithoorn

Noord-Holland

nee

Kwakel, De

47

Uithoorn

Noord-Holland

nee

Boterdijk

48

Uithoorn

Noord-Holland

nee

Banken, De

49

Urk

Flevoland

ja

Urk

50

Utrecht

Utrecht

nee

Rivierenwijk

51

Utrecht

Utrecht

nee

Rijngebied

52

Utrecht

Utrecht

nee

Buiten-Wittevrouwen

53

Utrecht

Utrecht

ja

Utrecht

54

Utrecht

Utrecht

nee

Pijlsweerd

55

Utrecht

Utrecht

nee

Haarzuilens

56

Utrecht

Utrecht

nee

Oudenrijn

57

Utrecht

Utrecht

nee

Ham, Den

58

Utrecht

Utrecht

nee

Majella

59

Utrecht

Utrecht

nee

Oog in Al

60

Utrecht

Utrecht

nee

Ondiep

61

Utrecht

Utrecht

nee

Alendorp

62

Utrecht

Utrecht

nee

Maartensdijk

63

Utrecht

Utrecht

nee

Vleuten

64

Utrecht

Utrecht

nee

Meern, De

65

Utrecht

Utrecht

nee

Lauwerecht

66

Utrecht

Utrecht

nee

Lageweide

67

Utrecht

Utrecht

nee

Nieuw-Zuilen

68

Utrecht

Utrecht

nee

Laagnieuwkoop

69

Utrecht

Utrecht

nee

Tuindorp

70

Utrecht

Utrecht

nee

Veldhuizen

71

Utrechtse Heuvelrug

Utrecht

nee

Amerongen

72

Utrechtse Heuvelrug

Utrecht

nee

Valkenheide

73

Utrechtse Heuvelrug

Utrecht

nee

Breedeveen

74

Utrechtse Heuvelrug

Utrecht

ja

Utrechtse Heuvelrug

75

Utrechtse Heuvelrug

Utrecht

nee

Wijngaard, De

76

Utrechtse Heuvelrug

Utrecht

nee

Beerschoten

77

Utrechtse Heuvelrug

Utrecht

nee

Darthuizen

78

Utrechtse Heuvelrug

Utrecht

nee

Maarsbergen

79

Utrechtse Heuvelrug

Utrecht

nee

Leersum

80

Utrechtse Heuvelrug

Utrecht

nee

Lekdijk

81

Utrechtse Heuvelrug

Utrecht

nee

Klein Amsterdam

82

Utrechtse Heuvelrug

Utrecht

nee

Oudeweg

83

Utrechtse Heuvelrug

Utrecht

nee

Overberg

84

Utrechtse Heuvelrug

Utrecht

nee

Haar

85

Utrechtse Heuvelrug

Utrecht

nee

Haagje

86

Utrechtse Heuvelrug

Utrecht

nee

Rijsenburg

87

Utrechtse Heuvelrug

Utrecht

nee

Driebergen

88

Utrechtse Heuvelrug

Utrecht

nee

Doorn

89

Utrechtse Heuvelrug

Utrecht

nee

Maarn

Aantal rijen: 89 Aantal kolommen: 4