Zum Inhalt springen
  • 0

SQL Unterabfrage


Whitehammer03

Frage

Hallo liebe Fachinformatiker,

Ich hoffe euch geht es den Umständen entsprechend gut und ihr seid alle gesund! :)

 

Wir haben von unserer Berufsschule für den Ausfalls des Schulblocks Aufgaben in einigen Fächern bekommen, die wir freiwillig bearbeiten können.

Da ich derzeit sowieso im Homeoffice bin und nur lerne, habe ich mich entschieden, die Aufgaben zu bearbeiten. Nun zum Problem:

 

 

Aufgabe lautet: Eine Liste aller Meere und die Anzahl der zugehörigen Flüsse

 

Ich komme leider nur bis zu dem Punkt, wo ich alle Meere anzeigen lassen kann, ohne ein Meer doppelt anzuzeigen mit "select distinct(meer) from fluss;"

 

Ich habe versucht, die Aufgabe durch diesen Befehl zu lösen: select ((distinct(meer) select count (distinct(name)) from fluss;

Ist zwar falsch, geht es aber in die richtige Richtung? Habt ihr einige Gedankenanstöße für mich?

 

PS: Das ist das erste Mal, dass wir mit Unterabfragen arbeiten, das Thema sollte eigentlich in diesem Block drankommen, deshalb verzeiht mir wenn ich totalen Unsinn schreibe, bin neu in dem Gebiet :)

 

 

Danke im Voraus

Whitehammer03

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Empfohlene Beiträge

  • 0

+-----+----------------------+------------------------+--------+
| FNR | Name                 | Meer                   | Laenge |
+-----+----------------------+------------------------+--------+
| AJA | Ajan-Jurjach         | NULL                   |    200 |
| AMA | Amazonas             | Atlantischer Ozean     |   6387 |
| AMU | Amudarja             | NULL                   |   1415 |
| AMR | Amur                 | Ochotskisches Meer     |   2918 |
| ANU | Anuwimi              | NULL                   |    560 |
| ARG | Argun                | NULL                   |   1620 |
| ARK | Arkansas River       | NULL                   |   2334 |
| ATB | Atbara               | NULL                   |   1120 |
| BAD | Bahr al-Jabal        | NULL                   |   NULL |
| BAH | Bahr el-Gazal        | NULL                   |    716 |
| BAN | Bani                 | NULL                   |    430 |
| BAR | Baro                 | NULL                   |   NULL |
| BEN | Benue                | NULL                   |   1400 |
| BIJ | Bija                 | NULL                   |    688 |
| BLA | Blauer Nil           | NULL                   |   1783 |
| BOM | Bomu                 | NULL                   |    280 |
| BUS | Busira               | NULL                   |    830 |
| CHA | Chatanga             | Laptewsee              |   1636 |
| COL | Colorado River       | Pazifischer Ozean      |   2700 |
| COU | Columbia River       | Pazifischer Ozean      |   1952 |
| CON | Connecticut River    | Atlantischer Ozean     |    660 |
| DAL | Dalaelv              | Ostsee                 |    520 |
| DNE | Dnepr                | Schwarzes Meer         |   2201 |
| DON | Don                  | Asowsches Meer         |   1870 |
| DOU | Donau                | Schwarzes Meer         |   2850 |
| DRI | Drin                 | Mittelmeer             |    285 |
| ELB | Elbe                 | Nordsee                |   1144 |
| FUL | Fulda                | NULL                   |    218 |
| GAM | Gambia               | Atlantischer Ozean     |   1120 |
| GAR | Garonne              | Atlantischer Ozean     |    650 |
| GEL | Gelber Fluss         | Gelbes Meer            |   4845 |
| GLO | Glomma               | Nordsee                |    598 |
| GOE | Goetaaelv            | Ostsee                 |     93 |
| GRO | Grosser Jenissej     | NULL                   |    605 |
| HAN | Han                  | Gelbes Meer            |   NULL |
| HUD | Hudson River         | Atlantischer Ozean     |    493 |
| ING | Ingoda               | NULL                   |    708 |
| IRT | Irtysch              | NULL                   |   4248 |
| ISC | Ischim               | NULL                   |   2450 |
| JAN | Jangtse-Kiang        | Ostchinesisches Meer   |   6100 |
| JEN | Jenissej             | Karasee                |   4130 |
| JOE | Joekulsa a Fjoellum  | Europaeisches Nordmeer |    206 |

 

 

 

Hab die Tabelle einfach mal kopiert, hoffe das hilft euch weiter :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

gibt es einen hinweis darauf wie die Daten aussehen?

generell:

hier ist ganz gut erklärt was du mit Subselects alles anstellen kannst: https://www.w3resource.com/sql/subqueries/understanding-sql-subqueries.php

Du möchtest die Anzahl von Flüssen aus einer Tabelle mit den Namen der Meere aus einer anderen. Der Grundlegende Aufbau wäre etwa:

SELECT feldliste, (Unterabfrage) FROM tabelle

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
vor 1 Minute schrieb Whitehammer03:

+-----+----------------------+------------------------+--------+
| FNR | Name                 | Meer                   | Laenge |
+-----+----------------------+------------------------+--------+
| AJA | Ajan-Jurjach         | NULL                   |    200 |
| AMA | Amazonas             | Atlantischer Ozean     |   6387 |
 

in dem Fall hat @Whiz-zarD recht, hier braucht man keine Unterabfragen, das ist mit einem GROUP BY und einem COUNT einfacher zu lösen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Oh okey, danke für den Hinweis.. da wir uns zuvor eine kleine pdf zu unterabfragen durchlesen mussten, dachte ich, man müsse es auch mit solchen Befehlen lösen..

 

select distinct(meer),count (distinct(name)) from fluss ;

 

So sieht mein Befehl nun aus, ist zwar noch nicht ganz fertig, aber ich denke ich bin auf dem richtigen Weg? :)

 

 

