Datenbanken:Übung 4-5
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';
- WHERE
4. Gesucht sind alle Berge der Alpen.
- SELECT b_name
- FROM berg
- WHERE
- gebirge LIKE '%Alpen%';
- WHERE
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';