01 sbd

background image

Systemy baz
danych

Agnieszka Lubacka

alubacka@interia.pl

1

background image

Zagadnienia

Powtórzenie i rozszerzenie

DML – polecenia JOIN

Modelowanie – Encja dominująca

DDL – ograniczenia polecenia CREATE

Sekwencje, perspektywy, indeksy

Uprawnienia z poziomu SQL (DCL)

Procedury wyzwalane

Procedury składowane

Funkcje

Transakcje

Pakiety

background image

Zapytania wybierające

SELECT [DISTINCT] nazwa_kolumny1,

nazwa_kolumny2, ...,

nazwa_kolumnyN [*] FROM

nazwa_tabeli

SELECT imie FROM Pracownik;

SELECT DISTINCT imie FROM Pracownik;

background image

SELECT [Distinct] nazwa_kolumny
[ [AS] alias] , ..., nazwa_kolumnyN
FROM nazwa_tabeli

SELECT imie as imię FROM Pracownik;

SELECT imie imię FROM Pracownik;

SELECT imie imię_kierownika

FROM Pracownik;

SELECT imie „imię kierownika”

FROM Pracownik;

Zapytania wybierające

background image

Operacje arytmetyczne
( + , – , * , / , || ) na kolumnach

SELECT nazwa_kolumny1 operator_arytmetyczny

nazwa_kolumny2 FROM nazwa_tabeli

SELECT 2010-rok_ur FROM Osoba;

SELECT extract(year from sysdate)-rok_ur wiek

FROM Osoba;

SELECT to_char(sysdate,'yyyy')-rok_ur FROM Osoba;

SELECT stawka + premia + potracenia as kwota

FROM Wyplata

SELECT imie + ‘ ‘ + nazwisko FROM Osoba;

SELECT imie || ‘ ‘ || nazwisko FROM Osoba;

background image

Uporządkowanie wyników
zapytania

SELECT * FROM nazwa_tabeli

ORDER BY nazwa_kolumny [ASC/DESC]

SELECT imie, nazwisko FROM Pracownik

ORDER BY nazwisko;

SELECT imie, nazwisko FROM Pracownik

ORDER BY 2;

SELECT imie, nazwisko FROM Pracownik

ORDER BY 2, 1;

SELECT imie, nazwisko FROM Pracownik

ORDER BY nazwisko DESC, imie DESC;

background image

Funkcja ROWNUM

SELECT * FROM nazwa_tabeli

ORDER BY ROWNUM [ASC/DESC]

SELECT imie, nazwisko FROM Pracownik

ORDER BY ROWNUM

SELECT ROWNUM, imie, nazwisko FROM Pracownik

ORDER BY ROWNUM

SELECT ROWNUM Lp, imie, nazwisko FROM Pracownik

ORDER BY Lp

SELECT ROWNUM Lp, imie, nazwisko FROM Pracownik

ORDER BY 1 DESC

background image

SELECT * FROM nazwa_tabeli

WHERE warunek

Operatory porównania:

=, <, >,< >, !=, <=, >=

Zakresy:

[NOT] BETWEEN wartość AND wartość

Listy:

[NOT] IN (wartość1, wartość2, ..., wartośćN)

Dopasowanie wzorców znakowych:

[NOT] LIKE wzorzec

% – zastępuje dowolny ciąg znaków

lub o znaków np. ‘A%’

_ – zastępuje jeden znak np. ’A_’

ESCAPE – definiuje znak, po którym znaki

specjalne są traktowane dosłownie

Filtrowanie wyniku zapytania

background image

Funkcje UPPER, LOWER,
INITCAP

SELECT UPPER(imie), INITCAP(nazwisko),

LOWER(miasto) FROM Pracownik;

imie

nazwisko

miasto

ADAM

Kowal

katowice

MARTA

Las

zabrze

background image

Wybór wierszy według
wzorca

SELECT * FROM Pracownik

WHERE imie LIKE ‘A%’;

SELECT * FROM Pracownik

WHERE imie LIKE ‘%a%’;

SELECT * FROM Pracownik

WHERE UPPER(imie) LIKE ‘%A%’;

SELECT * FROM Dzial

WHERE nazwa LIKE ‘/_%’ ESCAPE ‘/’;

SELECT * FROM Dzial

WHERE nazwa LIKE ‘%?_%’ ESCAPE ‘?’;

background image

Funkcje agregujące

MAX (nazwa_kolumny) – zwraca największą wartość