Bearbeitet von Whitehammer03
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Durch Distinct lasse ich mir doppelte Datensätze nicht anzeigen, oder liege ich falsch?

 

Aber ich glaube ich habe den Befehl nun :)

select meer,count(name) from fluss group by meer; 

 

jedoch stört mich hier, dass NULL auch in der Spalte Meer angezeigt wird... das müsste ich noch irgemdwie hinkriegen.. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Hänge nun 3 Aufgaben später wieder fest. :(

Es sollen nur die Meere aufgelistet werden, in die mehr als 5 Flüsse münden.

mein Befehl: select meer,count(name) from fluss where count(name) > 5 group by meer;

 

Rein von der Logik her passt das mMn, wahrscheinlich ist einfach nur ne Kleinigkeit an der Formulierung falsch..ich komme aber einfach nicht drauf -.-

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Habe es mit Having gelöst, klappt! :)

 

Mit Unterabfragen muss ich aber jetzt in der nächsten Aufgabe loslegen, obwohl es theoretisch auch ohne gehen würde, jedoch sollen wir hier unterabfragen verwenden.

Aufgabe: Erstellen Sie eine Liste aller Länder in Europa. (Hinweis: Verwenden Sie einen Subselect zur Abfrage des KNR Werts für den Kontinent).

Kann man hier überhaupt eine Unterabfrage verwenden? Dafür dürfte die Abfrage doch nur max 1 Wert ausliefern dürfen, oder nicht ? Hier wären es ja aber viel mehr als nur 1.

Tabelle:

+------+--------------------------------+------+-----------+----------+----------+
| LNR  | Name                           | KNR  | Einwohner | Flaeche  | HauptONR |
+------+--------------------------------+------+-----------+----------+----------+
| A    | ?ûsterreich                    | EU   |      8.13 |    83845 | WIEN     |
| AF   | Afghanistan                    | AS   |     25.84 |   647497 | KABUL    |
| AL   | Albanien                       | EU   |      3.49 |    28748 | TIRANA   |
| AN   | Andorra                        | EU   |      0.07 |      468 | ANDORR   |
| AC   | Antigua und Barbuda            | NA   |      0.07 |      442 | SAINTJ   |
| AUS  | Australien                     | AU   |     19.17 |  7686420 | CANBER   |
| B    | Belgien                        | EU   |     10.24 |    30510 | BRUESS   |
| BB   | Barbados                       | NA   |      0.27 |      431 | BRIDGE   |
| UV   | Burkina Faso                   | AF   |     11.95 |   274000 | OUAGAD   |
| BG   | Bulgarien                      | EU   |      8.89 |   110994 | SOFIA    |
| BH   | Belize                         | NA   |      0.17 |   249183 | BELMOP   |
| BHU  | Bhutan                         | AS   |      1.45 |    47000 | THIMBU   |

 

Mit dem Befehl Select Name from land where KNR="EU"; würde es gehen.. keine Ahnung warum der Lehrer es so unnötig kompliziert machen will ^^ 

 

Bearbeitet von Whitehammer03
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
vor 3 Minuten schrieb PVoss:

Steht der ausgeschrieben Kontinent vielleicht noch in einer anderen Tabelle, und der Lehrer möchte, dass du von dort den Namen abfragst?

Normalerweise nimmt man dafür Joins, aber wenn er auf sowas steht...

Nene, das ist die komplette Tabelle, so wie sie dort steht.. find ich auch echt komisch aber naja, wenn er es haben will dann kriegt er es eben :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...