pytanie SQL |
pytanie SQL |
6.05.2009, 18:31:57
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 6.05.2009 Ostrzeżenie: (0%) |
witam, mógłby ktoś pomóc, i napisać dlaczego wybrał tą odpowiedź. Ponieważ zadanie niby proste a zdania są podzielone.
dzięki z góry. Dane osobowe studenta znajdują się w tablicy student, przy czym w polu id_wojew znajduje się klucz obcy odwołujący się do klucza głównego o tej samej nazwie w tablicy wojew. Tablica wojew jest typowym słownikiem przy czym w polu nazwa_wojew znajduje się nazwa województwa. Które z poniższych zapytań SQL zwróci dane studenta z nazwą (nie numerem) województwa? SELECT imie, nazwisko, wojew.nazwa_wojew FROM student, wojew WHERE student.id_wojew=id_wojew.wojew; SELECT imie, nazwisko FROM student (SELECT wojew FROM wojew); SELECT imie, nazwisko, wojew.nazwa_wojew FROM student RIGHT JOIN wojew USING(id_wojew); SELECT imie, nazwisko, wojew.nazwa_wojew FROM student LEFT JOIN wojew USING (id_wojew); |
|
|
6.05.2009, 18:47:02
Post
#2
|
|
Grupa: Zarejestrowani Postów: 300 Pomógł: 32 Dołączył: 31.07.2006 Ostrzeżenie: (0%) |
AFAIK ostatnie. A skąd się wzięły wątpliwości?
http://www.postgresql.org/docs/8.3/interac...ml#QUERIES-JOIN Ten post edytował ucho 6.05.2009, 19:08:24 |
|
|
6.05.2009, 19:40:53
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 6.05.2009 Ostrzeżenie: (0%) |
dziękuję za odpowiedź, na teście też zaznaczyłem tą odpowiedź, a wykładowca poinformował, że C jest dobra
|
|
|
6.05.2009, 20:33:10
Post
#4
|
|
Grupa: Zarejestrowani Postów: 300 Pomógł: 32 Dołączył: 31.07.2006 Ostrzeżenie: (0%) |
Kod $ cat test.sql
Kod $ psql test < test.sql CREATE TABLE CREATE TABLE INSERT 0 1 INSERT 0 1 INSERT 0 1 imie | nazwisko | nazwa_wojew ------+----------+------------- | | Pomorskie Jan | Kowalski | Mazowieckie (2 rows) imie | nazwisko | nazwa_wojew ------+----------+------------- Jan | Kowalski | Mazowieckie (1 row) DROP TABLE DROP TABLE To powiedz nam jeszcze na jakiej to uczelni pierwsze zapytanie lepiej pasuje do "zapytanie zwracające dane studenta" Ten post edytował ucho 6.05.2009, 20:34:20 |
|
|
6.05.2009, 21:19:03
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 6.05.2009 Ostrzeżenie: (0%) |
POLITECHNIKA GDAŃSKA ; wydział: Fizyki Technicznej i Matematyki Stosowanej ; Podyplomowe studium Programowania i Baz Danych
|
|
|
6.05.2009, 22:12:53
Post
#6
|
|
Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) |
1. SELECT imie, nazwisko, wojew.nazwa_wojew FROM student, wojew WHERE student.id_wojew=id_wojew.wojew;
niestety na koncu ma blad, powinno byc student.id_wojew=wojew.id_wojew; 4. ma LEFT . A jak wiadomo LEFT laczy wyniki nawet jak nie ma w drugiej tabeli ID... a jak wiadomo kazdy student MUSI byc przypisany do WOJEWODZTWA 3. Jest poprawne poniewaz na uczelni moze nie byc studenta z wojewodztwa X 2. to bledne zapytanie (skladnia) -------------------- śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu.. |
|
|
6.05.2009, 22:33:05
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 6.05.2009 Ostrzeżenie: (0%) |
maly_swd czyli uwazasz ze 3 jest ok. tylko ze tak jak napisał ucho dostaniemy wtedy wszystkie województwa, a pytanie brzmi: Które z poniższych zapytań SQL zwróci dane studenta z nazwą (nie numerem) województwa?
Czyli priorytetem jest otrzymanie wszystkich studentów i przypisanych do nich województw. |
|
|
7.05.2009, 11:23:28
Post
#8
|
|
Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) |
Ale z logicznego (projekt bazy).
To nie mozemy miec studenta ktory nie jest przypisany do miasta/wojewodztwa. Wiec Left Join odpada. Ale mozemy miec wojewodztwa a nie miec akurat w nich studentow. Najbardziej pasujace byloby samo JOIN, ale nie ma:) -------------------- śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu.. |
|
|
7.05.2009, 13:40:27
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 6.05.2009 Ostrzeżenie: (0%) |
No właśnie, zgadzam się z Tobą.
Skoro, wszyscy studenci mają przypisane województwa, oraz mamy województwa do których nie są przypisani studenci, to patrząc na przykład który podał ucho należy użyć LEFT JOIN. Może mógłbyś podać jakiś konkretny kontrprzykład. Dzięki za zainteresowanie. |
|
|
7.05.2009, 21:58:59
Post
#10
|
|
Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) |
Obydwa zapytanie sa poprawe pod wzgledem skladni i wyswietlenia wyniku z zalozenia... ALE... z logicznego powiazania juz tylko RIGHT JOIN... (przynajmniej na moja logike).
Kolega ucho podal wynik RIGHT join imie | nazwisko | nazwa_wojew ------+----------+------------- | | Pomorskie Jan | Kowalski | Mazowieckie (2 rows) A left JOIN jak by mial wpisanego studenta bez wojewodztwa imie | nazwisko | nazwa_wojew ------+----------+------------- Jan | Kowalski | Mazowieckie Jan | Nowak | NULL Ogolnie powinno byc w tych odpowiedziach samo JOIN. Jak by przyklad 1. nie mial bledu to on by byl najbardziej poprawny (2 rows) -------------------- śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu.. |
|
|
7.05.2009, 22:26:11
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 6.05.2009 Ostrzeżenie: (0%) |
Masz racje, ale z drugiej strony mając wpisanego studenta "Jan Nowak", który nie ma podanego województwa i użyjemy RIGHT JOIN to nie otrzymamy go w wyniku zapytania.
Dzięki za pomoc, myślę, że już chyba czas zostawić tą sporną kwestię w spokoju. A ja chyba muszę wyjaśnić tą sprawę, bo wygląda na to, że oba zapytania są poprawne na swój sposób. |
|
|
8.05.2009, 09:13:17
Post
#12
|
|
Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) |
masz racje:) z punktu widzenia SQL obydwa sa pioprawne. Z logicznego juz nie:) tak jak podales nie moze byc Jan Nowak bez wojewodztwa:D
pozdrawiam -------------------- śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu.. |
|
|
8.05.2009, 15:09:24
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 1 Dołączył: 19.10.2008 Ostrzeżenie: (0%) |
A województwo bez Jana Kowalskiego może być?
W treści pytania jest że trzeba podać dane studenta z nazwa województwa. Co się stanie gdy będzie istniało województwo w którym nie mieszka żaden student? W przypadku "SELECT imie, nazwisko, wojew.nazwa_wojew FROM student RIGHT JOIN wojew USING(id_wojew);" zostanie wyswietlone nazwa województwa bez danych studenta. Jeśli chodzi o "SELECT imie, nazwisko, wojew.nazwa_wojew FROM student LEFT JOIN wojew USING (id_wojew);" jak sami powiedzieliście nie może być studenta który nie mieszka w żadnym województwie. A wiec jeśli dane w tabelach są poprawne to zapytanie z LEFT JOIN powinno dać poprawny wynik. W innym przypadku dane w tabelach są nie poprawne. Zaś nam chodzi o to by zapytanie dawało poprawny wynik gdy są poprawne dane. |
|
|
Wersja Lo-Fi | Aktualny czas: 27.05.2024 - 10:27 |