SQL złączenia, nie rozumiem ich kompletnie.

Odpowiedz Nowy wątek
2016-09-01 14:23
0

Witam,

Nie potrafię kompletnie zrozumieć złączeń ponadpodstawowych mianowicie: mam za zadanie:

Podaj nazwy działów oraz ilu pracowników w nich pracuje.

odpowiedzią jest:

select nazwa, p.id_dzialu, count(*) from pracownicy p join dzialy d on(p.id_dzialu=d.id_dzialu) group by nazwa, p.id_dzialu;

jednak nie rozumiem tych literek:p. , d p.id_dzialu, po co służą? Dopiero raczkuję z sql i nie potrafię sobie tego w głowie poukładać :X wpadłem aby to zrobić:

select nazwa,count(*) from pracownicy join dzialy on pracownicy.id_dzialu=dzialy.id_dzialu group by nazwa;

ale muszę nauczyć się na zajęcia też tak z tymi "literkami"

edytowany 2x, ostatnio: bogdans, 2016-09-01 22:57
Wstawiaj kod w znaczniki "kolorujące" <code=sql></code> - bogdans 2016-09-01 22:57

Pozostało 580 znaków

2016-09-01 14:28
3

Literki to są aliasy.
Możesz zrobić ... FROM pracownicy AS p lub ... FROM pracownicy p i to znaczy, że później gdy użyjesz p odnosisz się do tabeli pracownicy. Zostały użyte ponieważ i w tabeli dzialy i w tabeli pracownicy masz kolumny o takiej samej nazwie.

Pozostało 580 znaków

2016-09-01 20:23
2

to

select 
  nazwa, 
  p.id_dzialu, 
  count(*) 
from 
  pracownicy p 
join dzialy d on p.id_dzialu = d.id_dzialu
group by 
  nazwa, 
  p.id_dzialu;

to jest to samo co to

select 
  nazwa, 
  pracownicy.id_dzialu, 
  count(*) 
from 
  pracownicy 
join dzialy on pracownicy.id_dzialu = dzialy.id_dzialu
group by 
  nazwa, 
  pracownicy.id_dzialu;

dlaczego przy jednych polach musisz dodać nazwę tabeli z którego jest to pole (albo alias czyli tą literkę, która jedyne co robi to pozwala skrócić zapis) a przy innych nie? - załóżmy, że masz trzech kolegów - Michał A, Janek B i Michał C. Jeśli chcesz zawołać Janka wystarczy, że krzykniesz Janek i już wiadomo o kogo chodzi. Jeśli chcesz zawołać Michała musisz jeszcze sprecyzować o którego chodzi ponieważ jest ich kilku. Tu jest dokładnie tak samo - pole nazwa jest tylko w jednej tabeli, natomiast pole id_dzialu znajduje się w obu tabelach i trzeba sprecyzować, z której tabeli pole masz na myśli.
A alias jak pisałem pozwala po prostu skrócić zapis, nic więcej (przynajmniej w takim wypadku, są jeszcze podzapytania ale to "wyższy poziom" w Twoim przypadku i nie ma co sobie nimi głowy teraz zaprzątać)


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
edytowany 2x, ostatnio: abrakadaber, 2016-09-01 20:25

Pozostało 580 znaków

2016-09-01 22:38
2

Ode mnie mała rada. Ściągnij jakąkolwiek bazę i poćwicz na "żywym organiźmie" szybciej zrozumiesz dlaczego, kiedy krzyknie Ci że coś niejednoznacznie zdefiniowałeś, bądź kiedy zobaczysz kolumny w poszczególnych tabelach i stwierdzisz dlaczego krzyczy że coś jest niejednoznaczne.

Pozostało 580 znaków

2016-09-03 11:35
0

dzięki wielkie, coś tam załapałem : ))

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0