Skriveindstillingerne kunne ikke opdateres. Genindlæs siden for at prøve igen.
Lektion i tifingersystemet: Programmering i sproget SQL
Reglerne for beregning af nøjagtighed er ændret. Denne øvelse starter forfra.
Det kunne ikke bekræftes, at din afsluttede øvelse blev gemt. Prøv at gemme igen uden at skrive teksten igen.
Lektion i tifingersystemet: Programmering i sproget SQL
Tifingersystemet er vigtigt i programmering. Du er mere effektiv, når du bruger hurtige skriveteknikker til at skrive kode i programmeringssproget SQL.
Programmering i SQL og tifingersystemet
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 funktionsargumenter og grupperer 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 skelnen mellem store og små bogstaver i database- og tabelnavne af operativsystemet og serverens indstillinger. 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 SQL afslutter et semikolon ; en sætning. Interaktive værktøjer som psql, MySQL-klienten og SQLite-skallen venter normalt på dette tegn, før de udfører sætningen. I psql kan du også sende den aktuelle forespørgsel med \g. Hvis du får en prompt til mere input i stedet for et resultat, skal du kontrollere, om sætningen er afsluttet.
SELECT-forespørgsler og joins
At skrive forespørgsler betyder ofte at skrive joins. PostgreSQL bruger INNER JOIN, LEFT JOIN og RIGHT JOIN. I eksemplet nedenfor angives joinbetingelsen efter nøgleordet ON. Joins kan også bruge USING eller NATURAL. 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å understregningstegn, 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 = til at tildele værdier og kommaer til at adskille de enkelte tildelinger. 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, SQLite og SQL Server understøtter også CTE'er. Kontrollér, at hver åbningsparentes har en tilsvarende slutparentes.
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. Eksemplet nedenfor bruger PostgreSQL-syntaks.
SELECT customer_id,
SUM(amount) OVER (PARTITION BY customer_id ORDER BY created_at) AS running_total
FROM payments;
Parametre og placeholders
I applikationer afhænger parameterpladsholdere af både databasen og den anvendte driver. PostgreSQLs egne forberedte sætninger bruger $1, $2, MySQLs forberedte sætninger og SQLite-forespørgsler kan bruge ?, og SQL Server-parametre har navne som @p1. En driver kan kræve en anden syntaks, f.eks. %s i Psycopg. Tjek driverens dokumentation, da disse små symboler er lette at taste forkert.
-- PostgreSQL
SELECT * FROM users WHERE id = $1;
-- MySQL
SELECT * FROM users WHERE id = ?;
Opsummering
Efter konvention skrives SQL-nøgleord ofte med store bogstaver. PostgreSQL omdanner identifikatorer uden dobbelte anførselstegn til små bogstaver; andre systemer har andre regler. 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.