SQL-opmaker en -validator - Formatteer SQL-query's Online Gratis
Gratis SQL-opmaker en -validator. Formatteert SQL automatisch met juiste inspringing en hoofdlettergebruik. Controleer syntaxfouten direct. Werkt met MySQL, PostgreSQL, SQL Server, Oracle.
SQL-opmaker en -validator
Formateer en valideer SQL-query's met automatische inspringing, trefwoordhoofdlettergebruik en syntaxfoutdetectie.
Documentatie
Wat is een SQL-opmaker en -validator?
Een SQL-opmaker is een hulpmiddel dat een SQL-query herschrijft met consistente spatiëring, regeleinden en hoofdletters voor trefwoorden, zodat de query gemakkelijker te lezen is. Een SQL-validator controleert diezelfde query op structurele fouten, zoals een niet-gesloten aanhalingsteken of een ontbrekend haakje, zonder verbinding te maken met een database. Dit hulpmiddel doet beide. Het draait volledig in de browser, waardoor de querytekst nooit naar een server wordt verzonden.
Een SQL-query opmaken
- Plak of typ een SQL-query in het invoervak.
- De opgemaakte versie verschijnt automatisch rechts, zonder dat je op een knop hoeft te drukken.
- Eventuele validatiefouten verschijnen in een lijst onder de uitvoer.
- Met de kopieerknop wordt de opgemaakte query naar het klembord gekopieerd.
Regels voor SQL-opmaak
Hoofdletters voor trefwoorden
De opmaker schrijft een vaste lijst met SQL-trefwoorden in hoofdletters, waar ze ook buiten een tekenreeks of een tussen aanhalingstekens geplaatste identifier voorkomen. De lijst omvat de belangrijkste clausules (SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT, OFFSET), join-termen (JOIN, LEFT, RIGHT, INNER, OUTER, FULL, CROSS, NATURAL, ON, USING), setoperatoren (UNION, INTERSECT, EXCEPT), instructietypen (INSERT, UPDATE, DELETE, CREATE, ALTER, DROP) en veelgebruikte operatoren en verbindingswoorden (AND, OR, NOT, IN, BETWEEN, LIKE, AS, CASE, WHEN, THEN, ELSE, END, ALL, DISTINCT, VALUES, SET en enkele andere).
Sommige woorden die op trefwoorden lijken, worden gelaten zoals ze zijn getypt. Aggregatiefuncties zoals COUNT, SUM en AVG staan niet op de lijst, dus count(*) blijft in kleine letters als het in kleine letters is getypt. Woorden voor de sorteerrichting, ASC en DESC, en de afzonderlijke letterlijke waarden TRUE, FALSE en NULL worden ook niet gewijzigd. Tekst in een tekenreeks ('...'), een tussen aanhalingstekens geplaatste identifier ("...", `...` of [...]) of een commentaar wordt nooit gewijzigd, ongeacht de inhoud.
Regeleinden en inspringing
Elke hoofdclausule begint op een nieuwe regel tegen de linkermarge: SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT en OFFSET. Een join begint als één geheel op een nieuwe regel, zodat LEFT JOIN, FULL OUTER JOIN en CROSS JOIN bij elkaar blijven en niet over twee regels worden gesplitst. Voor en na UNION en UNION ALL komt een lege regel, waardoor de queries die ze combineren van elkaar worden gescheiden. CASE en END beginnen op een nieuwe regel, en WHEN, THEN en ELSE beginnen op een ingesprongen regel. Elke komma begint ook een nieuwe regel, zodat een kolomlijst in SELECT of GROUP BY één kolom per regel bevat.
Inspringing komt alleen binnen haakjes voor. Inhoud binnen een subquery of een gegroepeerde expressie springt per nestingniveau twee spaties in. Een query zonder haakjes — de meeste alledaagse queries — wordt opgemaakt met elke clausule tegen de linkermarge en helemaal zonder inspringing.
Voorbeeld: voor en na het opmaken
Voor:
1select id, first_name, last_name, email from customers where status = 'active' order by last_name, first_name;
2Na:
1SELECT id,
2first_name,
3last_name,
4email
5FROM customers
6WHERE status = 'active'
7ORDER BY last_name,
8first_name;
9Elk trefwoord staat in hoofdletters en elke clausule en kolom staat op een eigen regel. Omdat de query geen haakjes bevat, is geen enkele regel ingesprongen.
Haakjes veranderen dat. Bij het opmaken van (select count(*) from employees e where e.department_id = d.id) als onderdeel van een grotere query springen de interne SELECT-, FROM- en WHERE-regels twee spaties in. count blijft in kleine letters, omdat het een functienaam is en geen trefwoord uit de lijst.
Wat controleert de SQL-validator?
De validator zoekt naar structurele problemen zonder verbinding te maken met een database:
- Niet-gesloten aanhalingstekens, haakjes en commentaren. Een enkel aanhalingsteken (
'), dubbel aanhalingsteken ("), backtick (`), vierkant haakje ([) of blokcommentaar (/*) dat wordt geopend maar nooit gesloten. - Niet-overeenkomende haakjes. Het aantal
(- en)-tekens buiten tekenreeksen en commentaren moet gelijk zijn. - Subqueries zonder haakjes. Een tweede
SELECTdie buiten alle haakjes staat, zoalsSELECT * FROM SELECT id FROM t. Twee queries die met een setoperator zijn verbonden (UNION,UNION ALL,INTERSECT,EXCEPT) worden niet gemarkeerd, omdat voor die operanden geen haakjes nodig zijn. Dat geldt ook voor twee instructies die door een puntkomma van elkaar zijn gescheiden. WHEREdie begint metANDofOR. Een verbindingswoord aan het begin, zonder voorafgaande voorwaarde.JOINzonder bijbehorende voorwaarde. EenJOINheeft eenON- ofUSING-clausule nodig.CROSS JOINenNATURAL JOINzijn hiervan uitgezonderd, omdat ze geen dergelijke clausule gebruiken.- Lege
GROUP BY- ofORDER BY-clausule. Het clausule-trefwoord zonder kolommen erna, aan het einde van de query. - Een onvolledige
WHERE-voorwaarde. Een onafgemaakte vergelijking zoalsWHERE status =zonder waarde, of een losseWHEREzonder tekst erna, aan het einde van de query. - Een
SELECTzonderFROM. Dit wordt alleen gemarkeerd wanneer de selectielijst uit gewone kolomnamen bestaat. Een expressie, functieaanroep, letterlijke waarde of waardefunctie zonder haakjes, zoalsCURRENT_DATE, is zelfstandig geldig. Daarom wordenSELECT 1 + 1enSELECT CURRENT_DATEniet gemarkeerd. - Volgorde van clausules. Er zijn twee specifieke controles:
GROUP BYmag niet vóórWHEREkomen enORDER BYmag niet vóórGROUP BYkomen. Deze controles worden op het hoogste niveau van de query uitgevoerd, waarbij inhoud binnen een subquery wordt genegeerd.
Wat controleert het hulpmiddel niet?
De validator weet niet of tabellen of kolommen daadwerkelijk bestaan, of gekoppelde kolommen compatibele typen hebben, of hoe een query zal presteren. Ook markeert de validator niet elke regel die een echte database afdwingt. Twee voorbeelden: HAVING zonder GROUP BY wordt geaccepteerd, omdat het legaal is in SQL om het volledige resultaat in één impliciete groep te groeperen; de validator geeft hiervoor dus geen foutmelding. Ook wordt niet gecontroleerd of elke niet-geaggregeerde kolom in de SELECT-lijst ook in GROUP BY voorkomt — die regel bestaat in de meeste databases, maar dit hulpmiddel controleert dit niet. Een ontbrekende afsluitende puntkomma wordt evenmin gemarkeerd, omdat een puntkomma een instructiescheidingsteken is en geen onderdeel van één query.
Voorbeeld: fouten die de validator onderschept
1SELECT id FROM orders
2JOIN users
3WHERE status =
4Deze query veroorzaakt twee fouten:
- "Een of meer JOIN-instructies missen de ON-voorwaarde." —
JOIN usersheeft geenON- ofUSING-clausule. - "WHERE-voorwaarde is onvolledig." —
status =heeft geen waarde na het gelijkteken.
Veelgestelde vragen
Werkt dit hulpmiddel met MySQL, PostgreSQL, SQL Server en Oracle?
Het verwerkt de algemene SQL-syntaxis die deze databases gemeen hebben: SELECT, JOIN, WHERE, GROUP BY en vergelijkbare clausules. Databasespecifieke syntaxis, zoals arrayliteralen van PostgreSQL of procedurele blokken in T-SQL, zal de opmaker niet laten vastlopen, maar krijgt mogelijk geen speciale verwerking.
Wordt de SQL-query naar een server verzonden?
Nee. Zowel het opmaken als de validatie vindt plaats in de browser. De querytekst wordt nergens naartoe verzonden.
Schrijft het hulpmiddel functienamen zoals COUNT, SUM en AVG in hoofdletters?
Nee. Alleen clausule-trefwoorden, join-termen en een vaste lijst met operatoren worden in hoofdletters geschreven. Functienamen zoals count, sum en avg, en de woorden asc, desc, true, false en null blijven precies zoals ze zijn getypt.
Markeert de validator HAVING zonder GROUP BY?
Nee. Een HAVING-clausule zonder GROUP BY groepeert het volledige resultaat in één groep. Dat is geldige SQL volgens de norm ISO/IEC 9075, dus de validator beschouwt dit niet als een fout.
Kan de validator elke SQL-fout onderscheppen?
Nee. De validator controleert de structuur — haakjes, aanhalingstekens, enkele regels voor de volgorde van clausules en enkele veelvoorkomende logische hiaten, zoals een JOIN zonder voorwaarde. Tabel- en kolomnamen, gegevenstypen en queryprestaties worden niet gecontroleerd. Er is nog steeds een echte databaseverbinding nodig om te bevestigen dat een query correct wordt uitgevoerd.
Verandert het opmaken hoe een query wordt uitgevoerd?
Nee. Het opmaken verandert alleen witruimte en de hoofdletters van niet-geciteerde trefwoorden. Alles binnen een tekenreeks, een tussen aanhalingstekens geplaatste identifier of een commentaar wordt ongewijzigd overgenomen, zodat de query precies dezelfde betekenis houdt.