bd 08

background image

BAZY DANYCH

Dr inż. Wikarek Jarosław

Katedra Systemów Sterowania i Zarządzania

E-MAIL: j.wikarek@tu.kielce.pl

1

Język SQL

PRZYKŁADY

background image

Bazy danych

Struktura systemu

Pracownicy

etaty

## id_prac

VARCHAR2(3)

## etat

VARCHAR2(20)

nazwisko

VARCHAR2(20)

plac_min

NUMERIC(6,2)

2

## id_prac

VARCHAR2(3)

## etat

VARCHAR2(20)

nazwisko

VARCHAR2(20)

plac_min

NUMERIC(6,2)

# etat

VARCHAR2(20)

plac_max NUMERIC(6,2)

# id_szefa

VARCHAR2(3)

zatrudniony DATE

zespoly

placa_pod NUMERIC(6,2)

## id_zesp

VARCHAR2(3)

placa_dod NUMERIC(6,2)

nazwa

VARCHAR2(20)

# id_zesp

VARCHAR2(3)

adres

VARCHAR2(60)

background image

Bazy danych

Przykładowe dane - pracownicy

3

background image

Bazy danych

Przykładowe dane - zespoły

4

background image

Bazy danych

Przykładowe dane - etaty

5

background image

Bazy danych

NAPISAĆ NASTĘPUJĄCE ZAPYTANIA

6

NAPISAĆ NASTĘPUJĄCE ZAPYTANIA

background image

Bazy danych

Zapytanie 1

Wyświetl: nazwiska, etaty, numery zespołów i

7

Wyświetl: nazwiska, etaty, numery zespołów i
nazwy zespołów wszystkich pracowników.

background image

Bazy danych

Zapytanie 1

8

select p.nazwisko, p.etat, p.id_zesp, z.nazwa

from pracownicy p, zespoly z
where p.id_zesp=z.id_zesp

background image

Bazy danych

Zapytanie 2

Wyświetl wszystkich pracowników z ul. NISKA 10.

9

Wyświetl wszystkich pracowników z ul. NISKA 10.
Uporządkuj wyniki według nazwisk pracowników.

background image

Bazy danych

Zapytanie 2 (rozwiązanie 1)

select p.nazwisko

from pracownicy p, zespoly z

10

from pracownicy p, zespoly z
where

p.id_zesp = z.id_zesp and
adres = ‘NISKA 10'

order by nazwisko

background image

Bazy danych

Zapytanie 2 (rozwiązanie 2)

select nazwisko

from pracownicy

11

from pracownicy
where id_zesp in

( select id_zesp

from zespoly
where adres = ‘NISKA 10‘

)

order by nazwisko

background image

Bazy danych

Zapytanie 3

Wyświetl nazwiska, miejsca pracy oraz nazwy

12

Wyświetl nazwiska, miejsca pracy oraz nazwy
zespołów tych pracowników, których miesięczna
pensja przekracza 400.

background image

Bazy danych

Zapytanie 3

select p.nazwisko, z.adres, z.nazwa

13

select p.nazwisko, z.adres, z.nazwa

from pracownicy p, zespoly z
where

p.id_zesp=z.id_zesp and
p.placa_pod >400

background image

Bazy danych

Zapytanie 4

Dla każdego pracownika wyświetl jego kategorię

14

Dla każdego pracownika wyświetl jego kategorię
płacową i widełki płacowe w jakich mieści się
pensja pracownika.

background image

Bazy danych

Zapytanie 4

15

select

p.nazwisko, p.etat, e.plac_min,
p.placa_pod, e.plac_max

from

pracownicy p, etaty e

where p.etat=e.etat

background image

Bazy danych

Zapytanie 5

Wyświetl nazwiska i etaty pracowników, których

16

Wyświetl nazwiska i etaty pracowników, których
rzeczywiste

zarobki

odpowiadają

widełkom

płacowym przewidzianym dla sekretarek.

background image

Bazy danych

Zapytanie 5

select p.nazwisko, p.etat

