Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 8 odgovora
  • 4.380 pregleda

Najnovija ↓

Pomoc oko SQL upita needed 17.06.2005. u 13:56 · pre 260 meseci #1
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.
Re: Pomoc oko SQL upita needed 17.06.2005. u 14:07 · pre 260 meseci #2
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)
Re: Pomoc oko SQL upita needed 17.06.2005. u 14:13 · pre 260 meseci #3
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 ?
Re: Pomoc oko SQL upita needed 17.06.2005. u 15:00 · pre 260 meseci #4
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.
Re: Pomoc oko SQL upita needed 17.06.2005. u 15:05 · pre 260 meseci #5
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.

:-)


Re: Pomoc oko SQL upita needed 17.06.2005. u 18:38 · pre 260 meseci #7
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 ?
Re: Pomoc oko SQL upita needed 17.06.2005. u 19:04 · pre 260 meseci #8
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.

:-)

Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme