---
title: "SQL-Abfragen"
topicId: "BatBase_SQL_Abfragen"
contextId: 123
editionen: [professional, server]
status: aktualisiert
version: "5.4"
---
Die folgenden SQL-Abfragen helfen bei speziellen Auswertungen der BatBase-Daten. Sie können sie als Vorlage verwenden und an Ihre Daten anpassen.

## So verwenden Sie die Abfragen

1. Wechseln Sie in das Modul _Liste_.
2. Blenden Sie über \[SQL-Filter\] (Registerkarte _Liste_, Bediengruppe _Filteransicht_) das Eingabefeld für SQL-Anweisungen ein.
3. Kopieren Sie die gewünschte Abfrage in das Eingabefeld, passen Sie sie an und führen Sie sie aus.

Es gibt zwei Arten von Abfragen:

- **Abfragen, die mit `WHERE` beginnen,** filtern die Beobachtungen in der Liste.
- **Abfragen, die mit `SELECT` beginnen,** erzeugen eine eigene Ergebnistabelle, zum Beispiel mit Summen oder Anzahlen. Dafür benötigen Sie die Berechtigung für SQL-Abfragen.

Siehe auch [Benutzerdefinierter SQL-Filter](/desktop/daten-finden-und-bearbeiten/benutzerdefinierter-sql-filter).

:::note
In den Abfragen kommen einige feste Werte vor:

- `ID_FundTyp = 540`: Beringung, `542`: Wiederfund, `541`: Umberingung
- `ID_AddIn = 13`: Datensätze aus BatBase
- `Flugstrecke` wird in Metern gespeichert, `20000` entspricht also 20 km.

Ersetzen Sie Platzhalter wie die GUID eines Beringers (`'{4FE5E83C-...}'`), Jahreszahlen oder Ortsnamen durch Ihre eigenen Werte.
:::

## Beispielabfragen

**Alle Beringungen und Wiederfunde von Tieren, die ein Beringer beringt oder wiedergefunden hat (Export Beringer-Datenbank)**

```sql
WHERE tblDaten.Ringnummer IN (SELECT DISTINCT tblDaten.Ringnummer FROM tblDaten 
WHERE tblDaten.GUID_Beobachter = '{4FE5E83C-EDA1-43C5-BB16-9E73962E4FF7}')
```

Setzen Sie die GUID des gewünschten Beringers ein.

**Alle Wiederfunde von Tieren, die ein Beringer beringt hat**

```sql
WHERE tblDaten.Ringnummer IN (SELECT DISTINCT tblDaten.Ringnummer FROM tblDaten 
WHERE GUID_Beobachter = '{4FE5E83C-EDA1-43C5-BB16-9E73962E4FF7}' 
AND ID_FundTyp IN (540)) AND ID_FundTyp <> 540
```

Setzen Sie die GUID des gewünschten Beringers ein.

**Alle Wiederfunde aus dem Jahr 2013 von Tieren, die ein Beringer beringt und ein anderer Beringer gefunden hat (Variante 1)**

```sql
WHERE tblDaten.Ringnummer IN (SELECT DISTINCT tblDaten.Ringnummer FROM tblDaten 
WHERE tblDaten.GUID_Beobachter = '{4FE5E83C-EDA1-43C5-BB16-9E73962E4FF7}'
AND tblDaten.ID_FundTyp = 540)
AND tblDaten.ID_FundTyp = 542 
AND tblDaten.GUID_Beobachter <> '{4FE5E83C-EDA1-43C5-BB16-9E73962E4FF7}'
AND tblDaten.Jahr = 2013
```

Setzen Sie die GUID des gewünschten Beringers und das gewünschte Jahr ein.

**Alle Wiederfunde aus dem Jahr 2013 von Tieren, die ein Beringer beringt und ein anderer Beringer gefunden hat (Variante 2)**