17

select p.nazwisko, p.etat

from pracownicy p
where placa_pod between

(select plac_min from etaty where etat='SEKRETARKA')

and

(select plac_max from etaty where etat='SEKRETARKA')

background image

Bazy danych

Zapytanie 6

Wyświetl nazwiska, etaty, wynagrodzenia, kategorie

18

Wyświetl nazwiska, etaty, wynagrodzenia, kategorie
płacowe

i

nazwy

zespołów

pracowników

nie

będących asystentami. Wyniki uszereguj zgodnie z
malejącym wynagrodzeniem.

background image

Bazy danych

Zapytanie 6

select

p.nazwisko, p.etat, p.placa_pod,

19

select

p.nazwisko, p.etat, p.placa_pod,
e.plac_min, e.plac_max, z.nazwa

from

pracownicy p, etaty e, zespoly z

where

p.etat=e.etat and p.id_zesp=z.id_zesp
and p.etat <>'ASYSTENT'

order by p.placa_pod desc

background image

Bazy danych

Zapytanie 7

Wyświetl informacje o w układzie: nazwisko, etat,
placa_pod, plac_min, plac_max, nazwa zespołu

20

placa_pod, plac_min, plac_max, nazwa zespołu
tych pracownikach, którzy są asystentami lub
adiunktami i których roczne dochody przekraczają
5500. Roczne dochody to dwunastokrotność płacy
podstawowej powiększona o ewentualną płacę
dodatkową. Dane posortuj malejąco według pensji
podstawowej.

background image

Bazy danych

Zapytanie 7

select

p.nazwisko, p.etat, p.placa_pod,
e.plac_min, e.plac_max, z.nazwa

21

e.plac_min, e.plac_max, z.nazwa

from

pracownicy p, etaty e, zespoly z

where p.etat=e.etat and p.id_zesp=z.id_zesp
and ( p.etat ='ASYSTENT' or p.etat ='ADIUNKT')
and (p.placa_pod*12 + nvl(p.placa_dod,0))

>5500

order by p.placa_pod desc

background image

Bazy danych

Zapytanie 8

Wyświetl nazwiska i numery pracowników wraz z

22

Wyświetl nazwiska i numery pracowników wraz z
numerami i nazwiskami ich szefów.

background image

Bazy danych

Zapytanie 8

select

p.id_prac as nr_pracownika,

23

select

p.id_prac as nr_pracownika,
p.nazwisko as naz_pracownika,
t.id_prac as nr_szefa,
t.nazwisko as naz_szefa

from pracownicy p, pracownicy t
where p.id_szefa=t.id_prac

background image

Bazy danych

Zapytanie 9

Zmodyfikuj powyższe zlecenie w ten sposób, aby

24

Zmodyfikuj powyższe zlecenie w ten sposób, aby
było

możliwe

wyświetlenie

pracownika

Asinski

(który nie ma szefa).

background image

Bazy danych

Zapytanie 9

select

p.id_prac as nr_pracownika,

25

select

p.id_prac as nr_pracownika,
p.nazwisko as naz_pracownika,
t.id_prac as nr_szefa,
t.nazwisko as naz_szefa

from pracownicy p, pracownicy t
where p.id_szefa=t.id_prac(+)

background image

Bazy danych

Zapytanie 10

Dla każdego zespołu wyświetl liczbę zatrudnionych

26

Dla każdego zespołu wyświetl liczbę zatrudnionych
w nim pracowników i ich średnią płacę.

background image

Bazy danych

Zapytanie 10

select

id_zesp,count(*),

27

select

id_zesp,count(*),
round(avg(nvl(placa_pod,0)),2)

from

pracownicy

group by id_zesp

background image

Bazy danych

Zapytanie 11

Dla

każdego

pracownika

posiadającego

28

Dla

każdego

pracownika

posiadającego

podwładnych wyświetl ich liczbę. Wyniki posortuj
zgodnie z malejącą liczbą podwładnych.

background image

Bazy danych

Zapytanie 11 – źle

