Datenbanken:Übung 4-5

Aus Tudwiki
Wechseln zu: Navigation, Suche

Aufgaben

Formale Beschreibung der Terra-DB

1. Ermitteln Sie die Name aller Kontinente.

SELECT k_name
FROM kontinent;

2. Gesucht sind alle Inseln (Name) der Inselgruppe der Philippinen.

SELECT i_name
FROM insel
WHERE
inselgruppe='Philippinen';

3. Gesucht sind alle Wüsten (Name) der Art "Sandwueste" mit einer Fläche größer als 25000 km².

SELECT w_name
FROM wueste
WHERE
flaeche > 25000 AND wuestenart='Sandwueste';

4. Gesucht sind alle Berge der Alpen.

SELECT b_name
FROM berg
WHERE
gebirge LIKE '%Alpen%';

5. Gesucht sind alle Flüsse (Name), die in die Ostsee oder Nordsee münden und über 1000km land sind.

SELECT f_name
FROM fluss
WHERE
meer IN ('Ostsee','Nordsee') AND laenge > 1000;

6. Geben Sie alle Millionstädte, die in den Tropen liegen, die Namen und ihre Koordinaten an.

SELECT st_name,breite,laenge
FROM stadt
WHERE
einwohner >= 1000000 AND breite BETWEEN -23.27 AND 23.27;

7. Gesucht sind alle Hochgebirge.

SELECT DISTINCT gebirge
FROM berg
WHERE
hoehe > 3000 AND gebirge IS NOT NULL;

8. Geben Sie die Namen, die jeweilige Länderkennung und die Zahl der Einwohner für alle Länder an, die mehr als 45 Millionen Einwohner haben. Ordnen Sie dabei die Länder in absteigender Reihenfolge nach der Einwohnerzahl.

SELECT l_name,l_id,einwohner
FROM land
WHERE
einwohner > 45000000 ORDER BY einwohner DESC;

9. Gesucht ist der Anteil der Meere an der Erdoberfläche (Angabe in Prozent).

SELECT (1 - (SUM(flaeche)/(4*3.1416*6.37*6.37)))*100 AS prozent
FROM kontinent;

10. Wie groß ist die Summe der Einwohner der deutschsprachigen Länder Österreich, Deutschland und Schweiz?

SELECT SUM(einwohner)
FROM land
WHERE
l_in IN ('A','D','CH');

11. Gesucht sind alle Inselgruppen sowie die Anzahl der zugehörigen Inseln.

SELECT inselgruppe,COUNT(i_name)
FROM insel
GROUP BY inselgruppe;

12. Gesucht sind alle Flüsse mit mehr als zwei an ihnen liegenden Städten, sortiert nach dieser Anzahl.

SELECT f_name,COUNT(st_name)
FROM liegt_an
WHERE
f_name IS NOT NULL
GROUP BY f_name
HAVING anzahl > 2
ORDER BY 2;

13. Gesucht sind alle Städte, in denen mehrere Organisationen ihren Sitz haben.

SELECT st_name
FROM hat_sitz_in
WHERE
st_name IS NOT NULL
GROUP BY st_name
HAVING COUNT(*) >= 2
ORDER BY 2;

14. Ermitteln Sie die Namen aller Flüsse, die sowohl durch Deutschland als auch durch Österreich fließen.

SELECT DISTINCT x.f_name
FROM geo_fluss AS x
INNER JOIN geo_fluss AS y
ON x.f_name = y.f_name
WHERE
x.l_id='D' AND y.l_id='A';

