Spring til indhold
Academi.dk

SQL

SELECT - hent data

Begynder DA↔EN-ordliste

SELECT er den forespørgsel, du bruger mest. Du angiver hvilke kolonner du vil have, hvilken tabel de kommer fra, og eventuelt hvordan resultatet skal sorteres og begrænses. Databasen svarer med rækker og kolonner, uanset hvor mange der er.

Grundformen

SELECT navn, email
FROM kunde
ORDER BY navn;

Tre dele: hvilke kolonner, hvilken tabel, hvilken rækkefølge. Resultatet er altid en tabel, også når der kun er én række eller ingen.

Skriv nøgleordene med store bogstaver. SQL er ligeglad, men det gør en lang forespørgsel meget lettere at læse, og det er det, der bliver bedømt.

Vælg kolonner, ikke stjerner

SELECT * FROM kunde;

* betyder alle kolonner. Det er fint, mens du undersøger en tabel, du ikke kender. I den kode, du afleverer, skriver du kolonnerne ud: så ved læseren, hvad du bruger, og forespørgslen går ikke i stykker, hvis nogen tilføjer en kolonne.

Aliasser gør resultatet læsbart

SELECT
  navn        AS kundenavn,
  pris * 1.25 AS pris_med_moms
FROM produkt;

AS giver kolonnen et andet navn i resultatet. Det bruges især til beregnede kolonner, som ellers får et ubrugeligt navn.

Tabeller kan også få et kort alias, hvilket er nødvendigt, så snart du joiner:

SELECT k.navn, o.dato
FROM kunde AS k
JOIN ordre AS o ON o.kunde_id = k.id;

Kun de forskellige

SELECT DISTINCT by FROM kunde;

DISTINCT fjerner dubletter i resultatet. Bruger du den ofte, er det tit et tegn på, at der er et join, som giver flere rækker end forventet. Se JOIN. Kig altid på årsagen, før du lægger DISTINCT på.

Begræns antallet

Her adskiller dialekterne sig, og det er værd at kende begge:

-- MS SQL Server (det, kurset bruger)
SELECT TOP 10 navn FROM kunde ORDER BY oprettet DESC;

-- MySQL, PostgreSQL, SQLite
SELECT navn FROM kunde ORDER BY oprettet DESC LIMIT 10;

ORDER BY … DESC sorterer faldende, ASC (standard) stigende. Uden ORDER BY er rækkefølgen ikke garanteret, heller ikke selvom den ser stabil ud, mens du tester.

Beregninger i SELECT

SELECT
  navn,
  pris,
  pris * 0.8 AS tilbudspris,
  UPPER(navn) AS navn_store_bogstaver
FROM produkt;

Alt, hvad der kan regnes ud pr. række, kan stå i SELECT. Skal der derimod regnes på tværs af flere rækker, summer, gennemsnit, antal, skal du bruge GROUP BY.

Kort opsamling

  • SELECT kolonner FROM tabel ORDER BY kolonne;
  • Skriv kolonnenavne frem for * i afleveret kode.
  • AS navngiver beregnede kolonner og forkorter tabelnavne.
  • Uden ORDER BY er rækkefølgen tilfældig.

Læs videre

Senest gennemgået .