select

id_szefa, count(*) as ile

29

select

id_szefa, count(*) as ile

from pracownicy
group by id_szefa
order by ile desc

background image

Bazy danych

Zapytanie 11

select id_szefa, count(*) as ile

30

select id_szefa, count(*) as ile

from pracownicy
where id_szefa is not null
group by id_szefa
order by ile desc

background image

Bazy danych

Zapytanie 12

Wyświetl

nazwiska

i

daty

zatrudnienia

31

Wyświetl

nazwiska

i

daty

zatrudnienia

pracowników, którzy zostali zatrudnieni nie później
niż 10 lat (3650 dni) po swoich przełożonych.

background image

Bazy danych

Zapytanie 12

select p.nazwisko,

32

select p.nazwisko,

to_char(p.zatrudniony,'dd-mm-yyyy') as od_kiedy

from pracownicy p,pracownicy t
where

p.id_szefa=t.id_prac and
p.zatrudniony-t.zatrudniony <3650

background image

Bazy danych

Zapytanie 13

Wyświetl

nazwy

etatów,

na

które

przyjęto

33

Wyświetl

nazwy

etatów,

na

które

przyjęto

pracowników zarówno w 1992 jak i 1993 roku.

background image

Bazy danych

Zapytanie 13

select distinct etat

34

select distinct etat

from pracownicy
where

to_char(zatrudniony,'yy')='92' or
to_char(zatrudniony,'yy')='93'

background image

Bazy danych

Zapytanie 14

Wyświetl

numer

zespołu,

który

nie

zatrudnia

35

Wyświetl

numer

zespołu,

który

nie

zatrudnia

żadnych pracowników.

background image

Bazy danych

Zapytanie 14

select id_zesp

36

select id_zesp

from zespoly
where id_zesp not in

(select id_zesp from pracownicy)

background image

Bazy danych

Zapytanie 15

Wyświetl nazwiska i etaty pracowników pracujących

37

Wyświetl nazwiska i etaty pracowników pracujących
w tym samym zespole co pracownik o nazwisku
Csinski.

background image

Bazy danych

Zapytanie 15

select nazwisko, etat

38

select nazwisko, etat

from pracownicy
where id_zesp=

