Vous êtes sur la page 1sur 5

Zagadnienia

Pracazbazdanychkwiaciarniaifirmazajciapowtrkowe.

Zadanie1
Utwrzschematonazwiefirmaiustawgojakoaktualny.Wramachschematufirmawykonajponisze polecenia:
CREATE TABLE dzialy ( id_dzialu char(5) NOT nazwa varchar(32) NOT lokalizacja varchar(24) NOT kierownik char(5), constraint dzial_pk PRIMARY ); NULL, NULL, NULL, KEY(id_dzialu)

CREATE TABLE pracownicy ( id_pracownika char(5) NOT NULL, nazwisko varchar(32) NOT NULL, imie varchar(16) NOT NULL, data_ur date NOT NULL, dzial char(5) NOT NULL, stanowisko varchar(24), pobory numeric(8,2), constraint prac_pk PRIMARY KEY(id_pracownika), constraint prac_fk FOREIGN KEY(dzial) REFERENCES dzialy(id_dzialu) ON UPDATE cascade ); ALTER TABLE dzialy ADD constraint dzial_fk FOREIGN KEY(kierownik) REFERENCES pracownicy(id_pracownika) ON UPDATE cascade;

Zadanie2
Umieponiszeinstrukcjewskrypciefirmadane.sql.Uzupenijskrypttak,abymonabyowykona tepoleceniawniezmienionejpostaci.
INSERT INTO dzialy VALUES ('PH101','Handlowy','Marki','77'); INSERT INTO dzialy VALUES ('PR202','Projektowy','Olecko','27'); INSERT INTO dzialy VALUES ('PK101','Personalny','Niwka','72'); INSERT INTO pracownicy VALUES ('27','Kruk','Adam','15/12/1989','PK101','kierownik',2200); INSERT INTO pracownicy VALUES ('270','Kowalik','Artur','13/12/1988','PK101','analityk',2400); INSERT INTO pracownicy VALUES ('72','Kowalik','Adam','15/11/1989','PR202','kierownik',2600); INSERT INTO pracownicy VALUES

('720','Kowalik','Amadeusz','17/12/1988','PK101','analityk',3200); INSERT INTO pracownicy VALUES ('707','Kukulka','Antoni','15/12/1999','PH101','robotnik',1600); INSERT INTO pracownicy VALUES ('207','Kowal','Alojzy','15/10/1998','PH101','robotnik',2000); INSERT INTO pracownicy VALUES ('77','Kowalus','Adam','12/11/1998','PH101','kierownik',5400); INSERT INTO pracownicy VALUES ('1010','Kawula','Alojzy','15/11/1998','PK101','robotnik',2500); W zadaniu nie mona byo wykona polece poniewa ograniczenia si wykluczaly, bo uzyway nawzajem informacji ze swoich tabel. Nalezao instrukcje wykonas w transakcji I ustawic ograniczenia na deferred. Wwczas ograniczenia nie s sprawdzane do koca transakcji. Ponadto trzeba byo zmieni styl dla dat. Wczeniej naleao skasowa ograniczenia I stwoy je ponownie z opcj deferrable. alter table pracownicy drop constraint prac_fk; alter table pracownicy add constraint prac_fk foreign key(dzial) references dzialy(id_dzialu) on update cascade deferrable; //to samo dla ograniczenia dzial_fk //plik firma-dane.sql begin; set DateStyle to ISO,DMY; set constraints dzial_fk,prac_fk deferred; INSERT INTO dzialy VALUES ('PH101','Handlowy','Marki','77'); INSERT INTO dzialy VALUES ('PR202','Projektowy','Olecko','27'); commit;

Wykonajkilkaprzykadowychzapyta,wcelusprawdzeniazawartociposzczeglnychtabelwtym schemacie.

Zadanie3
Napiszzapytanie,ktre 1. zmieniwartokluczagwnegodziauzPH101naPH222.Czyzapytaniepowodujezmianyw innychtabelach?Dlaczego? updatedzialysetid_dzialu='PH222'whereid_dzialu='PH101'; wartozmieniasikaskadobojestustawionaopcjaonupdatecascade

2. zmieniwartokluczagwnegowtabelipracownicyz27na99.Czyzapytaniepowoduje zmianywinnychtabelach?Dlaczego? updatepracownicysetid_pracownika='99'whereid_pracownika='27'; uwagijakwyej

Zadanie4
Napiszzapytaniedziaajcenatabelachschematufirma,ktre: 1. Wywietlanazwisko,wiekorazrocznepoborypracownikaposortowanewgpoborworaz nazwiska(polepoborywtabelipracownicyokrelapoborymiesiczne). selectnazwisko,date_part('year',age(data_ur))aswiek,(12*pobory)as"rocznypobr"from pracownicy; 2. Wywietlanazwisko,imi,daturodzenia,stanowisko,dziaipoborypracownika,ktrypracuje nastanowiskurobotniklubanalitykizarabiawicejni2000miesicznie. selectnazwisko,imie,data_ur,dzial,poboryfrompracownicywhere(stanowisko='analityk'or stanowisko='robotnik')andpobory>2000; 3. Wywietanazwiskaiimionapracownikw,ktrzyzarabiajwicejnizarabiaAdamKowalik. Napiszzapytanienadwasposoby(samozczenieipodzapytanie). selectnazwisko,imiefrompracownicywherepobory>(selectpoboryfrompracownicywhereimie= 'Adam'andnazwisko='Kowalik'); selectp1.nazwisko,p1.imiefrompracownicyp1joinpracownicyp2onp2.nazwisko='Kowalik'and p2.imie='Adam'andp1.pobory>p2.pobory; 4. Podnosizarobkio10%nastanowiskurobotnik. updatepracownicysetpobory=1.1*poborywherestanowisko='robotnik'; 5. Obliczaredniezarobkiorazilopracownikwnaposzczeglnychstanowiskachz wyczeniemstanowiskkierownik. selectstanowisko,avg(pobory),count(id_pracownika)frompracownicywherestanowisko<> 'kierownik'groupbystanowisko;

