700 likes | 876 Views
J ę zyk SQL – ciąg dalszy DML (Data Manipulation Language). Wykład S. Kozielski. Wstawianie wierszy. INSERT INTO <tablica> [(<lista kolumn>)] VALUES (<lista wartości>) Przykład: wstawianie wierszy do tablicy: uczniowie (nazwisko, wzrost, waga, klasa)
E N D
Język SQL – ciąg dalszyDML (Data Manipulation Language) Wykład S. Kozielski
Wstawianie wierszy INSERT INTO <tablica> [(<lista kolumn>)] VALUES (<lista wartości>) Przykład: wstawianie wierszy do tablicy: uczniowie (nazwisko, wzrost, waga, klasa) insert into uczniowie values (‘Malina’,183,79.5,3) insert into uczniowie (nazwisko,klasa) values (‘Jaworek’,1)
Wstawianie wierszy - c.d. INSERT INTO <tablica> [(<lista kolumn>)] <instrukcja SELECT>
Modyfikowanie (aktualizacja) wierszy UPDATE <tablica> SET <kolumna> = <wyrażenie>, ... [WHERE <warunek>] Przykład: update uczniowie set wzrost = wzrost + 2 where nazwisko = ‘Malina’ update uczniowie set klasa = 3 where klasa = 2
Usuwanie wierszy DELETE FROM <tablica> [WHERE <warunek>] Przykład: delete from uczniowie where klasa = 3
SELECT <> FROM <> WHERE <> GROUP BY <> HAVING <> ORDER BY <> UNION ... Wyszukiwanie danych
Fraza SELECT – opis uproszczony SELECT [ALL|DISTINCT]{<wyrażenie> [AS <nazwa>], ... | *} <wyrażenie>::= <kolumna> | <alias>.<kolumna> | <kwalifikator>.<kolumna> | <wyrażenie określonego typu> | <funkcja agreująca> <kwalifikator>::= <tablica> | <perspektywa> | <synonim>
Przykłady zapytań dotyczących tablicy:uczniowie (nazwisko, wzrost, waga, klasa) select * from uczniowie select nazwisko, klasa from uczniowie select nazwisko, waga – (wzrost - 100) from uczniowie select nazwisko, waga – (wzrost - 100) as ‘nadwaga’ from uczniowie
Przykłady zapytań - c.d. select max(wzrost) from uczniowie select klasa from uczniowie select distinct klasa from uczniowie
Fraza FROM – wariant bez złączeń FROM <element> [<alias>], ... <element>::= <tablica>|<perspektywa> | <synonim>|<konstruktor tablicy>
Fraza WHERE WHERE <warunek>
Warunki filtrujące (zwykłe) <wyrażenie> <op> <stała> <wyrażenie> <op> <wyrażenie> <op>::= =, >, >=, <, <=, !=, <> <wyrażenie> [NOT] BETWEEN <dół> AND <góra> <wyrażenie> [NOT] IN (<lista wartości>)
Przykłady select * from uczniowie where klasa = 4 where waga – (wzrost - 100) > 10 where wzrost beetwen 178 and 183 where klasa in (1,2)
<wyrażenie> [NOT] LIKE <wzorzec tekstowy> znaki zastępcze we wzorcu tekstowym: _ : zastępuje 1 znak, % : zastępuje 0, 1, 2, 3, ... znaków
Przykłady select * from uczniowie where nazwisko like ‘Kowalsk_’ where upper(nazwisko) like ‘KOWALSK_’ where upper(nazwisko) like ‘KOWAL%’
Warunki łączące Tablice bazy danych: Zespoły (nrz, nazwa, nrpk) Pracownicy (nrp, nazwisko, nrz, . . . ) Wypłaty (nrp, nrt, kwota) Tematy (nrt, nazwa, nrpk)
Warunki łączące select nazwisko, kwota, nrt from pracownicy, wypłaty where pracownicy.nrp = wypłaty.nr select p.nazwisko, w.kwota, w.nrt, p.nrp from pracownicy p, wypłaty w where p.nrp = w.nrp
Pracownicy Wypłaty nrp nrt kwota nrp nazwisko adres nrz 2 2 300 1 Lipowski Ruda 2 3 3 150 2 Grabski Zabrze 1 1 1 150 3 Jaworek Gliwice 1 3 2 200 1 3 200 Złączenie tabel
select nazwisko, kwota, nrt from pracownicy p, wypłaty w where p.nrp = w.nrp and nrz = 4 and kwota > 2000
select distinct z.nazwa from zespoły z, pracownicy p, wypłaty w, tematy t where z.nrz = p.nrz and p.nrp = w.nrp and w.nrt = t.nrt andt.nazwa = ‘Projekt sterownika’
select p2.nazwisko from pracownicy p1, pracownicy p2 where p1.nazwisko = ‘Bukowy’ and p1.nrz = p2.nrz and p2.nazwisko <> ‘Bukowy’
select p2.nazwisko from pracownicy p1, wypłaty w, tematy t, pracownicy p2 where p1.nazwisko = ‘Grabski’ and p1.nrp = t.nrpk and t.nrt = w.nrt andw.nrp = p2.nrp
Złączenia zewnętrzne select nazwisko, kwota, nrt from pracownicy p, wypłaty w where p.nrp = w.nrp
Złączenienaturalne r (A, B, C) s (C, D) q (A, B, C, D) ———————=————— a1 b1 c1 c1 d1 a1 b1 c1 d1 a2 b2 c2 c5 d5 a4 b4 c1 d1 a3 b3 c3 a4b4 c1
Złączenie zewnętrzne r (A, B, C) s (C, D) (+) q (A, B, C, D) ————————=————— a1 b1 c1 c1 d1 a1 b1 c1 d1 a2 b2 c2 c5 d5 a4 b4 c1 d1 a3 b3 c3 a2 b2 c2 a4 b4 c1 a3 b3 c3
Złączenia zewnętrzne select nazwisko, kwota, nrt from pracownicy p, wypłaty w where p.nrp = w.nrp (+)
Zapis złączeń w standardzie SQL-2 (SQL-92) SELECT <> FROM <rodzaj złączenia> <rodzaj złączenia>::= <tab A> [<typ złączenia>] JOIN <tab B> <tab A> [<typ złącz.>] JOIN <tab B> USING (<kolumna>, ...) <tab A> [<typ złączenia>] JOIN <tab B> ON <warunek> <typ złączenia>::= INNER|{LEFT|RIGHT|FULL}[OUTER]
select nazwisko, kwota, nrt from pracownicy join wypłaty lub from pracownicy join wypłaty using (nrp) lub from pracownicy p join wypłaty w on p.nrp = w.nrp
Złączenie zewnętrzne Zapis klasyczny select nazwisko, kwota, nrt from pracownicy p, wypłaty w where p.nrp = w.nrp (+) Zapis w SQL-2 select nazwisko, kwota, nrt from pracownicy p left outer join wypłaty w on p.nrp = w.nrp
Warunki filtrujące z pytaniami zagnieżdżonymi SELECT <> FROM <> WHERE <początek warunku> ( SELECT <> FROM <> WHERE < . . . >)
<początek warunku>::= 1) <wyrażenie> <op> 2) <wyrażenie> <op> {ANY|ALL} 3) <wyrażenie> <op> [NOT] IN 4) [NOT] EXISTS
Baza danych: Zespoły (nrz, nazwa, nrpk) Pracownicy (nrp, nazwisko, nrz, premia) Wypłaty (nrp, nrt, kwota) Tematy (nrt, nazwa, nrpk)
ad 1) <wyrażenie> <op> select nazwisko from pracownicy where nrp = (select nrpk from zespoły where nazwa = ‘ZespółWdrożeń’)
ad 1) <wyrażenie> <op> select nazwisko from pracownicy where nrz = 3 and premia > (select premia from pracownicy where nazwisko = ‘Jaworek’)
ad 2)<wyrażenie> <op> {ANY|ALL} ANY select nazwa from tematy where nrt = any (select nrt from wypłaty)
ANY select nazwisko from pracownicy where nrp = any (select nrp from wypłaty where kwota > 2000)
ALL select nazwisko, wzrost from uczniowie where klasa = 1 and wzrost > all (select wzrost from uczniowie where klasa = 3)
select nazwisko from pracownicy p where 2000 < all (select kwota from wypłaty w where w.nrp = p.nrp)
ad 3) <wyrażenie> [NOT] IN select nazwa from tematy where nrt in (select nrt from wypłaty)
select nazwa from zespoły where nrz in (select nrz from pracownicy where nrp in (select nrp from wypłaty where nrt in (select nrt from tematy where nazwa = ‘Projekt sterownika’)))
ad 4) [NOT] EXISTS select nazwa from tematy t where exists (select * from wypłaty w where w.nrt = t.nrt)
select nazwisko from pracownicy p where not exists (select * from wypłaty w where w.nrp = p.nrp)
select nazwisko from pracownicy p where not exists (select * from tematy t where not exists (select * from wypłaty w where w.nrt = t.nrt and w.nrp = p.nrp))
Funkcje agregujące SUM (<arg>) AVG (<arg>) MAX (<arg>) MIN (<arg>) COUNT (<arg>) <arg>::= [ALL|DISTINCT]<wyrażenie> oraz COUNT(*)
select count(*) from pracownicy select sum(kwota), avg(kwota), max(kwota) from wypłaty
select sum(kwota), avg(kwota), max(kwota) from wypłaty where nrt = 3 select sum(kwota), max(kwota), count(p.nrp) from pracownicy p, wypłaty w where p.nrp = w.nrp and nrz = 4
select max(waga - (wzost - 100)) from uczniowie select count(nrp), count(distinct nrp), count(distinct nrt) from wypłaty
select nazwisko, wzrost from uczniowie where wzrost = (select max(wzrost) from uczniowie)