matematykaszkolna.pl
. asdf: Bazy danych Jest może jakaś ogarnięta osoba z zapytań SQL (nie tych najprostszych, chodzi o złożone selecty oraz joiny) Podpinam, kto moglby wiedziec: Trivial − jesteś?
14 cze 18:21
Hajtowy: asdf napisz dokładnie o co chodzi emotka może będę w stanie pomóc emotka
14 cze 19:28
asdf: ok
14 cze 20:20
asdf: Polecenie: OCENY(idoceny,idproduktu, idankiety, ocena,) PRODUKTY(idproduktu, idkilenta, nazwaproduktu) ZAMÓWIENIA (idzamowienia, idproduktu, idkilenta, datazamowienia) KLIENCI(idklienta, imie, nazwisko) ANKIETY(idankiety, nazwiskoankietujacego, imieankietujacego) Ile razy produkty zakupione przez KOWALSKIEGO JANA były oceniane przez NOWAKA ADAMA. moja odp to: SELECT COUNT(o.id) FROM oceny o JOIN ankiety a ON a.imie = "ADAM" AND a.nazwisko = "NOWAK" WHERE o.produktID IN ( SELECT z.produktNR FROM zamowienia z JOIN klienci k ON k.imie = "JAN" AND k.nazwisko = "KOWALSKI" WHERE z.klientNR = k.ID ) AND o.ankietaNR = a.ID ok?
14 cze 20:20
asdf: moze nazwy do konca sie nie zgadzaja, ale sens jest taki: klucz obcy, w tabeli jakos dziwnie nazwany, tutaj przyjalem taka konwencje:nazwa+"NR" klucz glowny: ID lub nazwa+ID (by czytanie zapytania bylo latwiejsze)
14 cze 20:23
asdf:
14 cze 21:30
Trivial: Cześć Nie podoba mi się to Twoje zapytanie. emotka Jakieś takie rozlazłe, ma bardzo dziwny warunek złączenia i prawdopodobnie nie działa (nie wykorzystana tabela ankiety). Nie mam na czym go przetestować. Napiszę swoje: http://pastebin.com/nhEYidm8 Ponadto, jest coś dziwnego: tabela produkty ma id_klienta.
14 cze 22:04
asdf: Cześć, tez sie zastanawialem nad tym po co to jest Dzieki , tylko dziwie sie, czemu moje zapytanie mialo by nie zadziałać, przeciez: FROM oceny o JOIN ankiety a ON a.imie = "ADAM" AND a.nazwisko = "NOWAK" na tym etapie mam wszystkie oceny, ktore wystawil ADAM NOWAK WHERE o.produktID IN ( // ktorych produkty maja te same ID co zamowione przez kowalskiego SELECT z.produktNR FROM zamowienia z JOIN klienci k ON k.imie = "JAN" AND k.nazwisko = "KOWALSKI" WHERE z.klientNR = k.ID ) AND o.ankietyNR = a.ID // nie wiem nawet czy to trzeba...przeciez juz zlaczenie bylo.
14 cze 23:18
asdf: na tym etapie mam wszystkie oceny, ktore byly w ankiecie nowaka*
14 cze 23:19
asdf: dobrze rozumiem moje zapytanie: z tabeli oceny pobierz wszystkie te, ktore ocenil adam nowak, nastepnie sposrod tych ocen wybierz te, ktore byly zamawiane przez klienta JAN NOWAK
14 cze 23:36
asdf: ... z tabeli oceny pobierz wszystkie te, ktore ocenil adam nowak, nastepnie sposrod tych ocen wybierz te, ktorych produktID byl rowny temu produktowi, który byl zamawiany przez klienta jan kowalski
14 cze 23:37
asdf: Jeszcze mam takie zadanie: Są tabele: BYWA (piwosz, bar) PODAJA (bar, piwo) LUBI (piwosz, piwo) musze pobrac: piwoszy bywajacych w barze, w ktorym podaja piwo, ktore lubia ci piwosze zrobilem w 2 formach (zagniezdzony select oraz join) http://pastebin.com/B31a4cCp jest ok?:
14 cze 23:53
Trivial: Wygląda w miarę OK. W drugim będziesz miał duplikaty.
14 cze 23:57
asdf: tylko tu sie jeszcze zastanawiam, bo: SELECT piwosz FROM bywa b JOIN podaja p ON p.bar = b.bar JOIN lubi l ON l.piwo = p.piwo mozna to skrocic do takiego zapytania, czy musi byc takie jak w pastebin.com/(...) i czy w ogole te odp sa ok
14 cze 23:57
asdf: jak w drugim duplikaty, to i w pierwszym, a co do postu z 23:37 − tez jest ok?
14 cze 23:58
Trivial: W pierwszym nie będzie duplikatów. Co do 23:37 to zapytanie zwróci co innego niż moje. Znowu zależy od tego co konkretnie chcemy wybrać.
15 cze 00:00
asdf: ilosc ocenionych produktow przez nowaka, ktore wystawil kowalski..
15 cze 00:03
Trivial: Czy każda indywidualna ocena danego produktu liczona jest jako jedna czy kilka?
15 cze 00:04
asdf:
15 cze 00:05
Trivial: Nowak mógł ocenić dany produkt np. 3 razy. Czy to 3 oceny, czy jedna?...
15 cze 00:07
asdf: tego nie wiem
15 cze 00:10
asdf: jeszcze mam takie zadanie (tabele takie same jak bywa, podaja, lubi): wybrac piwoszy, w tym samym barze co piwosz lubiacy podawany w tym samym barze gatunek piwa, ktore lubi kowalski: http://pastebin.com/cGaVrhGg ok?
15 cze 00:13
Trivial: Twoja wersja zlicza jako jedną, moja uwzględnia krotność. Poza tym w JOINIE powinien być tylko klucz obcy − reszta w WHERE.
15 cze 00:13
Trivial: Weź zrób sqlfiddle to sobie potestujemy. Dodaj przykładowe dane.
15 cze 00:15
asdf: ok, z tym bywa, lubi i podaja ok?
15 cze 00:20
Trivial: Raczej nie, chyba że nie rozumiem treści polecenia (jest trochę zamotane).
15 cze 00:23
asdf: no jest..mi tez to ciezko zrozumiec
15 cze 00:24
asdf: http://sqlfiddle.com/#!2/77998 cos takiego zrobilem.
15 cze 00:24
Trivial: Coś takiego chyba: PiwoszeW(BarachSerwujących(Piwa(Kowalskiego)))
15 cze 00:26
Trivial: asdf, za dużo tych x IN y. emotka Lepiej zrobić kilka JOINów.
15 cze 00:29
asdf: piwoszy w tych samych barach, gdzie sprzedaja piwa kowalskiego?
15 cze 00:29
Trivial: Coś takiego da radę (chyba): SELECT DISTINCT b.piwosz FROM lubi l JOIN podaja p ON (p.piwo = l.piwo) JOIN bywa b ON (b.bar = p.bar) WHERE l.piwosz = 'Kowalski'
15 cze 00:34
asdf: SELECT piwosz FROM lubi l JOIN podaja p ON p.piwo = l.piwo JOIN bywa b ON b.bar = p.bar WHERE l.piwosz = 'kowalski'
15 cze 00:34
asdf: znaleźć piwoszy lubiących pić piwo podawane w barze „POD LIPĄ”.
15 cze 00:35
Trivial: Musi być SELECT DISTINCT b.piwosz.
15 cze 00:36
asdf: SELECT piwosz FROM lubi l JOIN podaja p ON p.piwo = l.lubi WHERE p.bar = 'POD LIPA' ok?
15 cze 00:37
asdf: ok
15 cze 00:37
asdf: znaleźć piwoszy pijących w tym samym barze co piwosz lubiący piwo „LECH”.
15 cze 00:38
Trivial: SELECT piwosz FROM bywa WHERE bar = 'Pod Lipą'
15 cze 00:38
Trivial: SELECT DISTINCT b2.piwosz FROM lubi l JOIN bywa b ON (b.piwosz = l.piwosz) JOIN bywa b2 ON (b2.bar = b.bar) WHERE l.piwo = 'LECH'
15 cze 00:41
asdf: a no tak
15 cze 00:42
Trivial: Coś jeszcze? (:
15 cze 00:46
asdf: nom, sekunda, to ogarne pierw
15 cze 00:46
asdf: SELECT piwosz FROM bywa b WHERE bar IN ( SELECT bb.bar FROM bywa bb JOIN lubi ON l.piwosz = bb.piwosz WHERE l.piwosz = 'KOWALSKI' )
15 cze 00:51
asdf: SELECT piwosz FROM bywa b WHERE bar IN ( SELECT bb.bar FROM bywa bb JOIN lubi ON l.piwosz = bb.piwosz WHERE l.piwo = 'LECH' )
15 cze 00:52
asdf: w zagniezdzonym jest ID baru, w ktorym pije ten co lubi lecha, a glowny to po prostu piwosze, ktorzy pija w tym samym barze tak?
15 cze 00:52
asdf: juz bez detali (distinct oraz b.piwosz)
15 cze 00:53
Trivial: Jest chyba OK, ale nie rozumiem potrzeby nadmiernego zagnieżdżania. emotka
15 cze 00:55
asdf: nie mam tej wprawy co Ty
15 cze 00:56
asdf: Spółdzielnia „Szczęśliwa Dolina” utrzymuje bazę danych, w której przechowuje informacje o saldach swoich członków, ich zamówieniach, potencjalnych dostawcach i cenach dostawczych w następujących tabelach, w których atrybuty podano w nawiasach okrągłych: CZŁONKOWIE(NAZWISKO, ADRES, SALDO) ZAMÓWIENIA(NRZAMÓWIENIA, NAZWISKO, TOWAR, ILOŚĆ) DOSTAWCY(NAZWADOSTAWCY, ADRESDOSTAWCY, TOWAR, CENA). Podaj wyrażenie algebry relacji lub zapytanie w SQL by znaleźć tych członków spółdzielni, którzy mają ujemne saldo i zamówili towar u dostawcy „FRICO”.
15 cze 00:56
Trivial: SELECT DISTINCT cz.nazwisko FROM zamówienia z JOIN członkowie cz ON (cz.nazwisko = z.nazwisko) JOIN dostawcy d ON (d.towar = z.towar) WHERE d.nazwa_dostawcy = 'FRICO' AND cz.saldo < 0
15 cze 01:00
asdf: jeszcze co do tego: piwoszy w tych samych barach, gdzie sprzedaja piwa kowalskiego? nie powinno byc tak: SELECT piwosz FROM bywa b JOIN podaja p ON p.bar = b.bar JOIN lubi l ON l.piwo = p.piwo WHERE l.piwosz = 'kowalski' ?
15 cze 01:01
zawodus: Przynajmniej masz "ciekawą" bazę danych Dobrze, że ja już bazy danych mam za sobą
15 cze 01:01
Trivial: asdf, to bez znaczenia. emotka
15 cze 01:03
Trivial: Tylko musi być DISTINCT, bo dostaniesz wiele duplikatów.
15 cze 01:03
asdf: oj tam oj tam
15 cze 01:04
asdf: Spółdzielnia „Szczęśliwa Dolina” utrzymuje bazę danych, w której przechowuje informacje o saldach swoich członków, ich zamówieniach, potencjalnych dostawcach i cenach dostawczych w następujących tabelach, w których atrybuty podano w nawiasach okrągłych: CZŁONKOWIE(NAZWISKO, ADRES, SALDO) ZAMÓWIENIA(NRZAMÓWIENIA, NAZWISKO, TOWAR, ILOŚĆ) DOSTAWCY(NAZWADOSTAWCY, ADRESDOSTAWCY, TOWAR, CENA). Podaj wyrażenie algebry relacji lub zapytanie w SQL by znaleźć tych dostawców, towary i ceny dla wszystkich dostawców dostarczających co najmniej jeden towar zamawiany przez „NOWAKA”
15 cze 01:07
asdf: czyli tu chodzi o to by: znalezc tych dostawcow, ktorych towar zostal co najmniej raz zamowiony przez nowaka tak?
15 cze 01:09
Trivial: Tak.
15 cze 01:11
asdf: SELECT FROM dostawcy d JOIN zamowienia z ON z.towar = d.towar WHERE z.towar IN ( SELECT zz.towar FROM zamowienia zz GROUP BY zz.towar HAVING COUNT(zz.towar) > 1 WHERE zz.nazwisko = 'NOWAK' )
15 cze 01:15
asdf: eh...zle doczytalem, "co najmniej", a nie "wiecej niz" moje bedzie dobre dla "co najmniej" 2?
15 cze 01:16
Trivial: SELECT DISTINCT d.nazwa_dostawcy, d.towar, d.cena FROM zamowienia z JOIN dostawcy d1 ON (d1.towar = z.towar) JOIN dostawcy d ON (d.nazwa_dostawcy = d1.nazwa_dostawcy) WHERE z.nazwisko = 'NOWAKA'
15 cze 01:17
asdf: takie cos tez przejdzie?: SELECT FROM dostawcy d WHERE d.towar IN ( SELECT zz.towar FROM zamowienia zz GROUP BY zz.towar HAVING COUNT(zz.towar) > 1 WHERE zz.nazwisko = 'NOWAK' )
15 cze 01:19
Trivial: HAVING chyba nie można tak użyć.
15 cze 01:19
15 cze 01:21
asdf: przejdzie to? (dla co najmniej 2)
15 cze 01:23
Trivial: Chodziło mi o to, czy brak COUNT(zz.towar) w select nie jest czasem błędem. Samo zapytanie nie przejdzie jeśli dobrze rozumiem strukturę bazy danych. Trzeba wybrać nazwy tych dostawców, a potem jeszcze raz zagnieździć i wybrać ich cały asortyment.
15 cze 01:27
Trivial: Dobra asdf, lecę spać. Na razie. emotka
15 cze 01:29
asdf: czesc, dzieki bardzo
15 cze 01:29
asdf: aha...czyli zle zrozumialem pytanie, powinno brzmiec: pokazac wszystkie towary i ceny dostawcy, u ktorego co najmniej raz zamawial nowak. tak?
15 cze 01:47
asdf: a takie zadanie: pokazac wszystkie produkty dostawcy, u ktorego zamawial co najmniej 2 razy NOWAK: http://pastebin.com/rF3tQpYA select 3: pobiera wszystkie towary nowaka select 2: pobiera nazwy dostawcow, u ktorych nowak zamowil co najmniej 2 razy select 1: wyswietla wszystkie produkty danych dostawcow ok?
15 cze 02:10
asdf: jezeli tak, to jak takie cos zrobic na joinach?
15 cze 02:11
asdf: jeszcze takie cos: Podaj wyrażenie algebry relacji lub zapytanie w SQL by znaleźć tych dostawców, którzy dostarczają towar zamówiony przez członków spółdzielni, którzy mają ujemne salda. SELECT d.nazwadostawcy FROM czlonkowie cz JOIN zamowienia z ON z.nazwisko = cz.nazwisko JOIN dostawcy d ON d.towar = z.towar WHERE cz.saldo < 0 ok?
15 cze 02:54
Trivial: W ogóle to nie podoba mi się ta baza z towarami. Towary dostarczane przez danego dostawcę powinny być rozdzielone od innych danych dostawcy. Są zależności funkcyjne (np. NazwaDostawcy → AdresDostawcy), chyba że każdy dostawca dostarcza jeden towar. Skąd bierzesz te zadanka?
15 cze 12:48
Trivial: 02:54 wygląda OK.
15 cze 13:05
asdf: Z forum uczelnianego mniej wiecej takie sa na egzaminie.
15 cze 13:24
Trivial: Co do 2:10 to nie znowu nie jestem pewny czy można sobie tak używać HAVING bez podawania COUNT(d.towar) na liście pól select. Później to sprawdzę. Poza tym masz złą składnię. Kolejność jest taka: SELECT FROM WHERE GROUP BY HAVING ORDER BY
15 cze 13:25
asdf: No tak juz pisalem po nocach i mi sie troche mylilo (ale to nie zadne usprawiedliwienie) Da sie to jakos bez zagniezdzenia zrobic? (chyba nie..)
15 cze 13:35
asdf: tamto wczesniejsze chyba nie przejdzie, to jest ok?: http://pastebin.com/Q3JgsPAE
15 cze 13:45
Trivial: Sprawdziłem czy można używać HAVING bez pola w select. W SQL Server 2012 działa. Przykład: SELECT 1 FROM owoce GROUP BY id HAVING Count(*) > 4
15 cze 13:53
Trivial: A ten twój nowy przykład na pewno nie zadziała, bo nawet nie masz nigdzie count. emotka
15 cze 13:54
asdf: oj...count (d.nazwadostawcy) >= 2, teraz ok?
15 cze 13:57
Trivial: Chyba OK. Tak się tylko zastanawiam się po co piszesz te nazwy pól w count? To ma znacznie tylko przy nullach, a chybe nie oczekujesz żadnych? emotka
15 cze 13:59
asdf: tak przy joinach nie ma znaczenia, przy left joinach juz tak
15 cze 14:01
asdf: bedziesz miec chwile (jak nie teraz to pozniej, kolo 20?), bo normalizacje chcialem ogarnac
15 cze 14:03
Trivial: Tutaj bez podzapytania chyba nie przejdzie.
15 cze 14:03
Trivial: Hmm może chwilkę znajdę.
15 cze 14:07
asdf: teraz, czy pozniej?
15 cze 14:09
Trivial: Koło 20−21.
15 cze 14:09
asdf: Ok, to milego dnia, do wieczoru.
15 cze 14:11
Trivial: Cześć. emotka
15 cze 14:12
asdf: Ja bede kolo 20:30.
15 cze 16:31
asdf: będziesz to daj znac (co 15 min sprawdzam)
15 cze 20:27
Trivial: Jestem, ale robię sprawko.
15 cze 20:56
asdf: ok, o ktorej bedziesz dostepny?
15 cze 20:57
Trivial: w zasadzie i tak nie wiem jak coś zrobić. mogę teraz.
15 cze 21:03
asdf: ok, za 5 min podesle linka. zjem
15 cze 21:07
15 cze 21:14
asdf: Trivial mam kolejne zadanko: Wypisz w SQL osoby z działu ZABAWKI, które zarabiają więcej niż osoby zaszeregowane do piątej grupy zaszeregowania Pracownik: pracownikID, działNR, imie, nazwisko, grupazaszeregowanNR, kierownikNR, stanowiskoNR, zarobek Kierownik: kierownikID, działNR, imie, nazwisko Dział: działID, nazwa, miasto Zaszeregowanie:grupazaszeregowanID, nazwa, zarobekmin, zarobekmax SELECT p.imie, p.nazwisko FROM dzial d JOIN pracownik p ON p.dzialNR = d.dzialID WHERE d.nazwa = 'ZABAWKI' AND p.zarobek > ( SELECT zarobekmax FROM zarobek z WHERE z.nazwa ='5' ) jest ok?
17 cze 02:26
asdf: jeszcze mam coś takiego: KATEGORIA: kategoriaID, nazwa PRODUKT: produktID, kategoriaNR, nazwa, cena KLIENT: klientID, imie, nazwisko ZAMOWIENIE: zamowienieID, klientNR, produktNR, ilosc, uwagi ANKIETA: ankietaID, imie, nazwisko, adres OCENA: ocenaID, produktNR, ankietaNR, ocenawaga, uwagi, data
17 cze 02:47
asdf: Jakiej kateogrii produkt zamawiany przez kowalskiego najwyzej ocenil nowak?
17 cze 02:47
asdf: tu jest całość http://pastebin.com/pfSeft45 jest ok?
17 cze 02:50
Trivial: Oj nie chce mi się asdf...
17 cze 17:03
asdf: :(
17 cze 18:36
asdf: Trivial, moglbys sprawdzic jeszcze jedną rzecz? http://pastebin.com/qJUV96Cn
26 cze 13:41
asdf: ?
26 cze 22:53
zawodus: a sprawdziłeś czy działa ci to? emotka
26 cze 23:44
asdf: a czemu mialoby nie działać? Juz nie chodzi nawet o to, czy nie ma glupiej pierdolki gdzies...ale o sam sposob rozwiazania (relacja, sortowanie −> wynik, czy ok?)
26 cze 23:56
asdf: :(
27 cze 12:06
Trivial: A nie możesz sobie tego odpalić po prostu dla jakiegoś małego zbiorku danych? emotka
27 cze 16:19
asdf: no ok
28 cze 03:22