SQL złączenia, nie rozumiem ich kompletnie.

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"

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.

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ć)

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.

0

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

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