```sql
SELECT ID_FundTyp, Ringnummer, Datum, Ortsbezeichnung, Art_deutsch, Beobachter 
FROM tblDaten INNER JOIN tblArten 
ON tblDaten.ID_Art = tblArten.ID_Art INNER JOIN tblBeobachter 
ON tblDaten.GUID_Beobachter = tblBeobachter.GUID_Beobachter 
WHERE Ringnummer IN (
SELECT DISTINCT (Ringnummer) FROM tblDaten 
INNER JOIN (SELECT DISTINCT Ringnummer AS Beringung_Ringnummer, GUID_Beobachter 
AS Beringung_Beobachter FROM tblDaten WHERE tblDaten.ID_FundTyp = 540) A 
ON tblDaten.Ringnummer = A.Beringung_Ringnummer 
WHERE tblDaten.ID_FundTyp = 542 
AND  tblDaten.GUID_Beobachter <> Beringung_Beobachter
AND  tblDaten.Jahr = 2013)
AND (tblDaten.Jahr = 2013 OR ID_FundTyp = 540)
ORDER BY Ringnummer, ID_Fundtyp
```

Setzen Sie das gewünschte Jahr ein.

**Export Beringer-Datenbank (Beringergemeinschaft)**

```sql
WHERE Ringnummer IN (SELECT DISTINCT Ringnummer FROM tblDaten 
WHERE GUID_Beobachter IN 
('{4FE5E83C-EDA1-43C5-BB16-9E73962E4FF7}', 
 '{257D4E1E-7A04-4917-AD46-C001F210BCCA}',
 '{14F3E752-9779-4DBA-8002-E3C504F044A5}',
 '{DEA89588-F150-4954-AD0A-D4D2F5EA0318}'))
```

Setzen Sie die GUIDs der gewünschten Beringer ein.

**Übersicht über alle ausgegebenen Ringe**

```sql
SELECT tblBeobachter.GUID_Beobachter, tblBeobachter.ID_Beobachter, 
tblBeobachter.Beobachter, tblBeobachter.Vorname, tblBeobachter.Nachname, 
tblBeobachter.Ort, tblBeobachter.Bemerkung, tblBeobachter.Beringergemeinschaft, 
tblBeobachter.Ansprechberinger, tblRingausgabe.Ausgabedatum, 
tblRingausgabe.Serie, tblRingausgabe.SerienNr, tblRingausgabe.Flag_Liste, 
tblRingausgabe.Menge, tblRingausgabe.Bemerkung, tblRingausgabe.FehlendeRinge, 
tblRingausgabe.SummeFehlendeRinge, tblRingausgabe.LetzteLieferung, 
tblRingausgabe.Verbleib, tblRingausgabe.NochBeiBeringer, 
tblRingausgabe.ID_Bundesland, tblUserRefList.ItemValue AS Ringfarbe 
FROM tblBeobachter 
INNER JOIN tblRingausgabe 
ON tblBeobachter.GUID_Beobachter = tblRingausgabe.GUID_Beobachter 
LEFT OUTER JOIN tblUserRefList ON tblRingausgabe.ID_Farbe = tblUserRefList.ID_URef 
WHERE tblUserRefList.ItemValue LIKE 'gold' AND tblRingausgabe.Serie LIKE 'C' 
ORDER BY tblRingausgabe.Serie, tblRingausgabe.SerienNr
```

**Anzahl Beringungen und Wiederfunde je Beringungsort**

```sql
SELECT A.Ortsbezeichnung, 
(SELECT COUNT (*) FROM tblDaten WHERE tblDaten.GUID_Ort = A.GUID_Ort 
AND tblDaten.ID_AddIn = 13 AND tblDaten.ID_FundTyp = 540) AS Anzahl_Beringungen, 
(SELECT COUNT (*) FROM tblDaten WHERE tblDaten.GUID_Ort = A.GUID_Ort 
AND tblDaten.ID_AddIn = 13 AND tblDaten.ID_FundTyp = 542) AS Anzahl_Wiederfunde 
FROM tblGeometrie A
ORDER BY Ortsbezeichnung
```

**Anzahl Beringungen und Wiederfunde je Beringungsort, eingeschränkt auf einen Beringer**

