10 finger system er vigtig i programmering. Du er mere effektiv ved at bruge hurtige indtastningsteknikker til at skrive kode i programmeringssproget SQL.
Programmering i SQL og 10 finger system
At lære SQL og øve sig i blindskrift hænger naturligt sammen. SQL-forespørgsler er fyldt med parenteser, kommaer, operatorer og anførselstegn. Små fejl, som et forkert anførselstegn eller et glemt semikolon, kan få en hel forespørgsel til at fejle. Når du skriver SQL, er det nyttigt at vide, hvilke dele af syntaksen der er fælles på tværs af databaser, og hvilke der er specifikke for et bestemt system. Denne artikel fokuserer hovedsageligt på PostgreSQL, men vi nævner også MySQL, SQLite og SQL Server, hvor syntaksen adskiller sig.
Hvad er karakteristisk ved SQL-syntaks?
SQL (Structured Query Language) er et deklarativt sprog. I stedet for at beskrive trin for trin, hvordan data hentes, erklærer du blot, hvilke data du vil have. Næsten hver sætning starter med et nøgleord som SELECT
, INSERT
eller UPDATE
. Rækkefølgen af klausuler er fastlagt: SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...
. PostgreSQL og MySQL deler denne rækkefølge, så hvis du lærer den i ét system, kan du genbruge den i et andet.
SELECT id, name
FROM customers
WHERE active = true
ORDER BY created_at DESC;
Særlige tegn du ofte skriver
SQL indeholder mange skilletegn. Parenteser ()
omslutter funktioner og betingelser. Kommaer ,
adskiller kolonner. Punktum .
bruges til skema- og tabelnavne som public.users
. Enkeltanførselstegn '...'
bruges til tekststrenge. PostgreSQL bruger dobbelte anførselstegn "..."
til identifikatorer, mens MySQL bruger backticks `...`
. I SQL Server kan man også støde på kantede parenteser [...]
. Øvelse med disse symboler gør det lettere at skrive fejlfrie forespørgsler.
-- Tekststreng
SELECT * FROM books WHERE title = 'War and Peace';
-- Identifikatorer med mellemrum (PostgreSQL)
SELECT "Order ID", "Customer Name" FROM orders;
Store og små bogstaver
Efter konvention skrives SQL-nøgleord oftest med store bogstaver: SELECT
, FROM
, WHERE
. Det gør dem nemmere at se i forespørgslen, men det er ikke påkrævet. I PostgreSQL omdannes ikke-citerede identifikatorer automatisk til små bogstaver, så MyTable
og mytable
behandles ens. I MySQL afhænger det af operativsystemet. Til skriveøvelser er det almindeligt at bruge store bogstaver for nøgleord, da det tydeliggør strukturen i forespørgslen.
Semikolon og sætningens afslutning
I PostgreSQL slutter hver sætning normalt med et semikolon ;
. Hvis du glemmer det, kan det stoppe udførelsen i værktøjer som psql
. MySQL og SQLite er mere fleksible i interaktive skaller, men semikolon er stadig best practice. Dette lille tegn er ofte årsagen til fejl, når man skriver forespørgsler hurtigt.
SELECT-forespørgsler og joins
At skrive forespørgsler betyder ofte at skrive joins. PostgreSQL bruger INNER JOIN
, LEFT JOIN
og RIGHT JOIN
. Hvert join kræver nøgleordet ON
efterfulgt af en betingelse. Manglende mellemrum eller en fejl i betingelsen bryder forespørgslen. At øve joins hjælper med at blive præcis med tegn som =
og .
.
SELECT c.id, c.name, o.amount
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id
WHERE o.amount > 100;
Funktioner og udtryk
PostgreSQL indeholder mange funktioner som COUNT()
, SUM()
og AVG()
. De kræver altid parenteser. Funktioner til dato og tid, f.eks. NOW()
og DATE_TRUNC()
, er typiske for PostgreSQL. MySQL har tilsvarende funktioner som CURDATE()
og DATE_FORMAT()
. Når du skriver disse, skal du være opmærksom på underscores, kommaer og parenteser.
SELECT DATE_TRUNC('month', created_at) AS month,
COUNT(*) AS orders
FROM orders
GROUP BY month
ORDER BY month;
INSERT, UPDATE, DELETE
Kommandoer, der ændrer data, bruger mange skilletegn. INSERT
bruger parenteser og kommaer til kolonner og værdier. UPDATE
bruger =
adskilt af kommaer. DELETE
kombinerer nøgleord med betingelser. Disse strukturer er næsten identiske i PostgreSQL, MySQL, SQLite og SQL Server, selvom regler for anførselstegn kan variere.
INSERT INTO users (id, name, email)
VALUES (1, 'Alice', 'a@example.com');
UPDATE users
SET name = 'Bob', email = 'bob@example.com'
WHERE id = 1;
DELETE FROM users WHERE id = 2;
Common Table Expressions (CTE)
PostgreSQL bruger ofte CTE'er (Common Table Expressions), der indledes med WITH
. De kræver mange parenteser og kommaer, så de er gode til skriveøvelser. MySQL og SQLite understøtter dem i nyere versioner, og SQL Server gør også. At placere parenteserne korrekt er den største udfordring.
WITH recent_orders AS (
SELECT * FROM orders WHERE created_at > NOW() - INTERVAL '30 days'
)
SELECT customer_id, COUNT(*) AS order_count
FROM recent_orders
GROUP BY customer_id;
Vinduesfunktioner
PostgreSQL er kendt for sine avancerede vinduesfunktioner. Den typiske syntaks OVER (PARTITION BY ... ORDER BY ...)
kræver præcis brug af parenteser og nøgleord. MySQL og SQL Server understøtter også vinduesfunktioner, men PostgreSQL bruges ofte som reference.
SELECT customer_id,
SUM(amount) OVER (PARTITION BY customer_id ORDER BY created_at) AS running_total
FROM payments;
Parametre og placeholders
Når SQL bruges i applikationer, varierer placeholders mellem databaser. PostgreSQL bruger $1, $2
, MySQL og SQLite bruger ?
, og SQL Server bruger @p1
. Disse små symboler er lette at taste forkert, men de er kritiske for at koden kan køre.
-- PostgreSQL
SELECT * FROM users WHERE id = $1;
-- MySQL
SELECT * FROM users WHERE id = ?;
Opsummering
Efter konvention skrives SQL-nøgleord ofte med store bogstaver, mens identifikatorer forbliver små, medmindre de citeres. PostgreSQL bruger dobbelte anførselstegn til identifikatorer, placeholders $n
, CTE'er og vinduesfunktioner. MySQL bruger backticks og ?
-placeholders. SQL Server introducerer kantede parenteser og parametre @
. SQLite holder syntaksen enkel, men kræver stadig præcision. At øve SQL-forespørgsler styrker præcisionen i tegnsætning, nøgleord og symboler, og at fokusere på PostgreSQL giver erfaring med en af de mest populære moderne databaser.