CRUD-operationer

Insert (C)

Indsætter række(r) i én tabel. For eksempel:

INSERT INTO skema.mytbl (col1, col2) VALUES (val1, val2);
INSERT INTO skema.mytbl (col1, col2) SELECT (val1, val2) FROM xxx;

Select (R)

Udtrækker data (på tabelform). F.eks.:

SELECT col1, col2 FROM skema.mytable ORDER BY col1 LIMIT 100;
SELECT col1, col2 FROM skema.mytable1 skema.JOIN mytable2 ON (mytable1.col1 = mytable2.col2) ORDER BY col1;

Update (U)

Opdaterer eksisterende data. F.eks.:

UPDATE skema.mytable SET col2=val2 WHERE col1=1;
UPDATE skema.mytable SET col2=table2.col2 FROM table2 WHERE mytable.id = table2.id;

Delete (D)

Sletter rækker fra en tabel. F.eks.:

DELETE FROM skema.mytable WHERE col1=1;

Øvelse

  • CO40100t indeholder alle BBR bygninger i Svendborg kommune. Bygningens anvendelseskode ligger i feltet byg_anvend_kode, men vi mangler tekster for anvendelsen.
  • Fra pgAdmin - træstrukturen (HUSK: gem jeres kommandoer i et SQL-vindue til senere brug):
    • Opret jeres eget private "legeplads" schema i databasen
    • Opret en tabel med koder og tekster, så vi kan oversætte bygningsanvendelsen til noget meningsfyldt.
    • Indsæt nogle anvendelseskoder
    • Udtræk (udvalgte) data
    • Opdater (udvalgte) data
    • Slet (udvalgte) data

Eksempler på bygningsanvendelser:

  • (110, 'Stuehus til landbrugsejendom');
  • (120, 'Fritliggende enfamilieshus (parcelhus)');
  • (210, 'Bygning til erhvervsmæssig produktion vedrørende landbrug, gartneri, råstofudvinding o. lign');
  • (410, 'Bygning til biograf, teater, erhvervsmæssig udstilling, bibliotek, museum, kirke o. lign.');
  • (910, 'Garage med plads til et eller to køretøjer');
  • (920, 'Carport');
  • (930, 'Udhus');

Avancerede selectmuligheder

PostgreSQL funktioner kan angives i SELECT-listen. Eksempler:

SELECT
  fot_id,
  COALESCE(bygn_uuid, 'Bygning ikke geokodet!!'),
  CASE
    WHEN under_min = '0' THEN 'Nej'
    ELSE 'Ja'
  END AS bygning_under_minimums_stoerrelse,
  wkb_geometry
FROM
  kursus.bygning
LIMIT 100;

Distinct kan bruges til at finde entydige værdier:

SELECT DISTINCT
  bygn_type
FROM
  kursus.bygning

Man behøver ikke en FROM clause (forskel ift. Oracle)

SELECT 'Bygning'::text   AS bygn_type, 'Normal bygning, som man kan bo eller arbejde i'::TEXT AS bygn_type_beskrivelse UNION
SELECT 'Tank/Silo'::text             , 'Opbevaring af f.eks. gylle, korn o.lign.' UNION
SELECT 'Andet'                       , 'Ukendt anvendelse'

Eksempel på over() funktionen - viser de 2 bedste tider for marathonløbere. NB: bemærk også datatypen interval:

SELECT * FROM
(
  SELECT navn, tid, rank() OVER (PARTITION BY navn ORDER BY tid) AS rank FROM
    (
      SELECT 'Martin Bjærge Jensen'::text AS navn, '4:27:00'::interval AS tid UNION
      SELECT 'Wilson Kipsang', '2:03:23' UNION
      SELECT 'Wilson Kipsang', '2:05:45' UNION
      SELECT 'Wilson Kipsang', '2:15:21' UNION
      SELECT 'Martin Bjærge Jensen', '5:02:00' UNION
      SELECT 'Martin Bjærge Jensen', '5:27:32'UNION
      SELECT 'Dorthe Skovshoved Rasmussen ', '2:29:34'
  ) resultater
) ranking
WHERE rank<=2
navn tid rank
Dorthe Skovshoved Rasmussen 02:29:34 1
Martin Bjærge Jensen 04:27:00 1
Martin Bjærge Jensen 05:02:00 2
Wilson Kipsang 02:03:23 1
Wilson Kipsang 02:05:45 2

results matching ""

    No results matching ""