Przestrzenne bazy danych Podstawy języka SQL Stanisława Porzycka-Strzelczyk porzycka@agh.edu.pl home.agh.edu.pl/~porzycka Konsultacje: wtorek godzina 16-17, p. 350 A (budynek A0) 1
SQL Język SQL (ang.structured Query Language) jest strukturalnym językiem zapewniającym możliwość wydawania poleceń do systemu zarządzania bazą danych (SZBD). 2
Język SQL SQL jest językiem deklaratywnym. SQL ma konstrukcję zbliżoną do języka naturalnego. Zapytania SQL możemy zaliczyć do następujących podzbiorów: DML (ang. Data Manipulation Language) DDL (ang. Data Definition Language) DCL (ang. Data Control Language) W języku SQL nie rozróżnia się dużych i małych liter. W poleceniach SQL ignorowane są znaki końca linii. Każde polecenie SQL powinno być zakończone średnikiem. 3
DML (Data Manipulation Language) - język manipulacji danymi pozwalający na odczytywanie danych z relacji, ich wstawianie, modyfikację i usuwanie SELECT UPDATE DELETE INSERT INTO DDL (Data Definition Language) - język definicji danych pozwalający między innymi na tworzenie, modyfikację i usuwanie i tworzenie relacji Najważniejsze wyrażenia wchodzące w skład DDL to: CREATE ALTER DROP DCL (Data Control Language) ma zastosowanie do nadawania uprawnień do obiektów bazodanowych. Najważniejsze polecenia w tej grupie to: GRANT REVOKE... 4
Składnia polecenia SQL obejmuje: Klauzule (SELECT, FROM, WHERE) Wyrażenia (atrybuty, stałe liczbowe i tekstowe, operatory arytmetyczne, funkcje wbudowane, relacje) Predykaty (wyrażenia opisujące cechy, właściwości lub relacje pomiędzy obiektami) 5
Operatory operatory arytmetyczne (+, -,*,/) operator przypisania = operatory porównania ( =, <>, <, <=, >, >=, LIKE, NOT LIKE) operator zawarcia w przedziale BETWEEN operator zawarcia w zbiorze IN operatory konkatenacji w standardzie: operatory zbiorowe (UNION, INTERSECT, EXCEPT) 6
Algebra relacyjna Algebra relacyjna to zbiór operatorów, których argumentami jest jedna relacja lub więcej relacji, a wynikiem jest relacja Podstawowe operatory algebry relacyjnej to: Rzut (projekcja) Selekcja (ograniczenie) Suma Przecięcie Różnica Iloczyn kartezjański 7
Rzut (projekcja) SELECT * FROM tabela1; (zwraca wszystkie atrybuty należące do tabeli 1) SELECT id,imie,nazwisko FROM tabela1; (zwraca tylko wybrane kolumny tabeli 1) 8
Selekcja (ograniczenie) SELECT Tytuł FROM Książki WHERE Cena>50; 9
Suma SELECT stanowisko FROM pracownicy WHERE id_dzialu=20 UNION SELECT stanowisko FROM pracownicy WHERE id_dzialu=30; 10
Przecięcie SELECT stanowisko FROM pracownicy WHERE id_dzialu=20 INTERSECT SELECT stanowisko FROM pracownicy WHERE id_dzialu=30; 11
Różnica SELECT stanowisko FROM pracownicy WHERE id_dzialu=20 MINUS SELECT stanowisko FROM pracownicy WHERE id_dzialu=30; 12
Iloczyn kartezjański A B A dane osobowe B samochody = Źródło:castor.am.gdynia.pl/~luksza/bazy/wyklady/algebra.ppt 13
Przykładowa baza danych Baza danych: relacje Autorzy Wydawnictwa Książki Książki_Autorzy Schematy relacji: Autorzy( AuID, Imię, Nazwisko, Telefon) Wydawnictwa (WydID, Nazwa, Telefon) Książki (ISBN, Tytuł, WydID, Cena) Książki_Autorzy (ISBN, AuID) 14
Przykładowa baza danych 15
Proste zapytanie SELECT * FROM Wydawnictwa; Odczytaj wszystkie dane z tabeli Książki: SELECT * FROM Książki; 16
Projekcja Odczytaj nazwę i telefon z tabeli Wydawnictwa SELECT Nazwa, Telefon FROM Wydawnictwa; Odczytaj tytuł i cenę wszystkich książek z tabeli Książki SELECT Tytuł, Cena FROM Książki; 17
Wyrażenia SELECT ISBN ' ' Tytuł, 0.1*Cena FROM Książki; SELECT {wyrażenie1, wyrażenie2,...} FROM {nazwa relacji}; Oblicz przychód księgarni od sprzedaży każdej książki po uwzględnieniu zysku odprowadzanego do wydawnictwa SELECT Tytuł, Cena-0.1*Cena FROM Książki; 18
Aliasy SELECT ISBN ' ' Tytuł AS Pozycja, 0.1*Cena AS Wydawnictwu FROM Książki; SELECT {wyrażenie1 [AS alias1], wyrażenie2 [AS alias2],...} FROM {nazwa relacji}; SELECT imie ' ' nazwisko AS Pracownik, placa_pod*12 AS "Roczny dochód" FROM pracownicy; 19
Funkcje skalarne i arytmetyczne Wybieranie wyliczonych wartości. W zapytaniu SQL możemy używać następujących operatorów arytmetycznych w celu obliczenia wartości: + (dodawanie) - (odejmowanie) * (mnożenie) / (dzielenie) użyciem nawiasów dla zaznaczenia kolejności wykonywania działań wartości null nie mogą brać udziału w wyliczeniach 20
Eliminacja duplikatów Wyświetl imiona Autorów SELECT Imię FROM Autorzy; SELECT DISTINCT Imię FROM Autorzy; Klauzulę DISTINCT należy podać po słowie kluczowym SELECT. SELECT [DISTINCT] {wyrażenie1 [AS alias1], wyrażenie2 [AS alias2],...} FROM {nazwa relacji}; 21
Sortowanie wyników zapytań SELECT Nazwisko FROM Autorzy; SELECT Nazwisko FROM Autorzy ORDER BY Nazwisko; SELECT [DISTINCT] {wyrażenie1 [AS alias1], wyrażenie2 [AS alias2],...} FROM {nazwa relacji} ORDER BY {wyrażenie3 [ASC DESC], wyrażenie4 [ASC DESC], alias1 [ASC DESC], alias2 [ASC DESC]...}; SELECT ISBN ' ' Tytuł AS Pozycja, WydID, Cena FROM Książki ORDER BY WydID, Pozycja ASC; SELECT ISBN ' ' Tytuł AS Pozycja, WydID FROM Książki ORDER BY WydID DESC, Tytuł, Cena; 22
Selekcja operatory logiczne =!= <> > >= < <= SELECT Tytuł FROM Książki WHERE Cena>50; SELECT ISBN FROM Książki WHERE Tytuł='c++'; 23
Selekcja operatory logiczne (2) BETWEEN AND SELECT Tytuł, Cena FROM Książki WHERE Cena BETWEEN 25 AND 29 ORDER BY Cena; 24
Selekcja operatory logiczne (3) IN SELECT Tytuł, Cena FROM Książki WHERE CENA IN(20, 51, 29) ORDER BY Cena; 25
Selekcja operatory logiczne (4) LIKE SELECT Tytuł FROM Książki WHERE ISBN LIKE '0-999-9999-99'; 26
Selekcja operatory logiczne (5) IS NULL SELECT * FROM AUTORZY WHERE Telefon=NULL; SELECT * FROM AUTORZY WHERE Telefon IS NULL; 27
Zanegowane operatory logiczne NOT BETWEEN... AND... NOT IN NOT LIKE IS NOT NULL SELECT * FROM AUTORZY WHERE Telefon IS NOT NULL; SELECT * FROM AUTORZY WHERE Nazwisko NOT LIKE 'H ; 28
Funkcje agregujące działają na zbiorach rekordów, nazywanych grupami w przeciwieństwie do funkcji wierszowych, które zawsze działają na jednym rekordzie rekordy należą do tej samej grupy jeśli posiadają tą samą wartość wyrażenia grupującego. Wyrażeniem grupującym jest najczęściej pojedynczy atrybut relacji Po podziale rekordów na grupy w każdej z grup zostaje zastosowana funkcja agregująca, która wylicza pojedynczą wartość dla grupy. Stąd w wyniku zapytania otrzymujemy tyle rekordów, ile grup zostało utworzonych w wyniku operacji grupowania. 29
Rodzaje funkcji agregujących funkcje: MAX maksimum, COUNT liczba wystąpień, SUM suma, AVG średnia, MIN minimum, 30
Przykład ćwiczeniowy Zapytania będą realizowane w oparciu o następującą relację
Zapytania z jedną grupą znajdź minimalną wartość płacy podstawowej osób pracujących na etacie reżysera znajdź minimalną wartość płacy podstawowej osób pracujących na etacie kaskadera SELECT MIN(Pensja_pod) FROM Pracownicy WHERE Etat LIKE 'reżyser'; SELECT MIN(Pensja_pod), MAX(Pensja_pod) FROM Pracownicy WHERE Etat LIKE 'reżyser';
Zapytania z wieloma grupami klauzula GROUP BY wyrażenie definiuje wyrażenie grupujące. wynikiem zapytania jest jeden rekord dla każdej grupy. znajdź średnią wartość płacy podstawowej wśród pracowników każdego zespołu SELECT Etat, AVG(Pensja_pod) FROM Pracownicy GROUP BY Etat; SELECT Etat, AVG(Pensja_pod) FROM Pracownicy GROUP BY Etat; 33