Indsætter række(r) i én tabel. F.eks.:
INSERT INTO mytbl (col1, col2) VALUES (val1, val2);
INSERT INTO mytbl (col1, col2) SELECT (val1, val2) FROM xxx;
Udtrækker data (på tabelform). F.eks.:
SELECT col1, col2 FROM mytable ORDER BY col1;
SELECT col1, col2 FROM mytable1 JOIN mytable2 ON (mytable1.col1 = mytable2.col2) ORDER BY col1;
Opdaterer eksisterende data. F.eks.:
UPDATE mytable SET col2=val2 WHERE col1=1;
UPDATE mytable SET col2=table2.col2 FROM table2 WHERE mytable.id = table2.id;
Sletter rækker fra en tabel. F.eks.:
DELETE FROM mytable WHERE col1=1;
Øvelse
PostgreSQL funktioner kan angives i SELECT-listen. Eksempler:
SELECT
ogc_fid,
leder,
COALESCE(aabentid, 'Åbningstid ikke registreret') AS aabentid,
substring (leder, 1, strpos(leder, ' ')) AS fornavn_paa_leder,
CASE
WHEN ejerforhold = 'Kommunal' THEN 'Ja'
ELSE 'Nej'
END AS kommunal_klub
FROM
buf.klubber;
Distinct kan bruges til at finde entydige værdier:
SELECT DISTINCT p_ordning FROM trafik.p_pladser
Man behøver ikke en FROM clause (forskel ift. Oracle)
SELECT 'Handicap parkering'::text AS p_ordning, 'Gratis'::TEXT AS pris UNION
SELECT 'El-Bil plads', 'Gratis' UNION
SELECT 'Grøn betalingszone', 'Billig' UNION
SELECT 'Blå betalingszone', 'Mellempris' UNION
SELECT 'Motorcykel parkering', 'Ukendt' UNION
SELECT 'Taxiholdeplads', 'Gratis' UNION
SELECT '2-timers restriktion', 'Gratis' UNION
SELECT 'Turistbus plads', 'Gratis' UNION
SELECT 'Rød betalingszone', 'Dyr' UNION
SELECT 'Ambassade parkering', 'Gratis' UNION
SELECT 'Besøgsplads', 'Gratis' UNION
SELECT 'Delebil parkering', 'Gratis' UNION
SELECT 'Privat ordning', 'Gratis'
Eksempel på Propercase (initcap funktionen):
SELECT
test.input, initcap(test.input) AS output
FROM
(
SELECT 'eleverne var rigtig dygtige' UNION
SELECT 'CHRISTIAN FISCHER' UNION
SELECT 'martin bjærge'
) test
input | Output |
---|---|
eleverne var rigtig dygtige | Eleverne Var Rigtig Dygtige |
martin bjerge | Martin Bjerge |
CHRISTIAN FISCHER | Christian Fischer |
Eksempel på over() funktionen - viser de 2 bedste tider 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 |