Forum Informatyka UJ forum Strona Główna Informatyka UJ forum
Rocznik 2005 - czyli najlepsze forum w sieci
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Przykład na ćwiczeniach u Smołki

 
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 2 rok / 4 semestr - Bazy danych
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Piter
pijak



Dołączył: 21 Lis 2006
Posty: 44
Przeczytał: 0 tematów

Skąd: Bocheniec k.Kielc

PostWysłany: Czw 10:30, 29 Mar 2007    Temat postu: Przykład na ćwiczeniach u Smołki

A może by podyskutować o zadaniach, które zamieścił na stronie Smołka i które zaczęliśmy rozważać na ostatnich ćwiczeniach we wtorek?

Może nie tylko ja mam problem z formułowaniem zapytań :wink:
Może częściowo źródłem tych problemów jest to, że używam MySQL'a a tam nie ma słowa INTERSECT :( więc (raczej) poprawne zapytanie do drugiego podpunktu wygląda tak:
Kod:

SELECT A.country FROM
(SELECT B.country FROM shipclasses AS B WHERE B.type = 'dreadnought') AS A
WHERE A.country IN (SELECT C.country FROM shipclasses AS C
               WHERE C.type = 'battlecruiser');

...co jak widać nie jest zbyt eleganckie. Może da się krócej.

miło by mi było słyszeć jakieś sugestie co do innych podpunktów.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Spectro
Mistrz grilla



Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów

Skąd: Kurdwanów

PostWysłany: Czw 10:51, 29 Mar 2007    Temat postu:

Propozycja ceceta z ćwiczeń:
Kod:
SELECT DISTINCT country FROM ShipClasses WHERE country IN
(SELECT country FROM ShipClasses WHERE type='dreadnought' OR type='battlecruiser')

Trochę krócej, bo występuje 'OR' ;) .

Nie masz INTERSECTA? A inne operacje na zbiorach (UNION, EXCEPT)?

edit: Zapewne EXCEPTA też nie ma ;] . Przynajmniej tak jest napisane w docach dr Telegi.


Ostatnio zmieniony przez Spectro dnia Czw 14:10, 29 Mar 2007, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Rogal
Zjeb z kaszanką



Dołączył: 13 Mar 2006
Posty: 1745
Przeczytał: 0 tematów

Skąd: koło podbiegunowe

PostWysłany: Czw 11:54, 29 Mar 2007    Temat postu:

Spectro: To chyba nie całkiem jest to co chcielibyśmy dostać (A chcemy dostać kraje, które mają battlecruisery i dreadnoughty)
Poza tym kompletnie nie rozumiem po co robić tam zapytanie zagnieżdżone. Ten sam efekt dostaniemy prostym pojedynczym zapytaniem.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Spectro
Mistrz grilla



Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów

Skąd: Kurdwanów

PostWysłany: Czw 13:16, 29 Mar 2007    Temat postu:

Po pierwsze - ja tego nie wymyślałem. Po drugie - to rozwiązanie działa.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Rogal
Zjeb z kaszanką



Dołączył: 13 Mar 2006
Posty: 1745
Przeczytał: 0 tematów

Skąd: koło podbiegunowe

PostWysłany: Czw 14:46, 29 Mar 2007    Temat postu:

Owszem, działa, tj. parsuje się :D
Ale:
Cytat:
(SELECT country FROM ShipClasses WHERE type='dreadnought' OR type='battlecruiser')
- to wybiera nam nazwy krajów które mają któryś z dwóch zadanych typów statków. Natomiast zapytanie
Cytat:
SELECT DISTINCT country FROM ShipClasses WHERE country IN (...)
po prostu robi nam na tym distinct. Ten sam efekt dostalibyśmy pisząc po prostu
Cytat:
SELECT DISTINCT country FROM ShipClasses WHERE type='dreadnought' OR type='battlecruiser'
z tym że to nie działa tak jakbyśmy chcieli.

Mogę się mylić, ale w takim wypadku niech ktoś wytłumaczy to poprawnie :D
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Piter
pijak



Dołączył: 21 Lis 2006
Posty: 44
Przeczytał: 0 tematów

Skąd: Bocheniec k.Kielc

PostWysłany: Czw 22:48, 29 Mar 2007    Temat postu:

Co do rozwiązania Rogala to faktycznie efekt jest ten sam co zacytowanego przez Spektra zapytania (a krutsze jest prawie o połowę).
Ale tak czy inaczej wynik zapytania jest inny od żądanego w zadaniu.
Na zajęciach się pojawiło fajne rozwiązanie z urzyciem INTERSECT, którego nie chce mi się teraz odtwarzać. A chodziło o to, że wybieramy kraje, które posiadają okręty jednego typu, potem to samo dla drugiego typu i robimy na tym intersect. Fajne... ale MySQL z operatorów teoriomnogościowych implementuje tylko UNION :(

chyba się przerzucę na coś innego...
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Spectro
Mistrz grilla



Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów

Skąd: Kurdwanów

PostWysłany: Czw 23:27, 29 Mar 2007    Temat postu:

Cóż, nie znam się za bardzo na SQLu i nie gwarantuję niczego.

@Piter:
Pokombinuj coś z JOINami.

Kod:
SELECT DISTINCT A.country FROM ShipClasses AS A JOIN ShipClasses AS B
ON A.type='dreadnought' AND B.type='battlecruiser'

Wymyślone naprędce, więc zapewne nie działa :P . Ale idea chyba podobna.
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 2 rok / 4 semestr - Bazy danych Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin