-- Lab08.pdf Λύσεις -- Τα ερωτήματα υλοποιήθηκαν σε PostgreSQL -- A1. Οι χώρες στις οποίες τα ισπανικά (spanish) είναι επίσημη γλώσσα. -- α' τρόπος select name from country where code in (select countrycode from countrylanguage where language='Spanish' and isofficial='T'); -- β' τρόπος select name from country where exists (select * from countrylanguage where code=countrycode and language='Spanish' and isofficial='T'); -- Α2. Οι χώρες στις οποίες τα αγγλικά (english) ομιλούνται σε ποσοστό άνω του 80%. -- α' τρόπος select name from country where code in (select countrycode from countrylanguage where language='English' and percentage>80); -- β' τρόπος select name from country where exists (select * from countrylanguage where language='English' and percentage>80 and code=countrycode); -- Α3. Οι χώρες της Βορείου Αμερικής (Continent = 'North America') που έχουν πόλεις με -- πληθυσμό > 2.000.000 (να φαίνονται η χώρα, η πόλη και ο πληθυσμός) -- Το ερώτημα δεν μπορεί να υλοποιηθεί με εμφώλευση, διότι απαιτείται η προβολή πεδίων και από τους δύο -- πίνακες. Στο select (το εξωτερικό) δεν μπορώ να έχω πεδία από το εμφωλευμένο ερώτημα. Οπότε θα έπρεπε -- να συνδυάσω και τους δύο πίνακες στο from του εξωτερικού ερωτήματος. Άρα λύνεται μόνο με σύζευξη. -- A4. Η χώρα με τον μικρότερο πληθυσμό. -- με all select name, population from country where population <= all (select population from country) -- με any select name, population from country where not population > any (select population from country) -- με exists select name, population from country c where not exists (select * from country where population < c.population) -- και αν θέλουμε να αγνοήσουμε τις χώρες με πληθυσμό 0 -- με all και αντίστοιχα και οι υπόλοιπες παραλλαγές select name, population from country where population <> 0 and population <= all (select population from country where population <> 0) -- A5. Οι γλώσσες που ομιλούνται μόνο στην Αφρική. -- με except, δηλαδή χωρίς εμφώλευση select language from country c join countrylanguage cl on code=countrycode where continent='Africa' except select language from country c join countrylanguage cl on code=countrycode where continent<>'Africa' -- με in select distinct language from countrylanguage where countrycode in (select code from country where continent='Africa') and language not in (select language from countrylanguage where countrycode in (select code from country where continent<>'Africa')) -- με exists select distinct language from countrylanguage cl where countrycode in (select code from country where continent='Africa') and not exists (select * from countrylanguage where language = cl.language and countrycode in (select code from country where continent<>'Africa')) -- με all select distinct language from countrylanguage cl where countrycode in (select code from country where continent='Africa') and language <> all (select language from countrylanguage where countrycode in (select code from country where continent<>'Africa')) -- με any select distinct language from countrylanguage cl where countrycode in (select code from country where continent='Africa') and not language = any (select language from countrylanguage where countrycode in (select code from country where continent<>'Africa')) -- A6. Τα ονόματα των χωρών και το ποσοστό κατά το οποίο μιλάνε αγγλικά σε αυτή τη χώρα. Να εμφανίζονται όλες οι χώρες του πίνακα. select name, percentage, isofficial from country left outer join (select * from countrylanguage where language='English') A on code=countrycode;