Zadanie5
Napiszzapytanie,ktre: 1. wywietlalistklientw(nazwyimiasta)zWieliczki,SkawinyiKrzeszowic,daneposortowa wedugnazwymiejscowoci; selectnazwa,miastofromklienciwheremiastoin('Wieliczka','Skawina','Krzeszowice')orderby2; 2. wywietlalistklientwiodbiorcw(nazwyimiasta)zWieliczki,SkawinyiKrzeszowic,dane posortowawedugnazwymiejscowoci; (selectnazwa,miastofromklienciwheremiastoin('Wieliczka','Skawina','Krzeszowice')unionselect nazwa,miastofromodbiorcywheremiastoin('Wieliczka','Skawina','Krzeszowice'))orderby2; 3. wywietlalistklientw(nazwyimiasta)zmiejscowoci,zktrychpochodziconajmniej trzechklientwzarejestrowanychwbaziedanych; selectnazwa,miastofromklienciwheremiastoin(selectmiastofromkliencigroupbymiastohaving count(miasto)>=3)orderby2;

4. wywietlalistklientw(nazwyimiasta)zmiejscowoci,zktrychkliencizamawiali najdroszkompozycjdostpnwkwiaciarni. selectk.nazwa,k.miastofromklienciknaturaljoinzamowieniazjoinkompozycjekm using(idkompozycji)wherekm.cena=(selectmax(cena)fromkompozycje);

Zadanie6
Napiszzapytanie,ktre: 1. wywietlanazwkompozycjiiichceny,dlatrzechnajtaszychkompozycjidostpnychw kwiaciarni; selectnazwa,cenafromkompozycjeorderby2limit3; 2. wywietlanazwyicenykompozycjizamawianychprzezklientwzeSkawiny; selectdistinctkm.nazwa,km.cenafromklienciknaturaljoinzamowieniazjoinkompozycjekm using(idkompozycji)wherek.miasto='Skawina'; 3. wywietlanazwyicenykompozycjizamawianychprzezklientwbdcychfirmami; selectdistinctkm.nazwa,km.cenafromklienciknaturaljoinzamowieniazjoinkompozycjekm using(idkompozycji)wherek.regonisnotnull; 4. wywietlanazwyicenykompozycji,ktreniewystpujwtabelihistoria. selectnazwa,cenafromkompozycjewhereidkompozycjinotin(selectidkompozycjifromhistoria);

Zadanie7
Napiszzapytanie,ktre: 1. wywietlaliczbklientwzposzczeglnychmiastznajdujcychsiwbazie(cznieznazwami miast); selectmiasto,count(miasto)fromkliencigroupbymiasto; 2. wywietlaliczbklientwzposzczeglnychmiastznajdujcychsiwbazie(cznieznazwami miast),aletylkotychdlaktrychliczbaklientwjestwikszani10; selectmiasto,count(miasto)fromkliencigroupbymiastohavingcount(miasto)>10orderby2; 3. wywietlaliczbklientwznajdujcychsiwbazie,ktrzypodalinumernip; selectcount(nip)fromklienci; 4. wywietlaliczbklientw,ktrzyzamawialinajdroszkompozycjiliczbklientw,ktrzy zamawialinajtaszkompozycj. selectcount(*)fromkliencinaturaljoinzamowieniajoinkompozycjekusing(idkompozycji)where k.cena=(selectmax(cena)fromkompozycje)unionselectcount(*)fromkliencinaturaljoin zamowieniajoinkompozycjekusing(idkompozycji)wherek.cena=(selectmin(cena)from kompozycje);

Zadanie8
Napiszzapytanie,ktre: 1. wywietlacznwartowszystkichkompozycji,ktreczekajnadostarczenie(zostay zamwione); selectsum(cena)fromzamowienia; 2. wywietlarednicenkompozycjidostpnychwkwiaciarni(zdokadnocido2miejscpo przecinku); selectavg(cena)::numeric(7,2)fromkompozycje; 3. wywietlaredniwartodziennychzamwieczekajcychdorealizacji(zdokadnocido2 miejscpoprzecinku); selecttermin,avg(cena)::numeric(7,2)fromzamowieniagroupbytermin; 4. wywietlaliczbiwartozamwieczekajcychnazrealizowaniedlaposzczeglnych miejscowoci; selectk.miasto,count(*),sum(z.cena)fromzamowieniaznaturaljoinkliencikgroupbyk.miasto; 5. wywietlaidentyfikatorinazwtychkompozycji,ktrychaktualnystanniejestwikszyod minimumowicejni1; selectidkompozycji,cenafromkompozycjewherestan<=(selectmin(stan)fromkompozycje)+1; 6. wywietlaliczb,wartoiterminrealizacjizamwieczekajcychnazrealizowaniedla poszczeglnychdni; selecttermin,count(*),sum(cena)fromzamowieniagroupbytermin; 7. wywietlaredniwartozamwieniadlaposzczeglnychdni. selectavg(sumy)::numeric(7,2)from(selectsum(cena)assumyfromzamowieniagroupbytermin)as x;

Vous aimerez peut-être aussi