dla podanej kolumny

MIN (nazwa_kolumny) – zwraca najmniejszą wartość

dla podanej kolumny

SUM (nazwa_kolumny) – oblicza sumę wszystkich

wartości dla podanej kolumny

AVG (nazwa_kolumny) – oblicza średnią arytmetyczną

z wszystkich wartości dla podanej kolumny

COUNT (nazwa_kolumny [*]) – zwraca liczbę wierszy

background image

COUNT(nazwa_kolumny [*])

Id

Imie

Nr_telefonu

1

Adam

1234567

2

Adam

NULL

3

Anna

3456771

4

Julia

NULL

5

Anna

3456672

SELECT COUNT(*) FROM Osoba

5

SELECT COUNT(imie) FROM Osoba

5

SELECT COUNT(nr_telefonu) FROM Osoba

3

background image

Grupowanie

SELECT

[funkcja agregująca],

nazwa_kolumny1,

nazwa_kolumny2, … , nazwa_kolumnyN

FROM nazwa_tabeli

GROUP BY

nazwa_kolumny1, nazwa_kolumny2, … ,

nazwa_kolumnyN

,

[nazwa_kolumnyM]

[HAVING warunek]

background image

SELECT count(*),

imie

FROM Osoba GROUP BY

imie

;

Adam

2

Anna

2

Julia

1

Id

Imie

Nazwisko

Nr_telefonu

1

Adam

Kowal

1234567

2

Adam

Nowak

Null

3

Anna

Nowak

3456771

4

Julia

Kowal

Null

5

Anna

Nowak

3456672

background image

SELECT count(*),

imie

FROM Osoba GROUP BY

imie

;

Adam

2

Anna

2

Julia

1

SELECT count(*),

nazwisko

FROM Osoba GROUP BY

nazwisko

;

Kowal

2

Nowak

3

Id

Imie

Nazwisko

Nr_telefonu

1

Adam

Kowal

1234567

2

Adam

Nowak

Null

3

Anna

Nowak

3456771

4

Julia

Kowal

Null

5

Anna

Nowak

3456672

background image

SELECT count(*),

imie

FROM Osoba GROUP BY

imie

;

Adam

2

Anna

2

Julia 1

SELECT count(*),

nazwisko

FROM Osoba GROUP BY

nazwisko

;

Kowal

2

Nowak

3

SELECT count(*),

imie, nazwisko

FROM Osoba GROUP BY

imie,

nazwisko

;

Adam

Kowal 1

Adam

Nowak 1

Anna

Nowak 2

Julia Kowal 1

Id

Imie

Nazwisko

Nr_telefonu

1

Adam

Kowal

1234567

2

Adam

Nowak

Null

3

Anna

Nowak

3456771

4

Julia

Kowal

Null

5

Anna

Nowak

3456672

background image

SELECT count(*),

imie

FROM Osoba GROUP BY

imie

;

Adam

2

Anna

2

Julia

1

SELECT count(*),

imie

FROM Osoba GROUP BY

imie

HAVING count(*) > 1;

Adam

2

Anna

2

Id

Imie

Nazwisko

Nr_telefonu

1

Adam

Kowal

1234567

2

Adam

Nowak

Null

3

Anna

Nowak

3456771

4

Julia

Kowal

Null

5

Anna

Nowak

3456672

background image

SELECT count(*),

nazwisko

FROM Osoba GROUP BY

nazwisko

;

Kowal

2

Nowak

3

SELECT count(*),

nazwisko

FROM Osoba GROUP BY

nazwisko

HAVING count(*) < 3;

Kowal

2

Id

Imie

Nazwisko

Nr_telefonu

1

Adam

Kowal

1234567

2

Adam

Nowak

Null

3

Anna

Nowak

3456771

4

Julia

Kowal

Null

5

Anna

Nowak

3456672

background image

SELECT count(*),

imie, nazwisko

FROM Osoba

GROUP BY

imie, nazwisko

;

Adam

Kowal 1

Adam

Nowak 1

Anna

Nowak 2

Julia Kowal 1

SELECT count(*),

imie, nazwisko

FROM Osoba

GROUP BY

imie, nazwisko

HAVING COUNT(*) = 1;

Adam

Kowal 1

Adam

Nowak 1

Julia Kowal 1

Id

Imie

Nazwisko

Nr_telefonu

1

Adam

Kowal

1234567

2

Adam

Nowak

Null

3

Anna

Nowak

3456771

4

Julia

Kowal

Null

