unknown 3 settimane fa
parent
commit
23f3af33f6
1 ha cambiato i file con 81 aggiunte e 0 eliminazioni
  1. 81 0
      hardcore web development/11. SQL/quiz_1.sql

+ 81 - 0
hardcore web development/11. SQL/quiz_1.sql

@@ -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;
+
+