```sql
SELECT A.Ortsbezeichnung, 
(SELECT COUNT (*) FROM tblDaten WHERE tblDaten.GUID_Ort = A.GUID_Ort  
AND tblDaten.GUID_Beobachter IN (SELECT GUID_Beobachter FROM tblBeobachter WHERE Beobachter LIKE 'M.Mustermann')
AND tblDaten.ID_AddIn = 13 AND tblDaten.ID_FundTyp = 540) AS Anzahl_Beringungen, 
(SELECT COUNT (*) FROM tblDaten WHERE tblDaten.GUID_Ort = A.GUID_Ort 
AND tblDaten.GUID_Beobachter IN (SELECT GUID_Beobachter FROM tblBeobachter WHERE Beobachter LIKE 'M.Mustermann')
AND tblDaten.ID_AddIn = 13 AND tblDaten.ID_FundTyp = 542) AS Anzahl_Wiederfunde 
FROM tblGeometrie A
WHERE (SELECT COUNT (*) FROM tblDaten WHERE tblDaten.GUID_Ort = A.GUID_Ort  
AND tblDaten.GUID_Beobachter IN (SELECT GUID_Beobachter FROM tblBeobachter WHERE Beobachter LIKE 'M.Mustermann')
AND tblDaten.ID_AddIn = 13 AND tblDaten.ID_FundTyp = 540) > 0 
OR 
(SELECT COUNT (*) FROM tblDaten WHERE tblDaten.GUID_Ort = A.GUID_Ort 
AND tblDaten.GUID_Beobachter IN (SELECT GUID_Beobachter FROM tblBeobachter WHERE Beobachter LIKE 'M.Mustermann')
AND tblDaten.ID_AddIn = 13 AND tblDaten.ID_FundTyp = 542) > 0
ORDER BY Ortsbezeichnung
```

**Anzahl Beringungen und Wiederfunde je Beobachter**

```sql
SELECT A.Beobachter, 
(SELECT COUNT (*) FROM tblDaten WHERE tblDaten.GUID_Beobachter = A.GUID_Beobachter 
AND tblDaten.ID_AddIn = 13 AND tblDaten.ID_FundTyp = 540) AS Anzahl_Beringungen, 
(SELECT COUNT (*) FROM tblDaten WHERE tblDaten.GUID_Beobachter = A.GUID_Beobachter 
AND tblDaten.ID_AddIn = 13 AND tblDaten.ID_FundTyp = 542) AS Anzahl_Wiederfunde 
FROM tblBeobachter A
ORDER BY Beobachter
```

**Übersicht über alle Wiederfunde mit einer Flugstrecke > 20 km und alle dazugehörigen Beringungen**

```sql
WHERE tblDaten.Ringnummer IN (SELECT tblDaten.Ringnummer FROM tblDaten WHERE GUID_Daten IN 
(SELECT GUID_Daten FROM tblDatenZusatz WHERE Flugstrecke > 20000))
```

**Alle Wiederfunde ohne Beringung**

```sql
WHERE tblDaten.ID_FundTyp = 542 AND NOT tblDaten.Ringnummer IN 
(SELECT tblDaten.Ringnummer FROM tblDaten WHERE tblDaten.ID_FundTyp = 540)
```

**Alle Tiere einschließlich Beringung, die mehr als 20 km geflogen sind**

```sql
WHERE (tblDaten.Ringnummer IN (SELECT tblDaten.Ringnummer FROM tblDaten 
INNER JOIN tblDatenZusatz 
ON tblDaten.GUID_Daten = tblDatenZusatz.GUID_Daten 
WHERE tblDatenZusatz.Flugstrecke > 20000)) 
ORDER BY tblDaten.Ringnummer, tblDaten.Datum
```

**Alle Großen Mausohren in den angegebenen Messtischblättern ab dem Jahr 1964, die mehr als 5 km geflogen sind, einschließlich der dazugehörigen Beringungen**

```sql
WHERE 
Ringnummer IN (SELECT Ringnummer FROM tblDaten 
WHERE ID_Art = 110 AND MTB IN (4953, 4954, 4955, 5054, 5055, 5154, 5155) AND Jahr >= 1964) 
AND Ringnummer IN (SELECT Ringnummer FROM tblDaten INNER JOIN tblDatenZusatz 
ON tblDaten.GUID_Daten = tblDatenZusatz.GUID_Daten
WHERE ID_Art = 110 AND Jahr >= 1964  AND tblDatenZusatz.Flugstrecke > 5000)
 ORDER BY Ringnummer, Datum
```