5

Anna

Nowak

3456672

background image

Grupowanie. Przykład

SELECT

Dzial_id

, count(Dzial_id) ile_osób

FROM Pracownik
GROUP BY

Dzial_id

HAVING count(Dzial_id)>6

background image

Grupowanie. Przykład

SELECT

Nazwa

, count(Dzial_id) ile_osób

FROM Dzial dz, Pracownik p
WHERE p.Dzial_id = dz.id
GROUP BY

Nazwa

, Dzial_id

HAVING count(Dzial_id) >6

background image

Join – łączenie tabel

CROSS JOIN – złączenie krzyżowe

(iloczyn kartezjański)

NATURAL JOIN – złączenie naturalne

(po nazwach pól)

INNER JOIN – złączenie wewnętrzne

(po kluczach)

OUTER JOIN – złączenie zewnętrzne

(po kluczach, uwzględniając

pola z wartością NULL)

LEFT OUTER JOIN – lewostronne

RIGHT OUTER JOIN – prawostronne

FULL OUTER JOIN – obustronne

background image

CROSS JOIN

SELECT imie, nazwisko, nazwa FROM Pracownik CROSS JOIN Dzial

imie

nazwisko

nazwa

Jan

Nowak

Kadry

Jan

Nowak

Płace

Jan

Nowak

Biuro

Anna

Kot

Kadry

Anna

Kot

Płace

Anna

Kot

Biuro

Adam

Loska

Kadry

Adam

Loska

Płace

Adam

Loska

Biuro

background image

CROSS JOIN

SELECT a.imie, a.nazwisko, b.imie, b.nazwisko

FROM Pracownik a CROSS JOIN Pracownik b

a.imie

a.nazwisko

b.imie

b.nazwisko

Jan

Nowak

Jan

Nowak

Jan

Nowak

Anna

Kot

Jan

Nowak

Adam

Loska

Anna

Kot

Jan

Nowak

Anna

Kot

Anna

Kot

Anna

Kot

Adam

Loska

Adam

Loska

Jan

Nowak

Adam

Loska

Anna

Kot

Adam

Loska

Adam

Loska

background image

CROSS JOIN

SELECT a.imie, a.nazwisko, b.imie, b.nazwisko

FROM Pracownik a CROSS JOIN Pracownik b WHERE a.id <> b.id

a.Imie

a.nazwisko

b.imie

b.nazwisko

Jan

Nowak

Anna

Kot

Jan

Nowak

Adam

Loska

Anna

Kot

Jan

Nowak

Anna

Kot

Adam

Loska

Adam

Loska

Jan

Nowak

Adam

Loska

Anna

Kot

background image

NATURAL JOIN

SELECT * FROM Pracownik

NATURAL

JOIN Dzial

background image

NATURAL JOIN

SELECT * FROM Pracownik

NATURAL

JOIN Dzial

SELECT * FROM Pracownik NATURAL

JOIN Dzial

background image

NATURAL JOIN

Klient

Pracownik

Id klienta

Nazwisko

Pesel

Id pracownika

Nazwisko

Pesel

55555

Kowalski

123456

243423

Kawasa

789012

11111

Kowalska

234567

443444

Kowalski

123456

33333

Sosna

345678

636666

Sosna

890123

22222

Kawel

456789

776777

Kawel

456789

66666

Kos

567890

SELECT * FROM Klient NATURAL JOIN Pracownik;

Id klienta

Nazwisko Pesel

Id pracownika

55555

Kowalski

123456

443444

22222

Kawel

456789

776777

background image

NATURAL JOIN

Klient

Pracownik

Id klienta

Nazwisko

Pesel

Id pracownika

Nazwisko

Pesel

55555

Kowalski

123456

243423

Kawasa

789012

11111

Kowalska

234567

443444

Kowalski

123456

33333

Sosna

345678

636666

Sosna

890123

22222

Kawel

456789

776777

Kawel

456789

66666

Kos

567890

SELECT * FROM Klient JOIN Pracownik USING(Pesel,
Nazwisko);

Id klienta

Nazwisko Pesel

Id pracownika

55555

Kowalski

123456

443444

22222

Kawel

456789

776777

background image

NATURAL JOIN

Klient

Pracownik

Id klienta

Nazwisko

Pesel

Id pracownika

Nazwisko

Pesel

55555

Kowalski

123456

243423

Kawasa

789012

11111

Kowalska

234567

443444

Kowalski

123456

33333

Sosna

345678

636666

