Spinnendatenbank: Unterschied zwischen den Versionen
Martin (Diskussion | Beiträge) |
|||
| (20 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
=Anleitungen= | |||
* In bestehende Tabelle [[Fangdaten nachladen]] | |||
=SQL-Sammlung für Spinnen-Datenbank= | =SQL-Sammlung für Spinnen-Datenbank= | ||
==Habitatbindung einer Art== | |||
<syntaxhighlight lang='SQL' line> | |||
SELECT Art, btyp, Bindung | |||
FROM info_Habitatbindung, info_rl_habitat | |||
WHERE Art="XXXXXXXX" | |||
AND Habitattyp=mnemo | |||
</syntaxhighlight> | |||
Etwas ausführlicher: | |||
<syntaxhighlight lang='SQL' line> | |||
SELECT Art, mnemo as Kürzel, btyp as Biotoptyp, Bindung | |||
FROM info_Habitatbindung, info_rl_habitat | |||
WHERE Art="XXXXXXXX" | |||
AND Habitattyp=mnemo | |||
</syntaxhighlight> | |||
Artenliste zum Habitat-Memo: | |||
<syntaxhighlight lang='SQL' line> | |||
SELECT Art, Bindung | |||
FROM info_Habitatbindung | |||
WHERE Habitattyp="yyy" | |||
ORDER BY Art | |||
</syntaxhighlight> | |||
== Liste nach Datum Gruppieren== | |||
Problem: Datum1 und Datum liegen als VChar vor und eine Sortierung würde nach den Tagen vorgenommen. Für korrekte Sortierung muss der Datumsstring in ein Datum umgewandelt werden: <code>STR_TO_DATE(datestring, Format)</code> | |||
Die in MariaDB eingebaute Prozedur STR_TO_DATE() erwartet als ersten Parameter den Datumsstring und als zweiten einen Formatstring, welcher definiert, welches Format der Datumsstring hat. | |||
<syntaxhighlight lang='SQL' line> | |||
SELECT * FROM `data_raw_idx` | |||
WHERE datum LIKE "%2024" | |||
AND OrtID=314 -- = NSG Höltigbaum | |||
GROUP BY STR_TO_DATE(datum, '%d.%m.%Y'); | |||
</syntaxhighlight> | |||
==Welche Orte gibt es in Projekt mit ProjektID=1?== | ==Welche Orte gibt es in Projekt mit ProjektID=1?== | ||
Mit Angabe der OrtID | |||
<syntaxhighlight lang='SQL' line> | <syntaxhighlight lang='SQL' line> | ||
SELECT Ortsname | SELECT OrtID, Ortsname | ||
FROM meta_Orte, ref_Projekte_Orte | FROM meta_Orte, ref_Projekte_Orte | ||
WHERE ProjektID=1 | WHERE ProjektID=1 | ||
AND OrtID=IDOrt | AND OrtID=IDOrt | ||
GROUP BY Ortsname; | GROUP BY Ortsname; | ||
</syntaxhighlight> | |||
Ortsliste mit zugehörigen Biotopen: | |||
<syntaxhighlight lang='SQL' line> | |||
SELECT o.ortsname, d.biotop | |||
FROM data_raw_idx AS d, ref_Projekte_Orte AS r, meta_Orte AS o | |||
WHERE r.ProjektId=1 -- <== Variable hier! | |||
AND d.OrtId=r.OrtId | |||
AND r.OrtId=o.idOrt | |||
GROUP BY o.ortsname, d.biotop; | |||
</syntaxhighlight> | </syntaxhighlight> | ||
| Zeile 33: | Zeile 83: | ||
GROUP BY Ort, Artname; | GROUP BY Ort, Artname; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Gesamtartenliste des Projektes ohne Angabe von Orten oder Individuen: | |||
<syntaxhighlight lang='SQL' line> | |||
SELECT Artname | |||
FROM data_raw_idx AS d, ref_Projekte_Orte AS r | |||
WHERE r.ProjektID=1 | |||
AND r.OrtID=d.OrtID | |||
GROUP BY Artname; | |||
</syntaxhighlight> | |||
==Matrix-Abfrage: Gesamtartenzahlen nach Standorten und Jahren== | |||
<syntaxhighlight lang='SQL' line> | |||
SELECT SUM(mm+ww+juv+ind) AS Anzahl, Ortsname, SUBSTR(datum, 7, 4) AS Jahr | |||
FROM data_raw_idx AS d, meta_Orte AS o, ref_Projekte_Orte AS p | |||
WHERE p.ProjektID =1 | |||
AND p.OrtID=o.idOrt | |||
AND d.OrtID=o.idOrt | |||
GROUP BY Ortsname, Jahr; | |||
</syntaxhighlight> | |||
In alternativer Sortierung nach Orten: | |||
<syntaxhighlight lang='SQL' line> | |||
SELECT O.Ortsname AS Ort, Data.Artname, SUM(Data.mm+Data.ww+Data.juv+Data.ind) AS Individuen | |||
FROM data_raw_idx AS Data, meta_Orte AS O, ref_Projekte_Orte AS R | |||
WHERE R.ProjektID=1 | |||
AND R.OrtID=O.IdOrt | |||
AND Data.OrtID=R.OrtID | |||
GROUP BY Ort, Artname; | |||
</syntaxhighlight> | |||
Ortsname, Artname, Anzahl, Jahr: | |||
<syntaxhighlight lang='SQL' line> | |||
SELECT Ortsname, Artname, SUM(mm+ww+juv+ind) AS Anzahl, SUBSTR(datum, 7, 4) AS Jahr | |||
FROM data_raw_idx AS d, meta_Orte AS o, ref_Projekte_Orte AS p | |||
WHERE p.ProjektID =1 | |||
AND p.OrtID=o.idOrt | |||
AND d.OrtID=o.idOrt | |||
GROUP BY Ortsname, Jahr, Artname; | |||
</syntaxhighlight> | |||
==UPDATE== | |||
===Tabelle mit Daten einer andere Tabelle füllen=== | |||
Hier: In Tabelle ''info_Habitatbindung'' soll das Feld '''ArtID''' mit den Ids aus ''tax_Arten'' gesetzt werden: | |||
<syntaxhighlight lang='SQL' line> | |||
UPDATE info_Habitatbindung | |||
INNER JOIN tax_Arten ON Art=name | |||
SET ArtId=IdArt; | |||
</syntaxhighlight> | |||
INNER JOIN im Prinzip: | |||
<syntaxhighlight lang='SQL' line> | |||
UPDATE tabelle1 | |||
INNER JOIN tabelle2 ON tabelle1.id = tabelle2.id | |||
SET tabelle1.feld1 = tabelle2.wert1, | |||
tabelle1.feld2 = tabelle2.wert2 | |||
WHERE tabelle2.status = 'aktuell'; | |||
</syntaxhighlight> | |||
==Kontroll-Abfragen== | |||
Fallenwechsel-Daten für Standort n; hier n= 66 (Feldstr. Bunker) | |||
<syntaxhighlight lang='SQL' line> | |||
SELECT datum1, datum FROM `data_raw_idx` | |||
WHERE OrtID=66 | |||
GROUP BY STR_TO_DATE(datum1, '%d.%m.%Y'); | |||
</syntaxhighlight> | |||
Das selbe mit Angabe der Differenz in Tagen | |||
<syntaxhighlight lang='SQL' line> | |||
SELECT datum1, datum, DATEDIFF(STR_TO_DATE(datum, '%d.%m.%Y'),STR_TO_DATE(datum1, '%d.%m.%Y')) AS Tage | |||
FROM `data_raw_idx` | |||
WHERE OrtID=66 | |||
GROUP BY STR_TO_DATE(datum1, '%d.%m.%Y'); | |||
</syntaxhighlight> | |||
===Info=== | |||
<syntaxhighlight lang='SQL'> | |||
DATEDIFF(expr1, expr2) | |||
</syntaxhighlight> | |||
[https://mariadb.com/docs/server/reference/sql-functions/date-time-functions/datediff https://mariadb.com/docs/server/reference/sql-functions/date-time-functions/datediff] | |||
Aktuelle Version vom 8. März 2026, 21:29 Uhr
Anleitungen
- In bestehende Tabelle Fangdaten nachladen
SQL-Sammlung für Spinnen-Datenbank
Habitatbindung einer Art
SELECT Art, btyp, Bindung
FROM info_Habitatbindung, info_rl_habitat
WHERE Art="XXXXXXXX"
AND Habitattyp=mnemo
Etwas ausführlicher:
SELECT Art, mnemo as Kürzel, btyp as Biotoptyp, Bindung
FROM info_Habitatbindung, info_rl_habitat
WHERE Art="XXXXXXXX"
AND Habitattyp=mnemo
Artenliste zum Habitat-Memo:
SELECT Art, Bindung
FROM info_Habitatbindung
WHERE Habitattyp="yyy"
ORDER BY Art
Liste nach Datum Gruppieren
Problem: Datum1 und Datum liegen als VChar vor und eine Sortierung würde nach den Tagen vorgenommen. Für korrekte Sortierung muss der Datumsstring in ein Datum umgewandelt werden: STR_TO_DATE(datestring, Format)
Die in MariaDB eingebaute Prozedur STR_TO_DATE() erwartet als ersten Parameter den Datumsstring und als zweiten einen Formatstring, welcher definiert, welches Format der Datumsstring hat.
SELECT * FROM `data_raw_idx`
WHERE datum LIKE "%2024"
AND OrtID=314 -- = NSG Höltigbaum
GROUP BY STR_TO_DATE(datum, '%d.%m.%Y');
Welche Orte gibt es in Projekt mit ProjektID=1?
Mit Angabe der OrtID
SELECT OrtID, Ortsname
FROM meta_Orte, ref_Projekte_Orte
WHERE ProjektID=1
AND OrtID=IDOrt
GROUP BY Ortsname;
Ortsliste mit zugehörigen Biotopen:
SELECT o.ortsname, d.biotop
FROM data_raw_idx AS d, ref_Projekte_Orte AS r, meta_Orte AS o
WHERE r.ProjektId=1 -- <== Variable hier!
AND d.OrtId=r.OrtId
AND r.OrtId=o.idOrt
GROUP BY o.ortsname, d.biotop;
Artenliste nach Standorten eines Projektes
Hier: ProjektID=1 (Green roof, Hamburg)
SELECT Data.Artname, O.Ortsname AS Ort
FROM data_raw_idx AS Data, meta_Orte AS O, ref_Projekte_Orte AS R
WHERE R.ProjektID=1
AND R.OrtID=O.IdOrt
AND Data.OrtID=R.OrtID
GROUP BY Ort, Artname;
Das selbe mit Ausgabe der Individuenzahl:
SELECT Data.Artname, SUM(Data.mm+Data.ww+Data.juv+Data.ind) AS Individuen, O.Ortsname AS Ort
FROM data_raw_idx AS Data, meta_Orte AS O, ref_Projekte_Orte AS R
WHERE R.ProjektID=1
AND R.OrtID=O.IdOrt
AND Data.OrtID=R.OrtID
GROUP BY Ort, Artname;
Gesamtartenliste des Projektes ohne Angabe von Orten oder Individuen:
SELECT Artname
FROM data_raw_idx AS d, ref_Projekte_Orte AS r
WHERE r.ProjektID=1
AND r.OrtID=d.OrtID
GROUP BY Artname;
Matrix-Abfrage: Gesamtartenzahlen nach Standorten und Jahren
SELECT SUM(mm+ww+juv+ind) AS Anzahl, Ortsname, SUBSTR(datum, 7, 4) AS Jahr
FROM data_raw_idx AS d, meta_Orte AS o, ref_Projekte_Orte AS p
WHERE p.ProjektID =1
AND p.OrtID=o.idOrt
AND d.OrtID=o.idOrt
GROUP BY Ortsname, Jahr;
In alternativer Sortierung nach Orten:
SELECT O.Ortsname AS Ort, Data.Artname, SUM(Data.mm+Data.ww+Data.juv+Data.ind) AS Individuen
FROM data_raw_idx AS Data, meta_Orte AS O, ref_Projekte_Orte AS R
WHERE R.ProjektID=1
AND R.OrtID=O.IdOrt
AND Data.OrtID=R.OrtID
GROUP BY Ort, Artname;
Ortsname, Artname, Anzahl, Jahr:
SELECT Ortsname, Artname, SUM(mm+ww+juv+ind) AS Anzahl, SUBSTR(datum, 7, 4) AS Jahr
FROM data_raw_idx AS d, meta_Orte AS o, ref_Projekte_Orte AS p
WHERE p.ProjektID =1
AND p.OrtID=o.idOrt
AND d.OrtID=o.idOrt
GROUP BY Ortsname, Jahr, Artname;
UPDATE
Tabelle mit Daten einer andere Tabelle füllen
Hier: In Tabelle info_Habitatbindung soll das Feld ArtID mit den Ids aus tax_Arten gesetzt werden:
UPDATE info_Habitatbindung
INNER JOIN tax_Arten ON Art=name
SET ArtId=IdArt;
INNER JOIN im Prinzip:
UPDATE tabelle1
INNER JOIN tabelle2 ON tabelle1.id = tabelle2.id
SET tabelle1.feld1 = tabelle2.wert1,
tabelle1.feld2 = tabelle2.wert2
WHERE tabelle2.status = 'aktuell';
Kontroll-Abfragen
Fallenwechsel-Daten für Standort n; hier n= 66 (Feldstr. Bunker)
SELECT datum1, datum FROM `data_raw_idx`
WHERE OrtID=66
GROUP BY STR_TO_DATE(datum1, '%d.%m.%Y');
Das selbe mit Angabe der Differenz in Tagen
SELECT datum1, datum, DATEDIFF(STR_TO_DATE(datum, '%d.%m.%Y'),STR_TO_DATE(datum1, '%d.%m.%Y')) AS Tage
FROM `data_raw_idx`
WHERE OrtID=66
GROUP BY STR_TO_DATE(datum1, '%d.%m.%Y');
Info
DATEDIFF(expr1, expr2)
https://mariadb.com/docs/server/reference/sql-functions/date-time-functions/datediff