Hopp til innhold

SQL Formatterer & Validator - Formater SQL-spørringer på nettet gratis

Gratis SQL-formatterer og validator. Formater SQL automatisk med riktig innrykk og stor/liten bokstav. Sjekk syntaksfeil umiddelbart. Fungerer med MySQL, PostgreSQL, SQL Server, Oracle.

SQL Formatterer & Validator

Formater og valider SQL-spørringer med automatisk innrykk, nøkkelordkapitalisering og syntaksfeildeteksjon.

Skriv inn en SQL-spørring for å se det formaterte resultatet.
Lastekalkulator...
📚

Dokumentasjon

Hva er en SQL-formaterer og -validator?

En SQL-formaterer er et verktøy som skriver om en SQL-spørring med konsekvent mellomrom, linjeskift og store bokstaver i nøkkelordene, slik at den blir enklere å lese. En SQL-validator kontrollerer den samme spørringen for strukturelle feil, for eksempel et uavsluttet anførselstegn eller en manglende parentes, uten å koble til en database. Dette verktøyet gjør begge deler. Det kjører utelukkende i nettleseren, slik at spørringsteksten aldri sendes til en server.

Slik formaterer du en SQL-spørring

  1. Lim inn eller skriv inn en SQL-spørring i inndataboksen.
  2. Den formaterte versjonen vises automatisk til høyre, uten at du trenger å trykke på en knapp.
  3. Eventuelle valideringsfeil vises i en liste under resultatet.
  4. En kopieringsknapp kopierer den formaterte spørringen til utklippstavlen.

Regler for SQL-formatering

Store bokstaver i nøkkelord

Formatereren skriver en fast liste med SQL-nøkkelord med store bokstaver overalt der de forekommer utenfor en tekststreng eller en identifikator i anførselstegn. Listen omfatter hoveddelene (SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT, OFFSET), ord for sammenføyning (JOIN, LEFT, RIGHT, INNER, OUTER, FULL, CROSS, NATURAL, ON, USING), mengdeoperatorer (UNION, INTERSECT, EXCEPT), setningstyper (INSERT, UPDATE, DELETE, CREATE, ALTER, DROP) og vanlige operatorer og forbindelsesord (AND, OR, NOT, IN, BETWEEN, LIKE, AS, CASE, WHEN, THEN, ELSE, END, ALL, DISTINCT, VALUES, SET og noen flere).

Noen ord som ser ut som nøkkelord, beholdes slik de ble skrevet. Aggregeringsfunksjoner som COUNT, SUM og AVG står ikke på listen, så count(*) forblir skrevet med små bokstaver hvis det ble skrevet slik. Retningsord for sortering, ASC og DESC, og konstantene TRUE, FALSE og NULL når de står alene, endres heller ikke. Tekst i en tekstkonstant ('...'), en identifikator i anførselstegn ("...", `...` eller [...]) eller en kommentar endres aldri, uansett hva den inneholder.

Linjeskift og innrykk

Hver hoveddel begynner på en ny linje ved venstremargen: SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT og OFFSET. En sammenføyning begynner på en ny linje som én enhet, slik at LEFT JOIN, FULL OUTER JOIN og CROSS JOIN holdes samlet i stedet for å deles over to linjer. UNION og UNION ALL får en tom linje over og under, slik at spørringene de kombinerer, skilles fra hverandre. CASE og END begynner på en ny linje, mens WHEN, THEN og ELSE begynner på en linje med innrykk. Hvert komma begynner også en ny linje, slik at en kolonneliste i SELECT eller GROUP BY ender med én kolonne per linje.

Innrykk brukes bare inne i parenteser. Innhold i en underforespørsel eller et gruppert uttrykk får to mellomroms innrykk for hvert nestingsnivå. En spørring uten parenteser – noe som gjelder de fleste dagligdagse spørringer – formateres med alle deler helt inntil venstremargen og uten innrykk.

Eksempel: før og etter formatering

Før:

1select id, first_name, last_name, email from customers where status = 'active' order by last_name, first_name;
2

Etter:

1SELECT id,
2first_name,
3last_name,
4email
5FROM customers
6WHERE status = 'active'
7ORDER BY last_name,
8first_name;
9

Alle nøkkelord skrives med store bokstaver, og hver del og kolonne står på sin egen linje. Siden spørringen ikke har parenteser, har ingen linjer innrykk.

Parenteser endrer dette. Når (select count(*) from employees e where e.department_id = d.id) formateres som en del av en større spørring, får den indre SELECT-, FROM- og WHERE-delen to mellomroms innrykk, og count forblir skrevet med små bokstaver fordi det er et funksjonsnavn, ikke et nøkkelord på listen.

Hva SQL-validatoren kontrollerer