Sosna

890123

22222

Kawel

456789

776777

Kawel

456789

66666

Kos

567890

SELECT * FROM Klient JOIN Pracownik USING(Pesel);

Id klienta

Nazwisko1 Nazwisko2 Pesel

Id pracownika

55555

Kowalski

Kowalski

123456

443444

22222

Kawel

Kawel

456789

776777

background image

NATURAL JOIN

Klient

Pracownik

Id klienta

Nazwisko

Pesel

Id pracownika

Nazwisko

Pesel

55555

Kowalski

123456

243423

Kawasa

789012

11111

Kowalska

234567

443444

Kowalski

123456

33333

Sosna

345678

636666

Sosna

890123

22222

Kawel

456789

776777

Kawel

456789

66666

Kos

567890

SELECT * FROM Klient JOIN Pracownik USING(Nazwisko);

Id klienta

Nazwisko Pesel1

Pesel2

Id pracownika

55555

Kowalski

123456

123456

443444

22222

Kawel

456789

456789

776777

33333

Sosna

345678

890123

636666

background image

INNER JOIN

SELECT imie, nazwisko, nazwa

FROM Pracownik p, Dzial dz

WHERE p.id = dz.Pracownik_id;

SELECT imie, nazwisko, nazwa

FROM Pracownik p, Dzial dz

WHERE dz.id = p.Dzial_id;

background image

INNER JOIN

SELECT imie, nazwisko, nazwa

FROM Pracownik p

INNER

JOIN Dzial dz

ON p.id = dz.Pracownik_id;

SELECT imie, nazwisko, nazwa

FROM Pracownik p

INNER

JOIN Dzial dz

ON dz.id = p.Dzial_id;

background image

INNER JOIN

SELECT imie, nazwisko, nazwa

FROM Pracownik p JOIN Dzial dz

ON p.id = dz.Pracownik_id;

SELECT imie, nazwisko, nazwa

FROM Pracownik p JOIN Dzial dz

ON dz.id = p.Dzial_id;

background image

OUTER JOIN

SELECT imie, nazwisko, nazwa

FROM Pracownik p LEFT

OUTER

JOIN Dzial dz

ON p.id = dz.Pracownik_id;

SELECT imie, nazwisko, nazwa

FROM Pracownik p RIGHT

OUTER

JOIN Dzial dz

ON p.id = dz.Pracownik_id;

SELECT imie, nazwisko, nazwa

FROM Pracownik p FULL

OUTER

JOIN Dzial dz

ON p.id = dz.Pracownik_id;

background image

OUTER JOIN

SELECT imie, nazwisko, nazwa

FROM Pracownik p LEFT JOIN Dzial dz

ON p.id = dz.Pracownik_id;

SELECT imie, nazwisko, nazwa

FROM Pracownik p RIGHT JOIN Dzial dz

ON p.id = dz.Pracownik_id;

SELECT imie, nazwisko, nazwa

FROM Pracownik p FULL JOIN Dzial dz

ON p.id = dz.Pracownik_id;

background image

OUTER JOIN

SELECT imie, nazwisko, nazwa

FROM Pracownik p RIGHT JOIN Dzial dz
ON dz.id = p.Dzial_id;

SELECT imie, nazwisko, nazwa

FROM Pracownik p LEFT JOIN Dzial dz
ON dz.id = p.Dzial_id;

SELECT imie, nazwisko, nazwa

FROM Pracownik p FULL JOIN Dzial dz
ON dz.id = p.Dzial_id;

background image

Łączenie wielu tabel

Pracownik(id, imie, nazwisko, id_stanowiska, id_dzialu)
Stanowisko(id, nazwa)
Dzial(id,nazwa)

background image

Łączenie wielu tabel

Pracownik(id, imie, nazwisko, id_stanowiska, id_dzialu)
Stanowisko(id, nazwa)
Dzial(id,nazwa)

SELECT * FROM pracownik, stanowisko, dzial

WHERE pracownik.id_stanowiska = stanowisko.id
AND pracownik.id_dzialu = dzial.id

background image

Łączenie wielu tabel

Pracownik(id, imie, nazwisko, id_stanowiska, id_dzialu)
Stanowisko(id, nazwa)
Dzial(id,nazwa)

SELECT * FROM stanowisko, dzial, pracownik

WHERE pracownik.id_stanowiska = stanowisko.id
AND pracownik.id_dzialu = dzial.id

SELECT * FROM stanowisko JOIN dzial JOIN pracownik

