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 |