Systemy GIS Tworzenie zapytań w bazach danych Wykład nr 6
Analizy danych w systemach GIS Jak pytać bazę danych, żeby otrzymać sensowną odpowiedź......czyli podstawy języka SQL INSERT, SELECT, DROP, UPDATE
Podstawy SQL SQL (ang. Structured Query Language) to strukturalny język zapytań używany do tworzenia, modyfikowania baz danych, oraz do umieszczania i pobierania danych z baz danych. Standardowe typy zapytań: CREATE, ALTER, DROP, INSERT, UPDATE, SELECT, DELETE
Standard SQL Podstawowe koncepcje języka SQL opierają się na standardzie nieformalnie nazywanym SQL/92. Jego pełna nazwa to: Międzynarodowy Standardowy Język Baz Danych SQL (1992) Spotykane w praktyce programy nie implementują w pełni przedstawianego tu standardu. Z drugiej strony istniejące implementacje rozszerzają niektóre aspekty standardu. Często określa się taką sytuację jako nadzbiór podzbioru.
Znaczenie języka SQL Język zapytań poprzez deklaratywny dostęp do danych Składnia dosyć łatwa i naturalna (choć daleka od doskonałości) Możny protektor (IBM) Standardowy język dostępu do danych dla wszystkich liczących się RDBMS normy ANSI i ISO (wiele dialektów słabo zgodnych z normami) Szczególnie przydatny w systemach klient-serwer i wielowarstwowych (zasada zapytanie do danych ) Części języka SQL: DQL (Data Query Language) do wyszukiwania danych zdania SELECT DML (Data Manipulation Language) do modyfikacji danych zdania INSERT, UPDATE, DELETE DDL (Data Definition Language) do tworzenia i modyfikacji struktur danych zdania CREATE, DROP, ALTER i inne
Do czego służą zapytania? CREATE ALTER DROP INSERT UPDATE SELECT DELETE Tworzy nową tabelę lub bazę danych Modyfikuje definicję istniejących tabel Usuwa tabele, pola Wstawia do tabeli rekordy Modyfikuje dane w istniejących rekordach Pobiera dane informacji z tabeli Usuwa elementy z tabeli
SELECT SELECT najczęściej używane polecenie języka SQL Pobranie danych z tabel, czyli Daj mi dane spełniające następujący warunek SELECT [nazwa pól] FROM [nazwy tabel] WHERE [jakieś wyrażenie] ORDER BY [nazwy pól]
Przykłady zapytań SQL
Odczyt całej tabeli Do odczytania wszystkich kolumn tabeli służy zapytanie, w którym zamiast nazw kolumn używa się gwiazdki Kolejność zwróconych wierszy jest losowa SELECT * FROM tbl_stacje_trafo
Wybór uporządkowany Kolumny wymienia się w klauzuli SELECT Klauzula ORDER BY wymusza kolejność wierszy Do zmiany uporządkowania służą klauzule ASC (domyślne) i DESC SELECT nazwa_stacji_trafo, moc_stacji_kw FROM tbl_stacje_trafo ORDER BY nazwa_stacji_trafo ASC
Warunki WHERE Klauzula WHERE wybiera wiersze spełniające określony warunek Można tworzyć złożone warunki wykorzystując operatory logiczne AND, OR, NOT SELECT id_stacji_trafo FROM tbl_stacje_trafo WHERE moc_stacji_kw > 100 AND typ_trafo = "olejowy"
Złączenie wyrażone przez WHERE Złączenie można wyrazić zwykłym warunkiem WHERE Pominięcie warunku daje iloczyn kartezjański wierszy! Użyto aliasów kolumn i tabel SELECT id_stacji_trafo AS nr_stacji FROM tbl_stacje_trafo T, tbl_powiaty P WHERE T.id_powiatu = P.id_powiatu
Złączenia wyrażone przez JOIN Złączenie można też wyrazić specjalną konstrukcją JOIN Jest to czytelniejsze i może być łatwiejsze do optymalizacji SELECT id_stacji_trafo FROM tbl_stacje_trafo T JOIN tbl_powiaty P ON T.id_powiatu = P.id_powiatu WHERE T.nazwa_powiatu = "wejherowski"
NULL Interpretacja wartości NULL wartość nieznana wartość nieadekwatna/nieistniejąca Użycie NULL interpretacja NULL w warunkach w zapytaniu warunek o wartości NULL jest uważany za niespełniony w więzach kontrolnych warunek o wartości NULL jest uważany za spełniony NULL w indeksach: wartości zerowe mogą nie być uwzględnione w indeksach w przypadkach wątpliwych należy używać funkcji zastępującej NULL wartością zastępczą, np. NVL Do reprezentowania wartości nieznanej lub nieadekwatnej należy zawsze używać NULL NULL w wyrażeniach Wyrażenie, którego operand ma wartość NULL także ma wartość NULL Wyjątki: funkcje agregujące wyrażenia logiczne: NULL OR TRUE NULL AND FALSE Do wykrywania wartości NULL używać operatorów IS NULL, IS NOT NULL nie używać porównań SELECT id_stacji_trafo FROM tbl_stacje_trafo T WHERE T.nazwa_powiatu IS NOT NULL
Klauzula DISTINCT Wyszukanie niejednakowych wierszy Klauzula DISTINCT eliminuje z wyniku zapytania powtórzone wiersze Przydaje się, gdy chcemy wyszukać wszystkie występujące wartości jakiej danej bez względu na liczbę wystąpień SELECT DISTINCT id_powiatu FROM tbl_stacje_trafo
Zapytania z funkcjami grupującymi Funkcje grupujące (agregujące) COUNT zlicza wiersze COUNT(*) wszystkie wiersze COUNT(kolumna) pomija wartości NULL MIN, MAX znajdują najmniejszą/największą wartość; SUM sumuje; AVG oblicza średnią arytmetyczną; VARIANCE, STDDEV obliczają wariancję i odchylenie standardowe Klauzula GROUP BY wyznacza sposób grupowania musi w niej się znaleźć cała zawartość klauzuli oprócz elementów używających funkcji grupujących Klauzule WHERE i JOIN wybierają wiersze przed agregacją Agregacja niejednakowych wartości jest możliwa z użyciem klauzuli DISTINCT SELECT COUNT(DISTINCT id_powiatu) FROM tbl_stacje_trafo
Wyrażenia w SQL Wyrażenia Złożone ze stałych, kolumn, operatorów, wywołań funkcji Konwersje są niejawne zaleca się wykonywanie jawnych konwersji Stałe Liczbowe wprost Znakowe w '...' Daty w formacie domyślnym lub przez funkcje konwersji Logiczne TRUE i FALSE NULL Operatory Arytmetyczne: + - * / Logiczne: AND, OR, NOT Konkatenacja wartości znakowych: Porównania: =,!=, >, <, >=, <=, <> BETWEEN x AND y LIKE Funkcje wbudowane Różne w każdym z DBMS Typowe rodzaje agregujące znakowe matematyczne data/czas konwersje Funkcje użytkownika Dostępne w lepszych DBMS Pisane w specjalnym wbudowanym języku By móc być użyte w SQL muszą spełniać szereg warunków