Validatoren ser etter strukturelle problemer uten å koble til en database:

  • Uavsluttede anførselstegn, hakeparenteser og kommentarer. Et enkelt anførselstegn ('), dobbelt anførselstegn ("), en grav aksent (`), en hakeparentes ([) eller en blokkkommentar (/*) som er åpnet, men aldri lukket.
  • Ubalanserte parenteser. Antallet ( og ) utenfor tekststrenger og kommentarer må være likt.
  • Underforespørsler uten parenteser. En ny SELECT som står utenfor alle parenteser, for eksempel SELECT * FROM SELECT id FROM t. To spørringer som er koblet sammen med en mengdeoperator (UNION, UNION ALL, INTERSECT, EXCEPT), rapporteres ikke som feil, fordi operandene ikke trenger parenteser. Det samme gjelder to setninger som er skilt med et semikolon.
  • WHERE som begynner med AND eller OR. En innledende forbindelse uten noe foran.
  • JOIN uten en tilhørende betingelse. En JOIN trenger en ON- eller USING-del. CROSS JOIN og NATURAL JOIN er unntatt, siden de ikke bruker en slik del.
  • Tom GROUP BY eller ORDER BY. Nøkkelordet for delen står uten kolonner etter seg på slutten av spørringen.
  • En ufullstendig WHERE-betingelse. En ufullstendig sammenligning, for eksempel WHERE status = uten en verdi, eller en frittstående WHERE uten noe etter seg på slutten av spørringen.
  • En SELECT uten FROM. Rapporteres bare når utvalgslisten består av enkle kolonnenavn. Et uttrykk, et funksjonskall, en konstant eller en verdifunksjon skrevet uten parenteser, for eksempel CURRENT_DATE, er gyldig alene, så SELECT 1 + 1 og SELECT CURRENT_DATE rapporteres ikke som feil.
  • Rekkefølge på deler. To bestemte kontroller utføres: GROUP BY må ikke komme før WHERE, og ORDER BY må ikke komme før GROUP BY. Dette kontrolleres på øverste nivå i spørringen, og alt inne i en underforespørsel ignoreres.

Hva den ikke kontrollerer

Validatoren vet ikke om tabeller eller kolonner faktisk finnes, om sammenføyde kolonner har kompatible datatyper, eller hvordan en spørring vil yte. Den rapporterer heller ikke alle reglene som en ekte database håndhever. To eksempler: HAVING brukt uten GROUP BY godtas, fordi det er gyldig SQL å gruppere hele resultatet i én implisitt gruppe, så validatoren rapporterer ingen feil for dette. Den kontrollerer heller ikke om hver ikke-aggregerte kolonne i SELECT-listen også finnes i GROUP BY – denne regelen finnes i de fleste databaser, men dette verktøyet tester ikke for den. Et manglende semikolon på slutten rapporteres heller ikke, siden et semikolon skiller setninger og ikke er en del av én enkelt spørring.

Eksempel: feil validatoren oppdager

1SELECT id FROM orders
2JOIN users
3WHERE status =
4

Denne spørringen gir to feil:

  1. «Én eller flere JOIN-setninger mangler ON-betingelsen.» – JOIN users har ingen ON- eller USING-del.
  2. «WHERE-betingelsen er ufullstendig.» – status = har ingen verdi etter likhetstegnet.

Ofte stilte spørsmål

Fungerer dette verktøyet med MySQL, PostgreSQL, SQL Server og Oracle?

Det håndterer den grunnleggende SQL-syntaksen som disse databasene har til felles: SELECT, JOIN, WHERE, GROUP BY og tilsvarende deler. Databasespesifikk syntaks, for eksempel PostgreSQL-matrisekonstanter eller prosedyriske T-SQL-blokker, vil ikke føre til at formatereren feiler, men den får kanskje ikke særskilt behandling.

Sendes SQL-spørringen til en server?

Nei. Både formatering og validering kjører i nettleseren. Spørringsteksten overføres ikke noe sted.

Skriver den funksjonsnavn som COUNT, SUM og AVG med store bokstaver?

Nei. Bare nøkkelord for deler, ord for sammenføyning og en fast liste med operatorer skrives med store bokstaver. Funksjonsnavn som count, sum og avg, samt ordene asc, desc, true, false og null, beholdes nøyaktig slik de ble skrevet.

Rapporterer validatoren HAVING brukt uten GROUP BY som en feil?

Nei. En HAVING-del uten GROUP BY grupperer hele resultatet i én enkelt gruppe, noe som er gyldig SQL i henhold til ISO/IEC 9075-standarden, så validatoren behandler det ikke som en feil.

Kan validatoren oppdage alle SQL-feil?

Nei. Den kontrollerer strukturen – parenteser, anførselstegn, noen regler for rekkefølgen på deler og enkelte vanlige logiske mangler, for eksempel en JOIN uten betingelse. Den kontrollerer ikke tabell- eller kolonnenavn, datatyper eller spørringsytelse. Det kreves fortsatt en ekte databasetilkobling for å bekrefte at en spørring kjører riktig.

Endrer formatering hvordan en spørring kjører?

Nei. Formatering endrer bare mellomrom og bruk av store bokstaver i nøkkelord uten anførselstegn. Alt inne i en tekststreng, en identifikator i anførselstegn eller en kommentar kopieres uendret, så spørringen betyr nøyaktig det samme som før.

Referanser