|
@@ -379,3 +379,84 @@ select species_name вид, genus_name род
|
|
|
from species s full join genus g using(genus_id)
|
|
|
order by species_name;
|
|
|
|
|
|
+-- -----------------------------------------------------------------
|
|
|
+-- 11.44 JOIN LATERAL
|
|
|
+
|
|
|
+table species;
|
|
|
+table genus;
|
|
|
+table family;
|
|
|
+table observations;
|
|
|
+
|
|
|
+select
|
|
|
+ species_name,
|
|
|
+ to_char(last_observation.date, 'DD.MM.YYYY') last_observation
|
|
|
+from species left join lateral (
|
|
|
+ select observation_date as date
|
|
|
+ from observations
|
|
|
+ where observations.species_id = species.species_id
|
|
|
+ order by observation_date desc
|
|
|
+ limit 1
|
|
|
+) as last_observation on true
|
|
|
+order by species_name;
|
|
|
+
|
|
|
+-- -----------------------------------------------------------------
|
|
|
+-- 11.44 SEMI JOIN
|
|
|
+
|
|
|
+select species_name from species s
|
|
|
+where exists (
|
|
|
+ select 1
|
|
|
+ from observations o
|
|
|
+ where o.species_id=s.species_id
|
|
|
+ and extract('year' from observation_date)=2019
|
|
|
+) order by species_name;
|
|
|
+
|
|
|
+select observer_name, observation_date
|
|
|
+from observations o, species s, genus g, family f
|
|
|
+where o.species_id = s.species_id and
|
|
|
+ s.genus_id = g.genus_id and
|
|
|
+ g.family_id = f.family_id and
|
|
|
+ f.family_name = 'Синицевые'
|
|
|
+order by observer_name;
|
|
|
+
|
|
|
+
|
|
|
+--
|
|
|
+select family_id from family where family_name='Синицевые'
|
|
|
+
|
|
|
+table genus;
|
|
|
+
|
|
|
+select genus_id from genus g where exists (
|
|
|
+ select 1
|
|
|
+ from family f
|
|
|
+ where family_name='Синицевые'
|
|
|
+ and f.family_id=g.family_id
|
|
|
+);
|
|
|
+
|
|
|
+select species_id from species s where exists (
|
|
|
+ select genus_id from genus g where exists (
|
|
|
+ select 1
|
|
|
+ from family f
|
|
|
+ where family_name='Синицевые'
|
|
|
+ and f.family_id=g.family_id
|
|
|
+ ) and g.genus_id=s.genus_id
|
|
|
+);
|
|
|
+
|
|
|
+select observer_name, observation_date from observations o
|
|
|
+where exists (
|
|
|
+ select 1 from species s where exists (
|
|
|
+ select 1 from genus g where exists (
|
|
|
+ select 1
|
|
|
+ from family f
|
|
|
+ where family_name='Синицевые'
|
|
|
+ and f.family_id=g.family_id
|
|
|
+ ) and g.genus_id=s.genus_id
|
|
|
+ ) and s.species_id = o.species_id
|
|
|
+) order by observer_name;
|
|
|
+
|
|
|
+select observer_name, observation_date from observations
|
|
|
+join species s using(species_id)
|
|
|
+join genus g using(genus_id)
|
|
|
+join family f using(family_id)
|
|
|
+where family_name = 'Синицевые'
|
|
|
+order by observer_name;
|
|
|
+
|
|
|
+
|