Zabawa z SQL, count itp

Tworzenie tabel i wypelnianie danymi:
create table OSOBA
(
ID int identity(1, 1) not null,
NAZWISKO varchar(512) not null
)
go
alter table OSOBA add constraint PK_OSOBA primary key (ID);

create table SAMOCHOD
(
ID int identity(1, 1) not null,
MARKA varchar(512) not null
)
go
alter table SAMOCHOD add constraint PK_SAMOCHOD primary key (ID);

create table OSOBA_SAMOCHOD
(
ID int identity(1, 1) not null,
ID_OSOBA int not null,
ID_SAMOCHOD int not null
)
go
alter table OSOBA_SAMOCHOD add constraint PK_OSOBA_SAMOCHOD primary key (ID);
alter table OSOBA_SAMOCHOD add constraint FK_OSOBA_SAMOCHOD_SAMOCHOD foreign key (ID_SAMOCHOD) references SAMOCHOD (ID);
alter table OSOBA_SAMOCHOD add constraint FK_OSOBA_SAMOCHOD_OSOBA foreign key (ID_OSOBA) references OSOBA (ID);

INSERT INTO OSOBA(NAZWISKO) VALUES(‚Kowalski’)
INSERT INTO OSOBA(NAZWISKO) VALUES(‚Ziolko’)
INSERT INTO OSOBA(NAZWISKO) VALUES(‚Piotrowski’)
INSERT INTO OSOBA(NAZWISKO) VALUES(‚Kowalskiewicz’)
INSERT INTO OSOBA(NAZWISKO) VALUES(‚Brzeczyszykiewicz’)
INSERT INTO OSOBA(NAZWISKO) VALUES(‚Ziobro’)
INSERT INTO OSOBA(NAZWISKO) VALUES(‚Tusk’)
INSERT INTO OSOBA(NAZWISKO) VALUES(‚Kaczynski’)

INSERT INTO SAMOCHOD(MARKA) VALUES(‚AUDI’)
INSERT INTO SAMOCHOD(MARKA) VALUES(‚BMW’)
INSERT INTO SAMOCHOD(MARKA) VALUES(‚FIAT’)
INSERT INTO SAMOCHOD(MARKA) VALUES(‚FORD’)
INSERT INTO SAMOCHOD(MARKA) VALUES(‚CITROEN’)
INSERT INTO SAMOCHOD(MARKA) VALUES(‚PORSCHE’)

insert into OSOBA_SAMOCHOD(ID_OSOBA,ID_SAMOCHOD) VALUES(1,1);
insert into OSOBA_SAMOCHOD(ID_OSOBA,ID_SAMOCHOD) VALUES(1,2);
insert into OSOBA_SAMOCHOD(ID_OSOBA,ID_SAMOCHOD) VALUES(1,3);
insert into OSOBA_SAMOCHOD(ID_OSOBA,ID_SAMOCHOD) VALUES(1,4);
insert into OSOBA_SAMOCHOD(ID_OSOBA,ID_SAMOCHOD) VALUES(1,5);
insert into OSOBA_SAMOCHOD(ID_OSOBA,ID_SAMOCHOD) VALUES(1,6);
insert into OSOBA_SAMOCHOD(ID_OSOBA,ID_SAMOCHOD) VALUES(2,4);

insert into OSOBA_SAMOCHOD(ID_OSOBA,ID_SAMOCHOD) VALUES(2,4);
insert into OSOBA_SAMOCHOD(ID_OSOBA,ID_SAMOCHOD) VALUES(5,1);
insert into OSOBA_SAMOCHOD(ID_OSOBA,ID_SAMOCHOD) VALUES(5,2);
insert into OSOBA_SAMOCHOD(ID_OSOBA,ID_SAMOCHOD) VALUES(5,3);
insert into OSOBA_SAMOCHOD(ID_OSOBA,ID_SAMOCHOD) VALUES(5,4);
insert into OSOBA_SAMOCHOD(ID_OSOBA,ID_SAMOCHOD) VALUES(4,4);
insert into OSOBA_SAMOCHOD(ID_OSOBA,ID_SAMOCHOD) VALUES(3,1);

 

 

TERAZ zapytania:
–pobierz osoby ktore maja wiecej niz 2 samochody
SELECT
o.nazwisko, COUNT(s.marka)
FROM OSOBA_SAMOCHOD os
JOIN OSOBA o on o.id = os.id_osoba
join samochod s on s.id = os.id_samochod
group by  o.nazwisko
having count(*)>2

ważne żeby użyć group by  o.nazwisko i having count(*)>2

–zlicz ilosc wpisow dla danej osoby
SELECT
os.ID_OSOBA, COUNT(os.ID_OSOBA)
FROM OSOBA_SAMOCHOD os
group by os.ID_OSOBA