• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Zapytania SQL wykorzystujące relację

Object Storage Arubacloud
0 głosów
4,578 wizyt
pytanie zadane 7 stycznia 2021 w Egzaminy zawodowe przez ChickenZax Nowicjusz (150 p.)
zamknięte 7 stycznia 2021 przez ChickenZax

Witam, znalazłem pytanie z egzaminu EE.09 na temat baz danych i zapytań SQL i borykam się z jednym z nich. Ktoś by pomógł? 

Zapytanie 3: wybierające jedynie pole nazwa z tabeli Ryby oraz odpowiadające tej nazwie pola akwen i województwo z tabeli Lowisko dla łowisk, które są jeziorami. Zapytanie wykorzystuje relację.
Ja takie coś skleiłem ale wywala błąd
SELECT ryby.nazwa, lowisko.akwen, lowisko.wojewodztwo FROM ryby WHERE lowisko.rodzaj=2

MySQL zwrócił komunikat: 

#1054 - Nieznana kolumna 'lowisko.akwen' w  field list

tak samo jak lowisko.wojewodztwo czy lowisko.rodzaj (Zapewne tutaj błąd w komendach, gdyż niezbyt jeszcze ogarniam SQL i dopiero co się za niego zabrałem)

komentarz zamknięcia: Otrzymana pomoc

2 odpowiedzi

+1 głos
odpowiedź 7 stycznia 2021 przez Snejki Stary wyjadacz (14,520 p.)
wybrane 7 stycznia 2021 przez ChickenZax
 
Najlepsza

Obecnie pobierasz jedynie dane z tabelki ryby. Aby dołączyć do rezultatu dane z innych tabel, należy te tabele w jakiś sposób poweiązać ze sobą. Można tego dokonać za pomocą JOIN

komentarz 7 stycznia 2021 przez ChickenZax Nowicjusz (150 p.)
Racja dodałem także lowisko ale wyświetla natomiast wszystkie ryby podwójnie a powinno wypisać tylko dwie z nich tak jak pokazałem to w komentarzach u góry.

SELECT ryby.nazwa, lowisko.akwen, lowisko.wojewodztwo FROM ryby, lowisko WHERE lowisko.rodzaj=2
komentarz 7 stycznia 2021 przez ChickenZax Nowicjusz (150 p.)
Dobra poradziłem sobie komendą LEFT JOIN:

SELECT ryby.nazwa, lowisko.akwen, lowisko.wojewodztwo FROM ryby LEFT JOIN lowisko ON ryby.id = lowisko.Ryby_id WHERE lowisko.rodzaj=2

Jest to dobrze napisane? Rezultat jest raczej dobry, gdyż wypisane są tylko 2 ryby (sandacz, karp)
komentarz 7 stycznia 2021 przez Snejki Stary wyjadacz (14,520 p.)
No chyba nie przeczytałeś mojej odpowiedzi :D. To zapytanie, które przygotowałeś spowoduje wykonanie się iloczynu kartezjańskiego na danych. Aby zapytanie zadziało w odpowiedni sposób, musisz wykorzystać operator relacji, którym jest JOIN.
komentarz 7 stycznia 2021 przez ChickenZax Nowicjusz (150 p.)
Napisałem wcześniej właśnie z komendą LEFT JOIN i masz na myśli to zapytanie, że jest źle napisane i musi być zwykłe JOIN?
komentarz 7 stycznia 2021 przez Snejki Stary wyjadacz (14,520 p.)
Nie nie, chodziło mi o SELECT *** FROM  lowisko.rodzaj=2 ...

Co do LEFT JOINA, to wszystko zależy od interpretacji zadania. W przypadku gdy chcemy wyświetlić zawsze wszystkie ryby, bez względu na to czy są one na jakimś łowisku, to LEFT JOIN jest poprawny.
komentarz 7 stycznia 2021 przez ChickenZax Nowicjusz (150 p.)
Dzięki, o to właśnie mi chodziło :D Zamykam
0 głosów
odpowiedź 7 stycznia 2021 przez KopfSzmercen Bywalec (2,870 p.)
Do wyrażenia from dodaj również tabelę "lowisko", póki co w tym wyrażeniu uwzględniasz tylko tabelę "ryby".
komentarz 7 stycznia 2021 przez ChickenZax Nowicjusz (150 p.)

Racja, mój błąd ale tutaj się pojawia kolejny błąd. Mianowicie informacje się nie łączą bo z tego co widzę to powinny się wyświetlić tylko ryby: Karp oraz Sandacz

Tabelka ryby:

 

Tabelka lowisko:

komentarz 7 stycznia 2021 przez ChickenZax Nowicjusz (150 p.)

A mój wynik to:

komentarz 7 stycznia 2021 przez KopfSzmercen Bywalec (2,870 p.)
Musisz połączyć relacją obie te tabele. Czyli w wyrazeniu where nalezy dodać and ryby.id = lowisko.Ryby_id

Podobne pytania

0 głosów
1 odpowiedź 220 wizyt
pytanie zadane 22 lutego 2017 w SQL, bazy danych przez kacperl95 Obywatel (1,980 p.)
0 głosów
2 odpowiedzi 233 wizyt
pytanie zadane 13 kwietnia 2019 w PHP przez PanKonefka Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 555 wizyt
pytanie zadane 18 września 2021 w SQL, bazy danych przez sisOOO Obywatel (1,370 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...