Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoc oko SQL upita needed

[es] :: Baze podataka :: Pomoc oko SQL upita needed

[ Pregleda: 3287 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dzimba

Član broj: 11692
Poruke: 15
*.netpro.co.yu.



Profil

icon Pomoc oko SQL upita needed17.06.2005. u 12:56 - pre 214 meseci
Treba da realizujem upit u kome se trazi da iz prve tabele povadim recorde koji ne zadovoljavaju uslov spajanja sa drugom tabelom tj. konkretno imam tabelu nastavnici u kojoj su sifre nastavnika i imena i tabelu angazovanje u kojoj su predmeti koje ti nastavnici predaju. Tabele su povezane preko sifre nastavnika. Dakle upit bi trebao da zadovolji ovo pitanje : Prikazati sifre nastavnika koji ne predaju ni jedan predmet.

Hvala.
 
Odgovor na temu

solic
Novi Sad

Član broj: 43350
Poruke: 11
*.nsinfo.co.yu.



Profil

icon Re: Pomoc oko SQL upita needed17.06.2005. u 13:07 - pre 214 meseci
Primer:

Tabela nastavnici
ID_Nastavnik
Prezime
Ime ....

Tabela Angazovanje
- ID_Predmet
- ID_Nastavnik
............

SELECT * FROM Nastavnici
WHERE ID_Nastavnik NOT IN (SELECT ID_Nastavnik FROM Angazovanje)
 
Odgovor na temu

dzimba

Član broj: 11692
Poruke: 15
*.netpro.co.yu.



Profil

icon Re: Pomoc oko SQL upita needed17.06.2005. u 13:13 - pre 214 meseci
Hvala.

Tako sam i mislio ali nisam bio siguran da mogu da stavim NOT ispred IN a nemam gde da probam posto mySQL ne podrzva ugnjezdene upite.

A moze li to bez ugnjezdenog upita ?
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Pomoc oko SQL upita needed17.06.2005. u 14:00 - pre 214 meseci
Moze ali je malo prljavo

Code:

SELECT 
     DISTINCT * 
FROM 
     Nastavnici
     LEFT JOIN Angazovanje ON Angazovanje.ID_Nastavnik = Nastavnici.ID_Nastavnik
WHERE
     Angazovanje.ID_Nastavnik IS NULL


Trebalo bi da je to to sto trazis.
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.eqao.com.



+79 Profil

icon Re: Pomoc oko SQL upita needed17.06.2005. u 14:05 - pre 214 meseci
Citat:
A moze li to bez ugnjezdenog upita ?


Moze, ovako:

SELECT N.*
FROM Nastavnici AS N
LEFT JOIN Angazovanje AS A ON N.ID_Nastavnik =A.ID_Nastavnik
WHERE A.ID_Nastavnik IS NULL

Za tabele sa mnogo rekorda, iskaz sa NOT IN (Select....) moze da bude jako spor, jer se subquery izvrsava za SVAKI rekord u glavnom kveriju.

SELECT * FROM Nastavnici
WHERE ID_Nastavnik NOT IN (SELECT ID_Nastavnik FROM Angazovanje)

Ako imas 20,000 nastavnika za svih 20,000 izvrsice se deo (SELECT ID_Nastavnik FROM Angazovanje) koji svaki put vraca 20,000 rekorda. Znaci, 20,000 puta 20,000.

Moze i ovako:

SELECT N.*
FROM Nastavnici AS N
WHERE NOT EXISTS (SELECT A.ID_Nastavnik FROM Angazovanje AS A WHERE A.NastavnikID=N.NastavnikID)

Ovde subquery za svakog nastavnika vraca samo onoliko rekorda koliko taj anstavnik ima predmeta, znaci 2-3 po jednom rekordu glavnog kverija. Ako u subquery koristis SELECT TOP 1 A.ID_Nastavnik , bice jos brze, maksimalno jedna rekord u subkveriju.

:-)


 
Odgovor na temu

dzimba

Član broj: 11692
Poruke: 15
*.netpro.co.yu.



Profil

icon Re: Pomoc oko SQL upita needed17.06.2005. u 14:18 - pre 214 meseci
Hvala svima. Dobio sam odgovore koje sam trazio.


 
Odgovor na temu

dzimba

Član broj: 11692
Poruke: 15
*.netpro.co.yu.



Profil

icon Re: Pomoc oko SQL upita needed17.06.2005. u 17:38 - pre 214 meseci
Ako moze jos samo jedno pitanjce plz.

Relacija je :

Prijave(predmet,ocena)

dekle prijave ispita:

predmet_1 ... ocena_1
predmet_2 ... ocena_2
.
.
.

Ocene su od 5 do 10 (5->nije polozio)

Zadatak je
Prikazati nazive predmeta koji su polagani, kao i prolaznost na svakom od njih izrazenu u procentima.

Kapiram da bi trebalo da ide neko spajanje sa samim sobom, ali sa kojim uslovom kako bih u jednom countu dobio broj polozenih a u drugom countu broj nepolozenih ispita ?
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.eqao.com.



+79 Profil

icon Re: Pomoc oko SQL upita needed17.06.2005. u 18:04 - pre 214 meseci
CREATE VIEW vwUkupanBrojOcena
AS
SELECT Predmet, COUNT(*) AS UkupanBrojOcena
FROM Prijave
GROUP BY Predmet


CREATE VIEW vwBrojProlaznihOcena
AS
SELECT Predmet, COUNT(*) AS BrojPozitivnihOcena
FROM Prijave
WHERE Ocena>5
GROUP BY Predmet

i na kraju:

SELECT U.predmet
, U.UkupanBrojOcena
, P.BrojPozitivnihIOcena
, P.BrojPozitivnihIOcena/U.UkupanBrojOcena AS ProcenatProlaznosti
FROM vwUkupanBrojOcena AS U
JOIN vwBrojProlaznihOcena AS P ON U.predmet=P.predmet

Ne zameri ako ima nka sitna greskica, kucam direktno u poruku.

:-)

 
Odgovor na temu

dzimba

Član broj: 11692
Poruke: 15
*.netpro.co.yu.



Profil

icon Re: Pomoc oko SQL upita needed17.06.2005. u 23:18 - pre 214 meseci
hvala
 
Odgovor na temu

[es] :: Baze podataka :: Pomoc oko SQL upita needed

[ Pregleda: 3287 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.