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

MYSQL Zapytania do wielu tabel

VPS Starter Arubacloud
0 głosów
1,737 wizyt
pytanie zadane 29 stycznia 2018 w SQL, bazy danych przez Dagon Nowicjusz (120 p.)
edycja 5 lutego 2018 przez Dagon
Witam
Mam problem z wyciaganiem danych z wielu tabel i jeśli można to prosiłbym o "łopatologiczne" wytłumaczenie tworzenia takich selectow do wielu tabel. Wiem, ze nalezy skorzystac  z JOIN, ale nie do konca wiem w jaki sposob i konczy sie to iloczynem kartezjanskim.

Przykladowe zapytania

1.Podającą wszystkie dane włascicieli oraz ich działek , dla działek położonych w Warszawie

2.Podającą działki które  nie mają właścicieli i nie leżą w Warszawie

3.Podającą dane mapy (nrmapy,polozenie), oraz liczbę i  łączną powierzchnię działek na tych mapach

4.Podającą dane właścicieli, mających co najmniej 2 działki

TABELE:

dzialki | CREATE TABLE `dzialki` (
  `NrDzialki` char(20) NOT NULL,
  `Rodzaj` char(20) DEFAULT NULL,
  `NrMapy` int(3) DEFAULT NULL,
  `Powierzchnia` decimal(7,2) DEFAULT NULL,
  PRIMARY KEY (`NrDzialki`)

 mapy  | CREATE TABLE `mapy` (
  `NrMapy` int(3) NOT NULL DEFAULT '0',
  `Polozenie` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`NrMapy`)

 wlasciciele | CREATE TABLE `wlasciciele` (
  `Wlasciciel` varchar(100) DEFAULT NULL,
  `Miasto` varchar(100) DEFAULT NULL,
  `Adres` varchar(100) DEFAULT NULL,
  `DataUrodz` date DEFAULT NULL,
  `Pesel` char(11) NOT NULL,
  PRIMARY KEY (`Pesel`)

 wlasnosc | CREATE TABLE `wlasnosc` (
  `NrDzialki` char(20) NOT NULL,
  `Pesel` char(11) NOT NULL DEFAULT '',
  `Udzial` float(6,4) DEFAULT NULL,
  PRIMARY KEY (`Pesel`,`NrDzialki`),
  KEY `NrDzialki` (`NrDzialki`),
  CONSTRAINT `wlasnosc_ibfk_2` FOREIGN KEY (`NrDzialki`) REFERENCES `dzialki` (`NrDzialki`),
  CONSTRAINT `wlasnosc_ibfk_1` FOREIGN KEY (`Pesel`) REFERENCES `wlasciciele` (`Pesel`)
 

Probowałem zrobic kilka zapytan, ale np w przypadku 1, wynikiem byl iloczyn kartezjanski tabel:

SELECT w.*,d.* FROM wlasciciele w INNER JOIN dzialki d LEFT JOIN mapy m ON d.NrMapy=m.NrMapy WHERE m.Polozenie="Warszawa";

*edit
Udalo mi sie zrobic 1 i 2 select, jednak mam problemy z 3 i 4:
1.SELECT w.*,d.* FROM wlasciciele w LEFT JOIN wlasnosc wl USING(Pesel) INNER JOIN dzialki d USING(NrDzialki) INNER JOIN mapy m USING(NrMapy) WHERE m.Polozenie="Warszawa"
2.SELECT d.* FROM dzialki d LEFT JOIN wlasnosc wl USING(NrDzialki) INNER JOIN wlasciciele w USING (Pesel) INNER JOIN mapy m USING(NrMapy) WHERE Pesel IS NULL AND Polozenie!='Warszawa'
3.SELECT m.*,COUNT(d.NrDzialki), SUM(d.Powierzchnia) FROM dzialki d LEFT OUTER JOIN mapy m USING(NrMapy)--zwraca wyniki dla tylko jednej mapy, zamiast wszystkich

1 odpowiedź

0 głosów
odpowiedź 30 stycznia 2018 przez Wiciorny Ekspert (277,020 p.)

Może to Ci pomoże:  Spróbuj może FULL OUTER-JOIN

Podobne pytania

0 głosów
0 odpowiedzi 97 wizyt
0 głosów
2 odpowiedzi 3,483 wizyt
0 głosów
2 odpowiedzi 740 wizyt
pytanie zadane 18 września 2021 w SQL, bazy danych przez sisOOO Obywatel (1,370 p.)

92,964 zapytań

141,930 odpowiedzi

321,162 komentarzy

62,298 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...