Hier noch meine alternative Lösung...Aufgabennummern muss man selber rausfinden ;)

 SELECT K_NAME
 FROM KONTINENT:
 
 SELECT I_NAME
 FROM INSEL
 WHERE INSELGRUPPE="PHILIPPINEN";
 
 SELECT W_NAME
 FROM WUESTE
 WHERE FLAECHE>25000
 AND WUESTENART="Sandwueste";
 
 SELECT B_NAME
 FROM BERG
 WHERE GEBIRGE LIKE '*Alpen*';
 
 SELECT F_NAME
 FROM FLUSS
 WHERE
 LAENGE>1000
 AND
 (MEER='Ostsee' OR MEER='Nordsee');
 
 SELECT ST_NAME,BREITE,LAENGE
 FROM STADT
 WHERE BREITE<23.37
 AND
 BREITE>-23.37
 AND EINWOHNER>=1000000;
 
 SELECT GEBIRGE
 FROM BERG
 WHERE HOEHE>3000
 AND GEBIRGE IS NOT NULL
 GROUP BY GEBIRGE;
 
 SELECT L_NAME,L_ID,EINWOHNER
 FROM LAND
 WHERE EINWOHNER>45000000
 ORDER BY EINWOHNER DESC;
 
 SELECT 
 (1-(SUM(FLAECHE)/(6.37*6.37*3.14159265*4)))*100
 FROM KONTINENT;
 
 SELECT SUM(EINWOHNER)
 FROM LAND
 WHERE L_NAME='Deutschland' OR L_NAME='Schweiz' OR L_NAME='Oesterreich';
 
 SELECT INSELGRUPPE, COUNT(*) AS ANZAHL
 FROM INSEL
 WHERE INSELGRUPPE IS NOT NULL
 GROUP BY INSELGRUPPE;
 
 SELECT F_NAME, COUNT(*)
 FROM LIEGT_AN L1
 WHERE
 (SELECT COUNT(*) AS ANZAHL 
 FROM LIEGT_AN
 WHERE F_NAME=L1.F_NAME)>2
 AND
 F_NAME IS NOT NULL
 GROUP BY F_NAME 
 ORDER BY COUNT(*) ;
 
 SELECT ST_NAME, COUNT(*)
 FROM HAT_SITZ_IN
 WHERE ST_NAME IS NOT NULL
 GROUP BY ST_NAME
 HAVING COUNT(*)>1;
 
 SELECT G1.F_NAME
 FROM GEO_FLUSS AS G1 
 LEFT OUTER JOIN GEO_FLUSS AS G2 ON G1.F_NAME=G2.F_NAME
 WHERE G1.L_ID='D' AND G2.L_ID='A'
 GROUP BY G1.F_NAME;
 
 SELECT I_NAME, FLAECHE
 FROM INSEL
 WHERE FLAECHE=(SELECT MAX(FLAECHE) FROM INSEL);
 
 SELECT L_NAME, HAUPTSTADT
 FROM LAND
 WHERE L_ID  NOT IN 
 (SELECT DISTINCT L_ID
 FROM IST_MITGLIED_VON
 WHERE ABKUERZUNG='UNO');
 
 SELECT L_NAME,L.FLAECHE, L.EINWOHNER, ((L.FLAECHE*PROZENT)/(K.FLAECHE*100*1000000))*100
 FROM (UMFASST AS U INNER JOIN LAND AS L ON U.L_ID=L.L_ID) INNER JOIN KONTINENT AS K ON K.K_NAME=U.K_NAME
 WHERE U.K_NAME='Afrika'
 
 SELECT L_NAME,K_NAME
 FROM UMFASST INNER JOIN LAND ON UMFASST.L_ID=LAND.L_ID
 WHERE PROZENT<>100
 
 SELECT DISTINCT  L.L_NAME,E.HOEHE
 FROM ((UMFASST AS U INNER JOIN LAND AS L ON U.L_ID=L.L_ID) INNER JOIN GEO_EBENE AS G ON U.L_ID=G.L_ID) INNER JOIN EBENE AS E ON E.E_NAME=G.E_NAME
 WHERE K_NAME='Europa'
 ORDER BY E.HOEHE;
 
 SELECT L_NAME
 FROM LAND AS L INNER JOIN IST_MITGLIED_VON AS M ON L.L_ID=M.L_ID
 WHERE M.ABKUERZUNG='EU'
 AND
 (
 SELECT SUM(EINWOHNER)
 FROM STADT AS S
 WHERE S.L_ID=L.L_ID
 AND
 S.EINWOHNER>500000
 )>(L.EINWOHNER*0.1)
 
 SELECT F1.F_NAME,F2.F_NAME, F2.MEER, F2.SEE
 FROM FLUSS AS F1 INNER JOIN FLUSS AS F2 ON F1.FLUSS=F2.F_NAME
 WHERE 
 F2.MEER IS NOT NULL
 OR
 F2.SEE IS NOT NULL;
 
 SELECT S.ST_NAME, H.ABKUERZUNG
 FROM STADT AS S LEFT OUTER JOIN  HAT_SITZ_IN AS H ON S.ST_NAME=H.ST_NAME 
 WHERE S.EINWOHNER>=1000000
 AND S.L_ID='USA';