**Anzahl Beringungen je Art und Bundesland zwischen 1964 und 2012**

```sql
SELECT tblDaten.ID_Art, MIN(Art_deutsch) AS Art_deutsch, 
MIN(Art_wissenschaftlich) AS Art_wissenschaftlich, 
tblDaten.Region, COUNT(ID_Daten) AS Anzahl_Beringungen 
FROM tblDaten INNER JOIN tblArten 
ON tblDaten.ID_Art = tblArten.ID_Art 
WHERE tblDaten.ID_AddIn = 13  
AND tblDaten.ID_FundTyp = 540 
AND tblDaten.Jahr >= 1964 
AND tblDaten.Jahr <= 2012 
GROUP BY tblDaten.ID_Art, Region 
ORDER BY Art_deutsch, Region
```

**Anzahl Wiederfunde je Art und Bundesland zwischen 1964 und 2012**

```sql
SELECT tblDaten.ID_Art, MIN(Art_deutsch) AS Art_deutsch, 
MIN(Art_wissenschaftlich) AS Art_wissenschaftlich, 
tblDaten.Region, COUNT(ID_Daten) AS Anzahl_Wiederfunde 
FROM tblDaten INNER JOIN tblArten 
ON tblDaten.ID_Art = tblArten.ID_Art 
WHERE tblDaten.ID_AddIn = 13  
AND tblDaten.ID_FundTyp = 542 
AND tblDaten.Jahr >= 1964 
AND tblDaten.Jahr <= 2012 
GROUP BY tblDaten.ID_Art, Region 
ORDER BY Art_deutsch, Region
```

**Beringung zu alter Ringnummer finden (Umberingung)**

```sql
WHERE tblDaten.GUID_Daten IN 
(SELECT tblRingnummerHistory.GUID_Daten 
FROM tblRingnummerHistory 
WHERE tblRingnummerHistory.Ringnummer LIKE 'Z28448')
```

**Beringung zu alter Ringnummer finden (Umberingung, ganze Serie)**

```sql
WHERE tblDaten.GUID_Daten IN 
(SELECT tblRingnummerHistory.GUID_Daten 
FROM tblRingnummerHistory 
WHERE tblRingnummerHistory.Ringnummer LIKE 'O%')
```

**Alle Beringungen und Wiederfunde der Rauhautfledermaus, die in der „Nossentiner Heide“ beringt wurden**

```sql
WHERE tblDaten.Ringnummer IN 
(SELECT tblDaten.Ringnummer FROM tblDaten 
WHERE tblDaten.ID_FundTyp = 540 
AND tblDaten.Ortsbezeichnung LIKE 'Nossentiner Heide%') 
AND tblArten.Art_deutsch LIKE 'Rauhautfledermaus'
```

**Alle Beringungen und Wiederfunde der Rauhautfledermaus (männlich), die in der „Nossentiner Heide“ beringt wurden und 1997 wiedergefunden wurden**

```sql
WHERE  tblArten.Art_deutsch LIKE 'Rauhautfledermaus'  
AND (Ringnummer IN (SELECT Ringnummer FROM tblDaten 
INNER JOIN tblDatenZusatz ON tblDaten.GUID_Daten=tblDatenZusatz.GUID_Daten
WHERE Ortsbezeichnung LIKE 'Nossentiner%'  
AND tblDaten.ID_FundTyp = 540 
AND tblDatenZusatz.ID_Geschlecht = 1)) 
AND (Ringnummer IN (SELECT Ringnummer 
FROM tblDaten 
WHERE tblDaten.ID_FundTyp = 542  
AND tblDaten.Jahr = 1997))
```

**Alle Beringungen und Wiederfunde des Großen Mausohrs, die in der Region „Polen“ beringt wurden und mehr als 100 km geflogen sind**