background image

Łączenie wielu tabel

Pracownik(id, imie, nazwisko, id_stanowiska, id_dzialu)
Stanowisko(id, nazwa)
Dzial(id,nazwa)

SELECT * FROM stanowisko, dzial, pracownik

WHERE pracownik.id_stanowiska = stanowisko.id
AND pracownik.id_dzialu = dzial.id

SELECT * FROM

stanowisko JOIN dzial

JOIN pracownik

background image

Łączenie wielu tabel

Pracownik(id, imie, nazwisko, id_stanowiska, id_dzialu)
Stanowisko(id, nazwa)
Dzial(id,nazwa)

SELECT * FROM stanowisko, dzial, pracownik

WHERE pracownik.id_stanowiska = stanowisko.id
AND pracownik.id_dzialu = dzial.id

SELECT * FROM pracownik JOIN stanowisko JOIN dzial

background image

Łączenie wielu tabel

Pracownik(id, imie, nazwisko, id_stanowiska, id_dzialu)
Stanowisko(id, nazwa)
Dzial(id,nazwa)

SELECT * FROM stanowisko, dzial, pracownik

WHERE pracownik.id_stanowiska = stanowisko.id
AND pracownik.id_dzialu = dzial.id

SELECT * FROM pracownik JOIN stanowisko JOIN dzial

SELECT * FROM pracownik JOIN stanowisko

ON pracownik.id_stanowiska = stanowisko.id

background image

Łączenie wielu tabel

Pracownik(id, imie, nazwisko, id_stanowiska, id_dzialu)
Stanowisko(id, nazwa)
Dzial(id,nazwa)

SELECT * FROM stanowisko, dzial, pracownik

WHERE pracownik.id_stanowiska = stanowisko.id

AND pracownik.id_dzialu = dzial.id

SELECT * FROM pracownik JOIN stanowisko JOIN dzial

SELECT * FROM pracownik JOIN stanowisko

ON pracownik.id_stanowiska = stanowisko.id

JOIN dzial ON pracownik.id_dzialu = dzial.id

background image

Łączenie wielu tabel

Pracownik(id, imie, nazwisko, id_stanowiska, id_dzialu)
Stanowisko(id, nazwa)
Dzial(id,nazwa)

SELECT * FROM stanowisko, dzial, pracownik

WHERE pracownik.id_stanowiska = stanowisko.id

AND pracownik.id_dzialu = dzial.id

SELECT * FROM pracownik JOIN stanowisko JOIN dzial

SELECT * FROM pracownik

INNER

JOIN stanowisko

ON pracownik.id_stanowiska = stanowisko.id

INNER

JOIN dzial ON pracownik.id_dzialu = dzial.id

background image

JOIN

background image

JOIN

SELECT p.imie, p.nazwisko, nazwa, k.imie, k.nazwisko

FROM Pracownik p JOIN Dzial dz ON dz.id = p.Dzial_id

JOIN Pracownik k ON k.id = dz.Pracownik_id;

background image

JOIN

SELECT p.imie, p.nazwisko, nazwa, k.imie, k.nazwisko

FROM Pracownik p RIGHT JOIN Dzial dz ON dz.id =
p.Dzial_id

JOIN Pracownik k ON k.id = dz.Pracownik_id;

background image

JOIN

SELECT p.imie, p.nazwisko, nazwa, k.imie, k.nazwisko

FROM Pracownik p RIGHT JOIN Dzial dz ON dz.id =
p.Dzial_id

LEFT JOIN Pracownik k ON k.id = dz.Pracownik_id;


Document Outline


Wyszukiwarka

Podobne podstrony:
bhf marienfelde stellwerk sbd 120 bogen 01 01
TD 01
Ubytki,niepr,poch poł(16 01 2008)
01 E CELE PODSTAWYid 3061 ppt
01 Podstawy i technika
01 Pomoc i wsparcie rodziny patologicznej polski system pomocy ofiarom przemocy w rodzinieid 2637 p
zapotrzebowanie ustroju na skladniki odzywcze 12 01 2009 kurs dla pielegniarek (2)
01 Badania neurologicz 1id 2599 ppt
01 AiPP Wstep
ANALIZA 01
01 WPROWADZENIA
01 piątek
choroby trzustki i watroby 2008 2009 (01 12 2008)
syst tr 1 (2)TM 01 03)13
Analiza 01
04 01 MORBILLO ROSOLIA VaMALATTIA

więcej podobnych podstron