Pomoc SQL jezik
Prikazujem rezultate 1 do 5 od 5

Tema: Pomoc SQL jezik

  1. #1
    Početnik
    Učlanjen
    23.01.2005.
    Pol
    muški
    Lokacija
    Beograd
    Poruke
    14
    Reputaciona moć
    0

    Podrazumevano Pomoc SQL jezik

    Dobio sam za pripremu ispita neki zadat da ga uradim u Query Analyzer-u ali mi nešto ne ide.Zapoceo sam nešto ali mi neke stvari nisu jasne kao na primer kako da definisem 1-za muski pol a 0-za zenski i kako da definisem strani kljuc.Zadatak glasi ovako:

    Kreirati bazu Priprema primenom odgovarajuce SQL naredbe.U
    bazi kreirati dve tabele:Radnik i Zarade.
    Tabela Radnik ima sledeće atribute Prezime,Ime,Maticni broj,Pol(tip bit),
    Grad,UlicaiBroj,Telefon,mobilni

    Tabela Zarade ima atributeatumIsplate,IznosZarade.

    U obe tabele potrebno je dodati atribut koji ih jedinstveno identifikuje.
    Pored toga u tabeli Zarade potrebno je definisati odgovarajuci strani kljuc
    koji ukazuje na kog se radnika odnosi zarada.

    Bitsko polje Pol definise se na sledeći način: 1-musko,0-zensko
    Primenom INSERT naredbe ubaciti 5 zapisa u obe tabele.

    Prikazati sve zapise iz tabele Radnik koje se odnose na osobe muskog pola

    Primenom INNER JOIN naredbe prikazati Ime i Prezime radnika,Datum Isplate i
    Iznos Zarade.Iznos zarade sortirati u opadajucem poretki.

    U tabeli radnik potrebno je ubaciti još 2 osobe muskog pola(Marko,Laza) i 1
    osobu zenskog pola(Milena).Ostale podatke proizvoljno definisati

    U tabeli zarade ubaciti njihove zarade prema tabeli

    --Marko 56,767.34
    --Laza 45,456.32
    --Milenba 35,456.23

    Datum uplata ovih zarada je 15.decembar 2004.
    Povecaj zaradu radniku Laza za 25%

    Da li neko mogao da mi da kod za ovaj zadatak ili bar da mi barem malo ispravi ovo sto sam ja napisao...Hvala...


    Create Database Priprema

    Create Table Radnik
    (
    ID int identity(1,1)Not Null primary Key,
    Ime varchar(40)Not Null,
    Prezime varchar(40)Not Null,
    JMBG char(13)Not Null Unique,
    Pol bit Null,
    Grad varchar(40)Null Default'Beograd',
    UlicaIBroj varchar(50) Not Null,
    Telefon varchar(15)Null,
    Mobilni varchar(15)Null
    )
    Create Table Zarade
    (
    ID_1 int identity(1,1) Not null primary Key,
    Datumisplate smalldatetime Not Null,
    IznosZarade varchar(50) Not null,
    )
    Alter Table Zarade
    ADD Constraint Fk_ID_1 Foreign Key(ID_1)
    REFERENCES Radnik(ID)

    Insert Into Radnik (Ime,Prezime,JMBG,Pol,Grad,UlicaIBroj,Telefon,Mobi lni)
    Values ('Bojan','Milenkovic','1909984710153','1','Beograd ','Dr.Ivana Ribara 126','011-1762996','064-2047845')

    Insert Into Zarade (datumisplate,Iznoszarade)
    Values('12.15.2004','500')


    Insert Into Radnik (Ime,Prezime,JMBG,Pol,Grad,UlicaIBroj,Telefon,Mobi lni)
    Values ('Petar','Peric','1206984710153','1','Beograd','Ne manjina','011-2222222','064-2222222')

    Insert Into Zarade (datumisplate,Iznoszarade)
    Values('12.15.2004','200')

    Insert Into Radnik (Ime,Prezime,JMBG,Pol,Grad,UlicaIBroj,Telefon,Mobi lni)
    Values ('Milan','Milanovic','1806984710153','1','Beograd' ,'Sarajevska 15','011-1111111','064-333333333')

    Insert Into Zarade (datumisplate,Iznoszarade)
    Values('11.15.2004','1200')

    Insert Into Radnik (Ime,Prezime,JMBG,Pol,Grad,UlicaIBroj,Telefon,Mobi lni)
    Values ('Ivana','Ivanovic','1306984710153','0','Beograd', 'Balkanska 15','011-44444444','064-44444444')

    Insert Into Zarade (datumisplate,Iznoszarade)
    Values('09.12.2004','2200')

    Select *
    From Radnik
    Where pol=1

    Select radnik.ime,radnik.prezime,zarade.datumisplate,zara de.iznoszarade
    From Radnik
    Inner Join zarade
    On radnik.ID=zarade.ID_1
    Order By iznoszarade DESC
    go

    Insert Into Radnik (Ime,Prezime,JMBG,Pol,Grad,UlicaIBroj,Telefon,Mobi lni)
    Values ('Marko','Markovic','0511984710153','1','Beograd', 'Kneza milosa 58','011-5555555','064-5555555')

    Insert Into Zarade (datumisplate,Iznoszarade)
    Values('12.15.2004','350')


    Insert Into Radnik (Ime,Prezime,JMBG,Pol,Grad,UlicaIBroj,Telefon,Mobi lni)
    Values ('Laza','Lazic','1104984710153','1','Beograd','Nem anjina','011-2337892','064-5856781')

    Insert Into Zarade (datumisplate,Iznoszarade)
    Values('12.15.2004','45,456.32')

    Insert Into Radnik (Ime,Prezime,JMBG,Pol,Grad,UlicaIBroj,Telefon,Mobi lni)
    Values ('Milena','Milic','1102981710153','0','Beograd','S arajevska 59','011-8888888','064-8888888')

    Insert Into Zarade (datumisplate,Iznoszarade)
    Values('12.15.2004','35,456.23')

    update zarade
    Set iznoszarade='56,820.4'--Zarada uvecana za 25% prethodna zarada je bila 45,456.32
    where ID_1=6

    select *
    from radnik
    select *
    from zarade



  2. #2
    Početnik
    Učlanjen
    20.12.2004.
    Lokacija
    Beograd
    Poruke
    17
    Reputaciona moć
    0

    Podrazumevano

    Ovako bih ja radio u Interbase-u. To je naj jednostavniji nacin koji mi je pao napamet u 03:40 ujutru. Analogija je ista, pa nadam se da pomaze.

    // kreiram domen da bi imao dve vrednosti(musko/zensko)

    CREATE DOMAIN INT_BOOLEAN
    AS SMALLINT
    DEFAULT 0
    NOT NULL
    CHECK (VALUE IN (0,1));

    CREATE TABLE RADNICI
    (
    MATICNI_BROJ INTEGER NOT NULL,
    IME CHAR(20) NOT NULL,
    PREZIME CHAR(20) NOT NULL,
    POL INT_BOOLEAN,
    GRAD CHAR(20),
    ADRESA CHAR(50),
    BR_TEL CHAR(15),
    BR_MOB CHAR(15),
    PRIMARY KEY(MATICNI_BROJ)
    );


    CREATE TABLE ZARADE
    (
    ZARADA_ID INTEGER NOT NULL,
    MATICNI_BROJ INTEGER NOT NULL,
    DATUM_ISPLATE DATE NOT NULL,
    IZNOS_ZARADE NUMERIC(15,2),
    PRIMARY KEY(ZARADA_ID)
    );

    insert into RADNICI
    (MATICNI_BROJ, IME, PREZIME, POL, GRAD, ADRESA, BR_TEL, BR_MOB)
    values
    (1, 'PERA', 'PERIC', 1, 'BEOGRAD', 'NEKA ADRESA BR 25', '011/123-456', '063/123-456');

    insert into RADNICI
    (MATICNI_BROJ, IME, PREZIME, POL, GRAD, ADRESA, BR_TEL, BR_MOB)
    values
    (2, 'MARKO', 'MRKIC', 1, 'NIS', 'NEKA ADRESA BR 36', '011/111-222', '063/222-456');

    insert into RADNICI
    (MATICNI_BROJ, IME, PREZIME, POL, GRAD, ADRESA, BR_TEL, BR_MOB)
    values
    (3, 'LAZA', 'SIMIC', 1, 'NIS', 'NEKA ADRESA BR 11', '011/111-222', '063/222-456');

    insert into RADNICI
    (MATICNI_BROJ, IME, PREZIME, POL, GRAD, ADRESA, BR_TEL, BR_MOB)
    values
    (4, 'MILENA', 'DUDIC', 0, 'NIS', 'NEKA ADRESA BR 6', '011/144-222', '063/2233-56');

    // Markova zarada:
    insert into ZARADE
    (ZARADA_ID, MATICNI_BROJ, DATUM_ISPLATE, IZNOS_ZARADE)
    values
    (1, 2, '15.12.2004', 56767.34);

    // Lazina zarada:
    insert into ZARADE
    (ZARADA_ID, MATICNI_BROJ, DATUM_ISPLATE, IZNOS_ZARADE)
    values
    (7, 3, '15.12.2004', 45456.32);

    //Milenina zarada:
    insert into ZARADE
    (ZARADA_ID, MATICNI_BROJ, DATUM_ISPLATE, IZNOS_ZARADE)
    values
    (8, 4, '15.12.2004', 35456.23);


    // prikazujem sve radnike muskog pola:
    SELECT * FROM RADNICI WHERE POL = 1;

    //radnici i zarade u opadajucem redosledu po iznosu
    SELECT RADNICI.IME, RADNICI.PREZIME,ZARADE.DATUM_ISPLATE, ZARADE.IZNOS_ZARADE FROM RADNICI
    INNER JOIN ZARADE
    ON RADNICI.MATICNI_BROJ = ZARADE.MATICNI_BROJ
    ORDER BY IZNOS_ZARADE DESC;

    // uvecavam zaradu za 25% radniku sa maticnim brojem 3 tj Lazi
    UPDATE ZARADE
    SET
    IZNOS_ZARADE = IZNOS_ZARADE * 1.25
    WHERE
    MATICNI_BROJ = 3;

    Pozdrav...

  3. #3
    Poznat Garwor (avatar)
    Učlanjen
    27.04.2004.
    Pol
    muški
    Poruke
    7.152
    Reputaciona moć
    121

    Podrazumevano

    Nije bas najpreciznije:
    u prvom primeru kad ubacujes zaradu ne kazes za kog radnika, moras da dodas u insertu njegov skriveni kljuc u polje koje si prethodno dodao u tabelu zarade. Ali nemoj eksplicitno da kazes recimo broj 3, nego select ID from radnik where ime = 'Laza', naravno onda to ime mora biti unique da ti ne bi podupit vratio vise od jednog upita.Kad god se trazi nesto za recimo Peru, umesto broja njegovog ID-a stavi podupit kao gore. To je bitno jer ako se obrise neki radnik pa se ponovo ubaci nece imati isti ID.
    Strani kljuc treba da bude definisan kao 'on delete parent cascade' ( ili neka slicna sintaksa, proveri kod sebe), da bi se obrisale zarade kad se brise radnik.
    U drugom primeru ne vidim gde je definisan strani kljuc sto je trazeno u zadatku, a za referisanje na radnika vazi isto kao i gore.

  4. #4
    Početnik
    Učlanjen
    20.12.2004.
    Lokacija
    Beograd
    Poruke
    17
    Reputaciona moć
    0

    Podrazumevano

    Citat Original postavio Garwor
    Nije bas najpreciznije:
    u prvom primeru kad ubacujes zaradu ne kazes za kog radnika, moras da dodas u insertu njegov skriveni kljuc u polje koje si prethodno dodao u tabelu zarade. Ali nemoj eksplicitno da kazes recimo broj 3, nego select ID from radnik where ime = 'Laza', naravno onda to ime mora biti unique da ti ne bi podupit vratio vise od jednog upita.Kad god se trazi nesto za recimo Peru, umesto broja njegovog ID-a stavi podupit kao gore. To je bitno jer ako se obrise neki radnik pa se ponovo ubaci nece imati isti ID.
    Strani kljuc treba da bude definisan kao 'on delete parent cascade' ( ili neka slicna sintaksa, proveri kod sebe), da bi se obrisale zarade kad se brise radnik.
    U drugom primeru ne vidim gde je definisan strani kljuc sto je trazeno u zadatku, a za referisanje na radnika vazi isto kao i gore.
    Pogledaj ponovo, sto se tice Insert-a u tabeli zarade:
    insert into ZARADE
    (ZARADA_ID, MATICNI_BROJ, DATUM_ISPLATE, IZNOS_ZARADE)
    values
    (1, 2, '15.12.2004', 56767.34);

    Vrednost u ovoj tabeli broj 2 (maticni broj) ukazuje upravo da se radi o radniku broj 2 odnosno Marku, jer on ima polje pod PRIMARNIM KLJUCEM u tabeli RADNICI (koje ne moze da se ponovi). Ovaj upit sam mogao da ponovim jos x puta (naravno uz uvecanje vrednosti polja "ZARADA_ID" koje je takodje pod PRIMARNIM KLJUCEM i ne sme da se ponovi) i onda bi se sve zarade odnosile na Markove. Isto vazi i za ostale zaposlene.
    Drugo, ime mora da se ostavi da moze da se ponavlja - ne sme da bude UNIQUE na primer Pera Peric,Pera Simic, Pera Lazic itd... kao i prezime. To su sve razliciti ljudi koji u tabeli Radnici imaju jedinstvene maticne brojeve.
    Naravno, podrazumeva se, da ce se ako se obrise odredjeni radnik ponovnim unosom izgubiti taj ID.
    Pozdrav...

  5. #5
    Poznat Garwor (avatar)
    Učlanjen
    27.04.2004.
    Pol
    muški
    Poruke
    7.152
    Reputaciona moć
    121

    Podrazumevano

    E, u pravu si sto se tice maticnog broja, jeste unique i primary key, nisam pazljivo pogledao ops: mada bih ja dodao polje radnik_id da bude integer default autoincrement kao primary key. U svakom slucaju zamerka ostaje za primer 1, a ako cemo precizno, trebao sam da napisem
    select ID from radnik where jmbg = '1104984710153', ali je sustina ista: ne stavljati ID nego ga dohvatiti podupitom.
    U tabeli zarade , primer 2, bolje bi bilo da je zarade_id autoincrement, da se ne bi kod svakog inserta u istu tabelu morao upisivati taj id (sta ako ima puno zarada, treba negde pamtiti taj broj ).
    Ostaje primedba za strani kljuc.

Slične teme

  1. Koj jezik???
    Autor purpurna magla u forumu Programiranje
    Odgovora: 12
    Poslednja poruka: 21.02.2006., 16:09
  2. pomoc za engleski jezik
    Autor simcek u forumu Jezik
    Odgovora: 1
    Poslednja poruka: 11.11.2005., 18:52
  3. Filoloski-koji jezik?Molim za pomoc
    Autor 12345 u forumu Arhiva
    Odgovora: 1
    Poslednja poruka: 29.05.2004., 17:41

Pravila za slanje poruka

  • Ne možete kreirati novu temu
  • Ne možete poslati odgovor
  • Ne možete dodati priloge
  • Ne možete prepraviti svoju poruku
  •