```sql
WHERE (tblDaten.Ringnummer IN (SELECT tblDaten.Ringnummer FROM tblDaten WHERE GUID_Daten IN 
(SELECT GUID_Daten FROM tblDatenZusatz WHERE Flugstrecke > 100000)) 
AND tblArten.Art_deutsch LIKE 'Großes Mausohr') 
AND (tblDaten.Ringnummer IN (SELECT tblDaten.Ringnummer FROM tblDaten 
WHERE tblDaten.ID_FundTyp = 540 AND tblDaten.Region LIKE 'Polen'))
 ORDER BY tblDaten.Ringnummer ASC, tblDaten.ID_FundTyp ASC
```

**Alle Beringungen und Wiederfunde des Großen Mausohrs, die in der „Burg Stargard“ beringt wurden und mehr als 100 km geflogen sind**

```sql
WHERE (tblDaten.Ringnummer IN 
(SELECT tblDaten.Ringnummer FROM tblDaten WHERE GUID_Daten IN 
(SELECT GUID_Daten FROM tblDatenZusatz WHERE Flugstrecke > 100000)) 
AND tblArten.Art_deutsch LIKE 'Großes Mausohr') 
AND (tblDaten.Ringnummer IN (SELECT tblDaten.Ringnummer FROM tblDaten 
WHERE tblDaten.ID_FundTyp = 540 AND Ortsbezeichnung LIKE 'Burg Stargard'))
 ORDER BY tblDaten.Ringnummer ASC, tblDaten.ID_FundTyp ASC
```

**Statistik: Anzahl der ausgegebenen Ringe je Bundesland, Serie und Jahr**

```sql
SELECT tblBeobachter.Region, tblRingausgabe.Serie, YEAR(tblRingausgabe.Ausgabedatum) AS Jahr, SUM(tblRingausgabe.Menge) AS Summe
FROM tblBeobachter INNER JOIN tblRingausgabe ON tblBeobachter.GUID_Beobachter = tblRingausgabe.GUID_Beobachter
GROUP BY tblBeobachter.Region, YEAR(tblRingausgabe.Ausgabedatum), tblRingausgabe.Serie
ORDER BY tblBeobachter.Region, tblRingausgabe.Serie, Jahr
```

**Inkonsistente Arten innerhalb einer Ringnummer finden**

```sql
SELECT Ringnummer, COUNT(A.Ringnummer) AS Anzahl 
FROM (SELECT DISTINCT Ringnummer, ID_Art FROM tblDaten) A 
GROUP BY A.Ringnummer
HAVING COUNT(A.Ringnummer) > 1
```

**Anzahl Fundorte je Art für einen bestimmten Zeitraum**

```sql
SELECT MIN(A.Art_Deutsch) AS Art_Deutsch, MIN(A.Art_Wissenschaftlich) AS Art_Wissenschaftlich, COUNT(A.Ortsbezeichnung ) AS Anzahl FROM 
(
SELECT tblArten.Art_Deutsch, tblArten.Art_Wissenschaftlich, tblDaten.Ortsbezeichnung
FROM   tblArten 
INNER JOIN tblDaten ON tblArten.ID_Art = tblDaten.ID_Art
WHERE (tblDaten.Jahr >= 1991) AND (tblDaten.Jahr <= 2016) 
GROUP BY tblArten.Art_Deutsch, tblArten.Art_Wissenschaftlich, tblDaten.Ortsbezeichnung
) A
GROUP BY A.Art_Deutsch 
ORDER BY A.Art_Deutsch
```

**Doppelte Beringungen ermitteln**

```sql
SELECT A.* FROM (SELECT ID_FundTyp, Ringnummer, COUNT(ID_FundTyp) AS Anzahl
FROM tblDaten WHERE ID_AddIn = 13 GROUP BY ID_FundTyp, Ringnummer) A
WHERE A.Anzahl > 1 AND ID_FundTyp = 540 Order BY Ringnummer
```

**Doppelte Wiederfunde ermitteln**

```sql
SELECT A.* FROM (SELECT ID_FundTyp, Ringnummer, Datum, COUNT(ID_FundTyp) AS Anzahl
FROM tblDaten WHERE ID_AddIn = 13 GROUP BY ID_FundTyp, Ringnummer, Datum) A
WHERE A.Anzahl > 1 AND ID_FundTyp = 542 Order BY Ringnummer
```