(select id_zesp

from pracownicy
where nazwisko=‘Csinski')

background image

Bazy danych

Zapytanie 15

Wyświetl

najdłużej

pracujących

pracowników

39

Wyświetl

najdłużej

pracujących

pracowników

każdego zespołu. Uszereguj wyniki zgodnie z
kolejnością zatrudnienia.

background image

Bazy danych

Zapytanie 15

select id_prac, id_zesp,

to_char(zatrudniony,'dd-mm-yyyy') od_kiedy

40

to_char(zatrudniony,'dd-mm-yyyy') od_kiedy

from pracownicy
where (zatrudniony) in

(

select max(zatrudniony) from pracownicy

group by id_zesp)

order by od_kiedy

DLACZEGO ZŁE ???

background image

Bazy danych

Zapytanie 15

select id_prac, id_zesp,

to_char(zatrudniony,'dd-mm-yyyy') od_kiedy

41

to_char(zatrudniony,'dd-mm-yyyy') od_kiedy

from pracownicy
where (zatrudniony, id_zesp) in

(select max(zatrudniony), id_zesp

from pracownicy group by id_zesp)

order by od_kiedy

DLACZEGO ŹLE POSORTOWANE ???

background image

Bazy danych

Zapytanie 16

Wyświetl

nazwiska

pracowników

zarabiających

42

Wyświetl

nazwiska

pracowników

zarabiających

więcej niż średnia pensja dla ich etatu.

background image

Bazy danych

Zapytanie 16

select nazwisko

43

select nazwisko

from pracownicy p,

(select round(avg(placa_pod),2) kwota, etat

from pracownicy
group by etat)

t

where

p.etat=t.etat and
placa_pod >kwota

background image

Bazy danych

Zapytanie 17

Wyświetl nazwiska i pensje pracowników którzy

44

Wyświetl nazwiska i pensje pracowników którzy
zarabiają co najmniej 75% pensji swojego szefa.

background image

Bazy danych

Zapytanie 17

select p.nazwisko, p.placa_pod

45

select p.nazwisko, p.placa_pod

from pracownicy p, pracownicy t

where p.id_szefa=t.id_prac and

p.placa_pod >0.75*t.placa_pod

background image

Bazy danych

Zapytanie 18

Wyświetl

numer

zespołu

wypłacającego

46

Wyświetl

numer

zespołu

wypłacającego

miesięcznie

swoim

pracownikom

najwięcej

pieniędzy.

background image

Bazy danych

Zapytanie 18

select numer from

(select id_zesp numer, sum(placa_pod) kw

47

(select id_zesp numer, sum(placa_pod) kw

from pracownicy group by id_zesp)

t1,

(select max(kw_zesp) kw_max

from

(select sum(placa_pod) kw_zesp

from pracownicy group by id_zesp)

)

t2

where t1.kw=t2.kw_max

background image

Bazy danych

Zapytanie 19

Wyświetl dla każdego roku liczbę zatrudnionych w

48

Wyświetl dla każdego roku liczbę zatrudnionych w
nim pracowników. Wynik uporządkuj zgodnie z
liczbą zatrudnionych.

background image

Bazy danych

Zapytanie 19

select count(*) liczba, zatrudniony rok

49

select count(*) liczba, zatrudniony rok

from pracownicy
group by zatrudniony

Dlaczego złe ???

background image

Bazy danych

Zapytanie 19

select lata, count (*) ilu_prac

50

select lata, count (*) ilu_prac

from (

select to_char(zatrudniony,'yyyy') lata
from pracownicy

)

group by lata
order by ilu_prac

background image

Bazy danych

Zapytanie 20

Zmodyfikuj powyższe zapytanie w ten sposób, aby

51

Zmodyfikuj powyższe zapytanie w ten sposób, aby
wyświetlać tylko rok, w którym przyjęto najwięcej
pracowników.

background image

Bazy danych

Zapytanie 20

select lata from

( select lata, count (*) ilu_prac from

(select to_char(zatrudniony,'yyyy') lata from pracownicy)

52

(select to_char(zatrudniony,'yyyy') lata from pracownicy)

group by lata

)

where ilu_prac=

( select max (ilu_prac) from

(select lata, count (*) ilu_prac from

(select to_char(zatrudniony,'yyyy') lata from pracownicy )

group by lata)

)

background image

Bazy danych

Zapytanie 21

Wyświetl nazwiska pracowników, którzy zarabiają

53

Wyświetl nazwiska pracowników, którzy zarabiają
mniej niż średnia płaca dla ich etatu.

background image

Bazy danych

Zapytanie 21

select nazwisko from pracownicy p,

54

select nazwisko from pracownicy p,

(select etat, round(avg(placa_pod),2) srednia

from pracownicy group by etat)

t

where p.etat=t.etat and p.placa_pod<srednia
order by nazwisko

background image

Bazy danych

Zapytanie 21

Wyświetl

nazwiska

profesorów

i

liczbę

ich

55

Wyświetl

nazwiska

profesorów

i

liczbę

ich

podwładnych.

Wyświetl

tylko

profesorów

zatrudnionych na Piotrowie.

background image

Bazy danych

Zapytanie 21

select nazwisko, liczba_prac from

(select id_szefa,count(*) liczba_prac from

56

(select id_szefa,count(*) liczba_prac from

pracownicy where id_szefa in

( select id_prac from pracownicy where

etat=‘PROFESOR‘ )

group by id_szefa)

t1,

pracownicy t2
where t1.id_szefa=t2.id_prac

Co jest źle ???

background image

Bazy danych

Zapytanie 21

select nazwisko, liczba_prac from

(select id_szefa,count(*) liczba_prac from

57

(select id_szefa,count(*) liczba_prac from

pracownicy where id_szefa in

( select id_prac from pracownicy where

etat=‘PROFESOR‘ )

group by id_szefa)

t1,

pracownicy t2
where t1.id_szefa(+)=t2.id_prac

Jeszcze gorzej

background image

Bazy danych

Zapytanie 21

select nazwisko, liczba_prac from

(select id_szefa,count(*) liczba_prac from

58

pracownicy where id_szefa in

( select id_prac from pracownicy where

etat=‘PROFESOR‘ )

group by id_szefa)

t1,

pracownicy t2
where t1.id_szefa(+)=t2.id_prac AND
t2.etat='PROFESOR'

background image

Bazy danych

Zapytanie 22

Dla każdego profesora wyświetl jego nazwisko,

59

Dla każdego profesora wyświetl jego nazwisko,
średnią płacą w jego zespole i największą płacę w
zespole.

background image

Bazy danych

Zapytanie 22

select nazwisko, plac_max, plac_sre

from pracownicy p,

60

(select id_szefa szef , round(max(placa_pod),2) plac_max,

round(avg(placa_pod),2) plac_sre

from pracownicy where id_szefa in

(select id_prac from pracownicy where etat='profesor' )

group by id_szefa)

t

where p.id_prac=t.szef

A gdzie jeden profesor ????

background image

Bazy danych

Zapytanie 22

select nazwisko, plac_max, plac_sre

from pracownicy p,

61

(select id_szefa szef , round(max(placa_pod),2) plac_max,

round(avg(placa_pod),2) plac_sre

from pracownicy where id_szefa in

(select id_prac from pracownicy where etat='profesor' )

group by id_szefa)

t

where p.id_prac=t.szef(+) AND p.etat='PROFESOR'

background image

Bazy danych

Zapytanie 23

Wyświetl nazwiska tych profesorów, którzy wśród

62

Wyświetl nazwiska tych profesorów, którzy wśród
swoich podwładnych nie mają żadnych stażystów.

background image

Bazy danych

Zapytanie 23

select nazwisko from pracownicy p,

(select distinct id_szefa from pracownicy

63

(select distinct id_szefa from pracownicy

where id_szefa not in

( select id_szefa from pracownicy

where etat='stazysta' )

) t

where p.id_prac =t.id_szefa and etat='profesor‘

I znów brakuje jednego profesora

background image

Bazy danych

Zapytanie 23

select nazwisko from pracownicy p ,

(select distinct t.szef from pracownicy p,

64

(select distinct t.szef from pracownicy p,

(select id_prac szef from pracownicy where

etat='profesor')

t

where p.id_szefa(+)=t.szef and t.szef not in

(

select id_szefa from pracownicy where

etat=‘STAZYSTA'

)

) t1 where p.id_prac=t1.szef

background image

Bazy danych

HAVING

65

HAVING pozwala określić, które ze zgrupowanych rekordów mają być
wyświetlone.

Po zgrupowaniu rekordów klauzulą GROUP BY

pokazywane są te

rekordy, które spełniają kryteria klauzuli HAVING.

background image

Bazy danych

Składnia instrukcji SQL

SELECT lista_pól

FROM wyrażenie_tabelowe

66

WHERE kryteria
GROUP BY pola_grupowania
HAVING kryteria_grupowania

background image

Bazy danych

Składnia instrukcji SQL

Kryteria_grupowania
Określają, które ze zgrupowanych rekordów mają zostać pokazane
Lista_pól

67

Lista_pól
Nazwy pól z danymi, które mają być pobrane

Pola_grupowania
Nazwy pól użytych do zgrupowania rekordów. Kolejność tych nazw
określa ich znaczenie.

Wyrażenie_tabelowe
Nazwa tabeli lub tabel zawierających pobierane dane

background image

Bazy danych

Where - Having

Klauzula HAVING działa podobnie do WHERE i jest
używana do wybrania tylko grup spełniających warunek
przy HAVING.

68

przy HAVING.

Właściwie WHERE odrzuca niepotrzebne wiersze przed
grupowaniem i agregacją, podczas gdy HAVING robi to
po grupowaniu.

Dlatego WHERE nie może odnosić się do rezultatu funkcji
agregujących.

Z drugiej strony nie ma sensu zapis warunku HAVING,
który

nie

dotyczy

funkcji

agregujących.

W

takim

wypadku lepiej zastosować WHERE.

background image

Bazy danych

69

PRZYKŁADY

background image

Bazy danych

Zapytanie 24

Podać numery pracowników którzy mają więcej niż

70

Podać numery pracowników którzy mają więcej niż
jednego podwładnego

background image

Bazy danych

Zapytanie 24

select id_szefa, count(*)

71

select id_szefa, count(*)

from pracownicy
group by id_szefa
having count(*) >1

background image

Bazy danych

Zapytanie 25

Numery stanowisk dla których średnia płaca jest

72

Numery stanowisk dla których średnia płaca jest
większa od 510

background image

Bazy danych

Zapytanie 25

select id_zesp, round(avg(placa_pod),2) kwot

73

select id_zesp, round(avg(placa_pod),2) kwot

from pracownicy
group by id_zesp
having round(avg(placa_pod),2) >510

background image

Bazy danych

Zapytanie 26

Nazwy etatów na których pracuje więcej niż 2

74

Nazwy etatów na których pracuje więcej niż 2
pracowników

background image

Bazy danych

Zapytanie 26

select etat, count(*)

75

select etat, count(*)

from pracownicy
group by etat
having count(*)> 2

background image

Bazy danych

PERSPEKTYWY

76

PERSPEKTYWY

Perspektywa jest „wirtualną tabelą”, czyli relacją, która jest definiowana
w oparciu o zawartość innych tabel (relacji) i perspektyw.

background image

Bazy danych

Perspektywy

Tworzenie

CREATE VIEW nazwa [lista_kolumn]

77

CREATE VIEW nazwa [lista_kolumn]

AS
(

instrukcja [
WITH [CASCADED | LOCAL] CHECK OPTION

)

background image

Bazy danych

Perspektywy

Tworzenie

WITH CHECK OPTION
stosowane

tylko

w

modyfikowalnych

widokach,

powoduje

78

stosowane

tylko

w

modyfikowalnych

widokach,

powoduje

sprawdzanie czy instrukcje

UPDATE

lub

INSERT

nie wstawiają do

zasadniczej tabeli wierszy, które powinny zostać włączone do
widoku

WITH CASCADED CHECK OPTION
Powoduje że sprawdzane są wszystkie kryteria według których
pobierane są wiersze do widoku (może istnieć kilka warstw
widoków między tworzonym widokiem a tabelą)

WITH LOCAL CHECK OPTION
Powoduje że sprawdzane są tylko lokalne kryteria danego
widoku

background image

Bazy danych

Perspektywy

Przykład

create view szef

79

create view szef

(id_szef, nazwisko_szefa, id_prac, nazwisko_prac)

as

select p.id_prac, p.nazwisko, t.id_prac, t.nazwisko

from pracownicy p, pracownicy t
where p.id_prac(+)=t.id_szefa

background image

Bazy danych

Perspektywy

Przykład

select * from szef

80

select * from szef


Wyszukiwarka

Podobne podstrony:
bd 08
BD PG 08 SQL
BD PG 08 wstep
PN Elrod [Vampire Files 08] The Dark Sleep v1 1 (BD)
FP w 08
08 Elektrownie jądrowe obiegi
archkomp 08
bd cz 2 jezyki zapytan do baz danych
02a URAZY CZASZKOWO MÓZGOWE OGÓLNIE 2008 11 08
ankieta 07 08
bd normalizacja
08 Kości cz Iid 7262 ppt
08 Stany nieustalone w obwodach RLCid 7512 ppt
2009 04 08 POZ 06id 26791 ppt
08 BIOCHEMIA mechanizmy adaptac mikroor ANG 2id 7389 ppt

więcej podobnych podstron