Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- INSERT INTO pracownicy VALUES(2307,'Balwierczak','Pawel','Q',667,7902,SYSDATE,800,NULL,20);
- #####
- INSERT INTO pracownicy VALUES(2307,'Balwierczak','Pawel','Q',667,7902,TO_DATE('18/07/12', 'YY/MM/DD'),800,NULL,20);
- ##################
- DODATKOWE
- zad.1
- UPDATE artykul SET cena=cena-10
- WHERE nazwa LIKE '%parasol%';
- zad.2
- SELECT a.nazwa, NVL(SUM(p.ilosc),0)
- FROM pozycja p
- right join artykul a ON p.id_artykulu=a.id_artykulu
- GROUP BY a.nazwa;
- zad.3
- UPDATE klienci k
- SET k.limit_kredytowy = k.limit_kredytowy +10*(SELECT COUNT(z.id_zamowienia) FROM zamowienia z
- join klienci k1 ON z.id_klienta = k1.id_klienta
- WHERE k1.id_klienta = k.id_klienta);
- zad.4 (wyświetlić pracowników bez podwładnych)
- SELECT * FROM pracownicy p
- WHERE p.id_pracownika NOT IN (
- SELECT p.id_szefa FROM pracownicy p);
- zad.5(nazwa wyrobu, cene i dochod laczny w poprzednim roku)
- SELECT wyroby.id_produktu, wyroby.opis, AVG(ceny.cena_cennikowa), SUM(wiersze_zamowien.wartosc) FROM zamowienia
- JOIN wiersze_zamowien ON zamowienia.id_zamowienia = wiersze_zamowien.id_zamowienia AND TO_CHAR(zamowienia.data_zamowienia, 'YYYY') = TO_CHAR(ADD_MONTHS('1991-01-01', -12), 'YYYY')
- RIGHT JOIN wyroby ON wyroby.id_produktu = wiersze_zamowien.id_produktu
- JOIN ceny ON ceny.id_produktu = wyroby.id_produktu
- GROUP BY wyroby.id_produktu, wyroby.opis;
- zad.5
- UPDATE pracownicy
- SET pensja = pensja*0.95
- WHERE id_pracownika IN
- (SELECT p.id_pracownika FROM pracownicy p
- join klienci k ON p.id_pracownika = k.id_pracownika
- join zamowienia z ON z.id_klienta = k.id_klienta
- WHERE EXTRACT(MONTH FROM z.data_zamowienia) = EXTRACT(MONTH FROM ADD_MONTHS(SYSDATE,-1))
- AND EXTRACT(YEAR FROM z.data_zamowienia) = EXTRACT(YEAR FROM ADD_MONTHS(SYSDATE,-1))
- GROUP BY p.id_pracownika HAVING SUM(z.wartosc) < 500);
- ####################
- STARE
- ZESTAW 1
- 1. Wstaw nowy rekord DO pracowników, a w nim swoje imię i nazwisko, dzisiejszą datę, a resztę według uznania.
- INSERT INTO pracownicy
- VALUES (1234,'NAZWISKO','IMIE','Q',667,7902,TO_DATE('2016/07/05', 'YYYY/MM/DD'),800,NULL,20);
- 2. Pokaż wszystkich pracowników, którzy mają podwładnych
- SELECT id_pracownika, nazwisko, imie
- FROM pracownicy
- WHERE id_pracownika IN (
- SELECT id_szefa
- FROM pracownicy
- WHERE id_szefa IS NOT NULL
- );
- 3. Pokaż średnie ceny dla wyrobów, nawet dla tych, które nie mają ceny.
- SELECT w.opis, AVG(c.cena_cennikowa) AS "Srednia cena cennikowa", AVG (c.cena_minimalna) AS "średnia cena minimalna"
- FROM wyroby w
- left join ceny c ON c.id_produktu=w.id_produktu
- GROUP BY w.opis
- ORDER BY w.opis
- 4. Podwoić limit kredytowy klientom, którzy w ciągu ostatniego miesiąca dokonali zamówień. (jakoś tak)
- UPDATE klienci
- SET limit_kredytowy = limit_kredytowy*2
- WHERE id_klienta IN
- (
- SELECT id_klienta
- FROM zamowienia
- WHERE data_zamowienia > '90/10/19'
- );
- ZESTAW 2
- 1. Dodać rekord ze swoimi danymi (imię, nazwisko a reszta dowolna)
- INSERT INTO pracownicy
- VALUES (1234,'NAZWISKO','IMIE','Q',667,7902,TO_DATE('2016/07/05', 'YYYY/MM/DD'),800,NULL,20);
- 2. Wyświetlić zamówienia dla klientów nie z bostonu
- SELECT k.id_klienta, k.miasto, z.id_zamowienia
- FROM klienci k
- LEFT JOIN zamowienia z ON k.id_klienta = z.id_klienta
- WHERE k.miasto != 'BOSTON';
- 3. Wyświetlić ilość pracowników na poszczególnym etacie (+ te co nie ma żadnego pracownika)
- SELECT COUNT(p.id_pracownika) AS "ilosc pracownikow" , e.etat
- FROM pracownicy p
- left join etaty e ON p.id_etatu = e.id_etatu
- GROUP BY e.etat
- 4. Zwiększyć o 10% limit kredytowy klientom, którzy mają MIN. 3 zamówienia
- UPDATE klienci
- SET limit_kredytowy = limit_kredytowy*0.1 + limit_kredytowy
- WHERE id_klienta IN
- (
- SELECT k.id_klienta
- FROM klienci k, zamowienia z
- WHERE z.id_klienta = k.id_klienta
- GROUP BY k.id_klienta
- HAVING COUNT(k.id_klienta) >= 3
- );
- ZESTAW 3
- 1. INSERT
- INSERT INTO pracownicy
- VALUES (1234,'NAZWISKO','IMIE','Q',667,7902,TO_DATE('2016/07/05', 'YYYY/MM/DD'),800,NULL,20);
- 2. wskaż wydziały, które posiadają tylko jednego pracownika
- SELECT w.nazwa, COUNT(p.id_wydzialu) AS "ilosc pracownikow"
- FROM pracownicy p, wydzialy w
- WHERE p.id_wydzialu=w.id_wydzialu
- GROUP BY w.nazwa
- HAVING COUNT(p.id_wydzialu) = 1
- 3. wskaż pracowników, który mają największe obroty (? coś takiego)
- SELECT p.id_pracownika, p.imie, p.nazwisko, SUM(z.wartosc) AS wartosc
- FROM pracownicy p
- join klienci k ON p.id_pracownika= k.id_pracownika
- join zamowienia z ON z.ID_KLIENTA = k.id_klienta
- GROUP BY p.id_pracownika, p.imie, p.nazwisko
- ORDER BY dupa DESC;
- 4. Podnieść płące pracowników, którzy mają więcej niż 2 klientów (nie pamiętam o ile)
- UPDATE pracownicy
- SET pensja = pensja + 300
- WHERE id_pracownika IN
- (
- SELECT p.id_pracownika
- FROM pracownicy p, klienci k
- WHERE k.id_pracownika=p.id_pracownika
- GROUP BY p.id_pracownika
- HAVING COUNT(k.id_pracownika) > 2
- );
- ZESTAW 4
- 1. INSERT
- INSERT INTO pracownicy
- VALUES (1234,'NAZWISKO','IMIE','Q',667,7902,TO_DATE('2016/07/05', 'YYYY/MM/DD'),800,NULL,20);
- 2. Wyświetlić MAX i MIN zamówień dla poszczególnych klientow.
- SELECT k.nazwa, MIN(z.wartosc) AS "MIN", MAX(Z.WARTOSC) AS "MAX"
- FROM ZAMOWIENIA Z, KLIENCI K
- WHERE k.id_klienta=Z.id_klienta
- GROUP BY K.NAZWA
- 3. Wyświetlić miasto(chyba), nazwę klienta, ilość sprzedaży i średnią sprzedaży, coś w tym stylu
- SELECT k.miasto, K.NAZWA, COUNT(Z.ID_ZAMOWIENIA), AVG(Z.WARTOSC)
- FROM ZAMOWIENIA Z, KLIENCI K
- WHERE k.id_klienta=Z.id_klienta
- GROUP BY K.MIASTO, K.NAZWA
- 4. Zwiększyć pensje pracowników w dziale "SALES" o 1%, jak dobrze pamiętam
- UPDATE pracownicy
- SET pensja = pensja + pensja*0.01
- WHERE id_pracownika IN
- (
- SELECT p.id_pracownika
- FROM pracownicy p, wydzialy w
- WHERE p.id_wydzialu = w.id_wydzialu
- AND w.nazwa = 'SALES'
- );
- ########################
- NOWE
- --grupa A
- INSERT INTO pracownicy VALUES(40,'JANICKI','KRZYSZTOF','A',667,7902,SYSDATE,2000,200,20);
- SELECT s.id_siedziby,s.region,COUNT(w.id_wydzialu) FROM siedziby s
- join wydzialy w ON s.id_siedziby = w.id_siedziby
- GROUP BY s.id_siedziby,s.region HAVING COUNT (w.id_wydzialu)<=1;
- SELECT w.id_produktu,w.opis,c.cena_cennikowa,SUM(wz.wartosc) FROM wyroby w
- left join ceny c ON w.id_produktu = c.id_produktu
- left join wiersze_zamowien wz ON w.id_produktu = wz.id_produktu
- left join zamowienia z ON wz.ID_ZAMOWIENIA = z.id_zamowienia
- GROUP BY w.id_produktu,w.opis,c.cena_cennikowa;
- UPDATE pracownicy
- SET pensja = pensja*0.95
- WHERE id_pracownika IN (
- SELECT p.id_pracownika FROM pracownicy p
- join klienci k ON p.id_pracownika = k.id_pracownika
- join zamowienia z ON k.id_klienta = z.ID_KLIENTA
- WHERE z.data_zamowienia <TO_DATE('1990/02/01','YY/MM/DD')
- AND z.data_zamowienia >TO_DATE('1990/01/01','YY/MM/DD')
- GROUP BY p.id_pracownika HAVING SUM(z.wartosc) < 500);
- --grupa B
- INSERT INTO pracownicy VALUES (41,'JANICKI','KRZYSZTOF','A',667,7902,SYSDATE,2000,200,20);
- SELECT z.id_zamowienia,z.data_zamowienia,z.id_klienta FROM zamowienia z
- join wiersze_zamowien wz ON z.id_zamowienia = wz.id_zamowienia
- GROUP BY z.id_zamowienia,z.data_zamowienia,z.id_klienta HAVING COUNT(wz.id_zamowienia) = 1;
- SELECT * FROM (SELECT w.id_produktu,w.opis FROM wyroby w
- join wiersze_zamowien wz ON w.id_produktu = wz.id_produktu
- GROUP BY w.id_produktu,w.opis
- ORDER BY COUNT(wz.id_produktu) DESC)
- WHERE ROWNUM <=3;
- UPDATE pracownicy
- SET prowizja = prowizja *1.02
- WHERE
- id_pracownika IN (SELECT p.id_pracownika FROM pracownicy p
- join etaty e ON p.id_etatu = e.id_etatu
- WHERE e.etat ='SALESPERSON')
- AND
- id_pracownika IN (SELECT p.id_szefa FROM pracownicy p);
- --grupa C
- INSERT INTO pracownicy VALUES (42,'JANICKI','KRZYSZTOF','A',667,7902,SYSDATE,2000,200,20);
- SELECT p.id_pracownika FROM pracownicy p
- MINUS
- SELECT p1.id_szefa FROM pracownicy p1;
- --mysle ze to wyzej wystarczy ale mozna to rozbudowac do postaci
- SELECT * FROM pracownicy
- WHERE id_pracownika IN (
- SELECT p.id_pracownika FROM pracownicy p
- MINUS
- SELECT p1.id_szefa FROM pracownicy p1);
- SELECT k.nazwa,COUNT(z.id_zamowienia),AVG(z.wartosc) FROM klienci k
- left join zamowienia z ON k.id_klienta = z.id_klienta
- GROUP BY k.miasto,k.nazwa;
- UPDATE pracownicy
- SET prowizja = prowizja * 1.01
- WHERE id_pracownika IN(
- SELECT p.id_pracownika FROM pracownicy p
- join wydzialy w ON p.id_wydzialu = w.ID_wydzialu
- WHERE w.nazwa != 'SALES');
- --grupa D
- INSERT INTO pracownicy VALUES(43,'JANICKI','KRZYSZTOF','A',667,7902,SYSDATE,2000,200,20);
- SELECT w.id_wydzialu,w.nazwa FROM wydzialy w
- left join pracownicy p ON p.id_wydzialu = w.ID_WYDZIALU
- GROUP BY w.id_wydzialu,w.nazwa HAVING COUNT(p.id_wydzialu) < 1;
- SELECT * FROM (SELECT p.nazwisko,p.imie,w.nazwa,SUM(z.wartosc) AS obroty FROM pracownicy p
- join etaty e ON p.id_etatu = e.id_etatu
- join wydzialy w ON p.id_wydzialu = w.id_wydzialu
- join klienci k ON p.id_pracownika = k.id_pracownika
- join zamowienia z ON k.id_klienta = z.id_klienta
- WHERE e.etat = 'SALESPERSON'
- GROUP BY p.nazwisko,p.imie,w.nazwa
- ORDER BY SUM(z.wartosc))
- WHERE ROWNUM <=1;
- UPDATE pracownicy
- SET pensja = pensja * 1.1
- WHERE id_pracownika IN (SELECT p.id_pracownika FROM pracownicy p
- join klienci k ON p.id_pracownika = k.id_pracownika
- join etaty e ON p.id_etatu = e.id_etatu
- WHERE e.etat = 'SALESPERSON'
- GROUP BY p.id_pracownika HAVING COUNT(k.id_klienta)>2);
- --grupa E
- INSERT INTO klienci VALUES (44,'KRZYSZTOF JANICKI',NULL,NULL,NULL,NULL,NULL,NULL,7902,10,NULL);
- INSERT INTO klienci(id_klienta,nazwa,id_pracownika,limit_kredytowy) VALUES (45,'KRZYSZTOF JANICKI',7902,10);
- SELECT * FROM (
- SELECT p.id_pracownika,p.imie,p.nazwisko,p.pensja FROM pracownicy p
- ORDER BY p.pensja DESC)
- WHERE ROWNUM <=3;
- SELECT * FROM(
- SELECT p.nazwisko,p.imie,w.nazwa,SUM(z.wartosc) AS obroty FROM pracownicy p
- join wydzialy w ON p.id_wydzialu = w.id_wydzialu
- join klienci k ON p.id_pracownika = k.id_pracownika
- join zamowienia z ON k.id_klienta = z.id_klienta
- join etaty e ON p.id_etatu = e.id_etatu
- WHERE e.etat = 'SALESPERSON'
- GROUP BY p.nazwisko,p.imie,w.nazwa
- ORDER BY SUM(z.wartosc) DESC)
- WHERE ROWNUM <=1;
- UPDATE pracownicy
- SET prowizja = prowizja * 1.02
- WHERE id_pracownika IN(
- SELECT p.id_pracownika FROM pracownicy p
- join klienci k ON p.id_pracownika = k.id_pracownika
- GROUP BY p.id_pracownika HAVING COUNT(k.id_klienta) >=1);
- --grupa F
- INSERT INTO pracownicy VALUES (46,'JANICKI','KRZYSZTOF','A',667,7902,SYSDATE,2000,200,20);
- SELECT z.id_zamowienia,z.data_zamowienia FROM zamowienia z
- join klienci k ON z.id_klienta = k.id_klienta
- WHERE k.miasto = 'BOSTON';
- SELECT e.id_etatu,e.etat,AVG(p.pensja) FROM etaty e
- left join pracownicy p ON e.id_etatu = p.id_etatu
- GROUP BY e.id_etatu,e.etat;
- UPDATE klienci k
- SET k.limit_kredytowy = k.limit_kredytowy +10*(SELECT COUNT(z.id_zamowienia) FROM zamowienia z
- join klienci k1 ON z.id_klienta = k1.id_klienta
- WHERE k1.id_klienta = k.id_klienta);
- #########ŁOBO#######
- --insert into PRACOWNICY values (7666, 'BIZOŃ', 'ŁUKASZ','J',671,null,sysdate,2000,null,20)
- --select s.region from siedziby s join wydzialy w on w.id_siedziby = s.ID_SIEDZIBY group by s.REGION having count(w.id_wydzialu) = 2
- --select z.id_zamowienia from zamowienia z
- --join wiersze_zamowien wz on z.id_zamowienia = wz.id_zamowienia
- --group by z.id_zamowienia having count(wz.id_wiersza_zam) = 1
- --select id_pracownika from pracownicy
- --minus
- --select id_pracownika from pracownicy where id_pracownika in(select id_szefa from pracownicy)
- --select w.id_wydzialu from wydzialy w left join pracownicy p
- --on p.ID_WYDZIALU = w.id_wydzialu
- --group by w.id_wydzialu having count(p.id_wydzialu)=0
- --select id_pracownika, pensja from
- --(select id_pracownika ,pensja from pracownicy order by pensja)
- --where rownum<4
- -- select z.id_zamowienia, z.data_zamowienia from zamowienia z join klienci k
- --on z.id_klienta = k.id_klienta where k.miasto = 'BOSTON'
- --3
- --select id_produktu, opis, il_zam from
- --(select w.id_produktu, w.opis, sum(wz.ilosc) as il_zam from wyroby w join wiersze_zamowien wz on w.id_produktu=wz.ID_PRODUKTU
- --group by w.ID_PRODUKTU, w.opis order by sum(wz.ilosc) desc) where rownum<=3;
- --select k.miasto, avg(z.wartosc), count(z.id_zamowienia)
- --from klienci k left join zamowienia z on k.id_klienta = z.id_klienta
- ----group by k.miasto
- --
- --select * from (select p.imie, p.nazwisko, w.nazwa, sum(z.wartosc) from pracownicy p
- --join wydzialy w on p.id_wydzialu = w.id_wydzialu
- --join klienci k on p.id_pracownika = k.id_pracownika
- --join zamowienia z on z.id_klienta = k.id_klienta
- --group by p.imie, p.nazwisko, w.nazwa order by sum(z.wartosc))
- --where rownum = 1
- --
- --select e.etat, avg(p.pensja) from etaty e
- --left join pracownicy p on p.id_etatu= e.id_etatu
- --group by e.etat;
- ----
- --update pracownicy
- --set pensja = pensja*0.95
- --where id_pracownika in
- --(select p.id_pracownika from pracownicy p
- --join klienci k on p.id_pracownika = k.id_pracownika
- --join zamowienia z on z.id_klienta = k.id_klienta
- --where extract(month from z.data_zamowienia) = extract(month from add_months(sysdate,-1))
- --and extract(year from z.data_zamowienia) = extract(year from add_months(sysdate,-1))
- --group by p.id_pracownika having sum(z.wartosc) < 500)
- --
- --update pracownicy
- --set prowizja = prowizja * 1.02
- --where id_pracownika in
- --(select id_szefa from pracownicy)
- --
- --update pracownicy
- --set prowizja = prowizja * 1.01
- --where id_pracownika in
- --(select p.id_pracownika from pracownicy p
- --join wydzialy w on p.id_wydzialu = w.id_wydzialu
- --where w.nazwa!='SALES')
- --update pracownicy
- --set pensja = pensja*1.1
- --where id_pracownika in
- --(select p.id_pracownika from pracownicy p
- --join klienci k on p.id_pracownika = k.id_pracownika
- --group by p.id_pracownika having count(k.id_klienta)>2)
- --update klienci k
- --set limit_kredytowy = limit_kredytowy + 10*(select count(z.id_zamowienia)
- --from zamowienia z join klienci k1 on z.id_klienta=k1.id_klienta
- --where k.id_klienta=k1.id_klienta)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement