SQL Academy · Lektion

Medarbejdere og ledere

Et klassisk hierarkieksempel.

Lektion 2 af 413 trin

Medarbejdere og ledere er en gratis SQL Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i SQL Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. SQL Academy-kurset indeholder 4 lektioner i alt.

Hvad er et selvjoin?

Et selvjoin opstår, når en tabel forbindes med sig selv. Det lyder måske usædvanligt, men det er yderst nyttigt, når rækker i en tabel har en relation til andre rækker i den samme tabel.

Det klassiske eksempel er en employees-tabel, hvor hver medarbejder kan have en leder — og denne leder også er en medarbejder, der er gemt i den samme tabel.

Tabellen med medarbejdere

Lad os oprette en enkel employees-tabel. Hver medarbejder har et id, et name og et manager_id, der peger tilbage på en anden række i den samme tabel.

Når manager_id er NULL, har medarbejderen ingen leder — vedkommende befinder sig øverst i hierarkiet (f.eks. den administrerende direktør).

CREATE TABLE employees (
  id         INT PRIMARY KEY,
  name       VARCHAR(100) NOT NULL,
  manager_id INT REFERENCES employees(id)
);

Indsættelse af eksempeldata

Lad os udfylde tabellen med et lille virksomhedshierarki. Alice er administrerende direktør (ingen leder). Bob og Carol refererer begge til Alice. Dave og Eve refererer til Bob.

INSERT INTO employees (id, name, manager_id) VALUES
  (1, 'Alice',   NULL),
  (2, 'Bob',     1),
  (3, 'Carol',   1),
  (4, 'Dave',    2),
  (5, 'Eve',     2),
  (6, 'Frank',   3);

Forespørgsel uden et join

Hvis vi bare vælger alle rækker, ser vi de rå manager_id-tal — ikke ledernes navne. Det er svært at læse og ikke nyttigt for slutbrugere.

SELECT id, name, manager_id
FROM employees;

Skrivning af selvjoinet

Hvis du vil vise lederens navn ved siden af hver medarbejder, forbinder du employees-tabellen med sig selv. Vi giver hver kopi et forskelligt alias: e for medarbejderen og m for lederen.

Joinbetingelsen forbinder medarbejderens manager_id med lederens id.

SELECT
  e.name   AS employee,
  m.name   AS manager
FROM employees e
JOIN employees m ON e.manager_id = m.id;

Inkludering af medarbejdere uden leder

Det ovenstående INNER JOIN skjuler Alice, fordi hendes manager_id er NULL — der er ingen matchende række på højre side. Brug et LEFT JOIN for at inkludere alle, også medarbejderen på øverste niveau.

Alice vises med NULL i lederkolonnen.

SELECT
  e.name              AS employee,
  m.name              AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;

Brug af COALESCE for bedre læsbarhed

NULL i lederkolonnen kan være forvirrende. Du kan bruge COALESCE til at erstatte NULL med en læsbar etiket som 'Ingen leder', så resultatet bliver tydeligere i rapporter.

SELECT
  e.name                              AS employee,
  COALESCE(m.name, 'No Manager')      AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id
ORDER BY manager, employee;

Find direkte medarbejdere

Vi kan vende forespørgslen om og spørge: hvem refererer til en bestemt leder? Det kaldes at finde direkte medarbejdere. Her finder vi alle medarbejdere, der refererer direkte til Alice (id = 1).

SELECT e.name AS direct_report
FROM employees e
WHERE e.manager_id = 1;

Optælling af medarbejdere pr. leder

Ved at kombinere et selvjoin med GROUP BY og COUNT kan vi se, hvor mange direkte medarbejdere hver leder har. Det er nyttigt til analyse af arbejdsbelastning.

SELECT
  m.name          AS manager,
  COUNT(e.id)     AS direct_reports
FROM employees e
JOIN employees m ON e.manager_id = m.id
GROUP BY m.name
ORDER BY direct_reports DESC;

To niveauer ned

Hvis du vil se to hierarkiske niveauer på én gang — medarbejderen, dennes leder og lederens leder — kan du forbinde tabellen en tredje gang. Hvert join tilføjer endnu et niveau i hierarkiet.

SELECT
  e.name   AS employee,
  m.name   AS manager,
  gm.name  AS grand_manager
FROM employees e
LEFT JOIN employees m  ON e.manager_id  = m.id
LEFT JOIN employees gm ON m.manager_id  = gm.id;

Når selvjoins har begrænsninger

Selvjoins fungerer godt til faste hierarkier med få niveauer (1–3 niveauer). Hvis dybden er ukendt eller ubegrænset — som i et virksomhedsdiagram, der kan gå 10 niveauer ned — har du i stedet brug for rekursive CTE'er.

Til de fleste praktiske forespørgsler om medarbejdere og ledere er selvjoin-tilgangen fra denne lektion det rette værktøj.

Hurtigt tjek

Test din forståelse af selvjoins og hierarkiet mellem medarbejdere og ledere.

Opsummering af lektionen

I denne lektion har du lært at bruge et selvjoin til at modellere og forespørge på et klassisk hierarki mellem medarbejdere og ledere, der er gemt i en enkelt tabel.

Vigtigste pointer:

  • Et selvjoin forbinder en tabel med sig selv ved hjælp af to forskellige aliaser.
  • Joinbetingelsen forbinder manager_id med id i den samme tabel.
  • Brug INNER JOIN for kun at se medarbejdere, der har en leder, og LEFT JOIN for at inkludere alle.
  • COALESCE kan erstatte NULL-værdier for ledere med en læsbar etiket.
  • Overvej rekursive CTE'er til hierarkier med ubegrænset dybde.
Gratis at komme i gang

Lær SQL med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
46
Lektioner
183

Ofte stillede spørgsmål

Er lektionen “Medarbejdere og ledere” gratis?

Ja — hele teksten til “Medarbejdere og ledere” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af SQL Academy-kurset, skal du opgradere til CoddyKit PRO. SQL Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Medarbejdere og ledere”?

Et klassisk hierarkieksempel. Du øver dig i SQL Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på SQL Academy?

Der kræves ingen tidligere erfaring. SQL Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Medarbejdere og ledere”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne SQL Academy-lektion?

Ja. Alle SQL Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Hvad er et self join
  2. Medarbejdere og ledere
  3. Sammenligning af rækker i samme tabel
  4. Begrænsninger ved self joins
← Tilbage til SQL Academy