Bazy danych Język SQL część 2 Wykład dla studentów matem



Podobne dokumenty
SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Wykład 8. SQL praca z tabelami 5

Paweł Rajba

050 SQL ELEMENTY ZAAWANSOWANE. Prof. dr hab. Marek Wisła

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Wykład 4. SQL praca z tabelami 1

Bazy danych 10. SQL Widoki

Relacyjne bazy danych. Podstawy SQL

Oracle PL/SQL. Paweł Rajba.

Oracle11g: Wprowadzenie do SQL

Systemy GIS Tworzenie zapytań w bazach danych

Wykład 6. SQL praca z tabelami 3

SQL 4 Structured Query Lenguage

Autor: Joanna Karwowska

1 DML - zapytania, część II Grupowanie Operatory zbiorowe DML - modyfikacja 7. 3 DCL - sterowanie danymi 9.

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Język SQL. Rozdział 8. Język manipulowania danymi DML

Język SQL Złączenia. Laboratorium. Akademia Morska w Gdyni

Bazy danych Język SQL część 1 Wykład dla studentów matem

Systemowe aspekty baz danych

Systemowe aspekty baz

Bazy danych 6. Klucze obce. P. F. Góra

Relacyjne bazy danych. Podstawy SQL

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Wykład 5. SQL praca z tabelami 2

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Bazy danych wykład trzeci. Konrad Zdanowski

kończy wysyłanie danych do pliku tworzy strukturę tabeli wyświetla opis struktury tabeli zmiana nazwy tabeli usuwanie tabeli

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Oracle PL/SQL. Paweł Rajba.

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych

PLAN WYKŁADU BAZY DANYCH PODSTAWOWE KWESTIE BEZPIECZEŃSTWA OGRANICZENIA DOSTĘPU DO DANYCH

Bazy danych. dr inż. Arkadiusz Mirakowski

Przestrzenne bazy danych Podstawy języka SQL

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

3. Podzapytania, łączenie tabel i zapytań

Szkolenie Oracle SQL podstawy. Terminy lutego 2010 First Minute! 1100zł!

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Laboratorium Bazy danych SQL 3 1

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Model relacyjny. Wykład II

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Aspekty aktywne baz danych

Bazy danych - Materiały do laboratoriów VIII

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Zarządzanie bazą danych. Bazy Danych i Systemy informacyjne Wykład 4. Piotr Syga

PODSTAWY BAZ DANYCH 13. PL/SQL

Podstawy języka SQL. standardy SQL formułowanie zapytań operacje na strukturach danych manipulowanie danymi. Bazy danych s.5-1

Oracle PL/SQL. Paweł Rajba.

Autor: Joanna Karwowska

Język SQL. instrukcja laboratoryjna. Politechnika Śląska Instytut Informatyki. laboratorium Bazy Danych

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

Oracle PL/SQL. Paweł Rajba.

Administracja i programowanie pod Microsoft SQL Server 2000

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

SQL w 24 godziny / Ryan Stephens, Arie D. Jones, Ron Plew. Warszawa, cop Spis treści

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

Bazy danych Algebra relacji Wykład dla studentów matematyki

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Język SQL. Rozdział 5. Połączenia i operatory zbiorowe

Wykład :45 BD-1 W_3

Język SQL, zajęcia nr 1

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

Projektowanie systemów baz danych

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

Składowane procedury i funkcje

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

BAZY DANYCH wprowadzenie do języka SQL. Opracował: dr inż. Piotr Suchomski

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

Bazy danych 2. Wykład 5 Structured Query Language (SQL) c.d. DDL

Indeksy. Indeks typu B drzewo

Podstawy języka SQL cz. 2

Bazy danych 7. SQL podstawy

P o d s t a w y j ę z y k a S Q L

Złączenie CROSS JOIN jest to tzw. złączenie krzyżowe, którego ogólna postać wygląda następująco:

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Przykładowa baza danych BIBLIOTEKA

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

BAZY DANYCH Cz III. Transakcje, Triggery

Wykład IV Modelowanie danych, projektowanie systemu informatycznego Modelowanie konceptualne implementacyjne Modelowanie pojęciowe na encjach

Język SQL, zajęcia nr 2

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

Wykład 05 Bazy danych

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

SQL język zapytań (query language) cz.1

Transkrypt:

Bazy danych Język SQL część 2 Wykład dla studentów matematyki 21 marca 2015

Zapytania na kilku tabelach Czasem poszukiwana informacja znajduje się w kilku tabelach. Aby zapytanie dotyczyło kilku tabel, należy je podać we frazie FROM Jeśli nazwy atrybutów powtarzaja się, należy użyć notacji tabela.atrybut

Złaczenie dwóch relacji Podaj imiona wszystkich zwierzaków pochodzacych z Afryki. SELECT imie FROM Zwierzaki, Gatunki WHERE Gatunki.nazwa = Zwierzaki.gatunek AND kontynent = Afryka ;

Semantyka formalna (i bardzo niepraktyczna) 1 Utwórz iloczyn kartezjański wszystkich tabel z frazy FROM. 2 Używajac otrzymanego wyniku, postępuj jak dla zapytania opartego na pojedynczej tabeli.

Semantyka operacyjna Z każda tabela z frazy FROM zwiazujemy zmienna krotkowa (wskazujac a na bieżacy wiersz). Przy dwóch tabelach: Dla każdej wartości zmiennej krotkowej z pierwszej tabeli znajdujemy wszystkie pasujace wiersze z drugiej tabeli, przechodzac po niej jej zmienna krotkowa. Każdy znaleziony wiersz jest sklejany z bieżacym wierszem pierwszej tabeli i wynik przetwarzamy jak dla pojedynczej tabeli. Analogicznie przy większej liczbie tabel: zagnieżdżone pętle iteracyjne.

Jawne zmienne krotkowe Czasami w zapytaniu chcemy dwukrotnie użyć tej samej tabeli. Aby móc odróżniać te egzemplarze, we frazie FROM po nazwie tabeli można umieścić zmienna krotkowa. Można tak zrobić dla dowolnej tabeli, np. aby w innych frazach używać krótszej nazwy.

Samozłaczenie tabeli Podaj wszystkie pary zwierzaków (ich imiona) tego samego gatunku. Unikaj par (Kropka,Kropka). W ramach pary zachowaj porzadek alfabetyczny, tzn. (Kropka,Puszek) ale nie (Puszek,Kropka). SELECT z1.imie,z2.imie FROM Zwierzaki z1, Zwierzaki z2 WHERE z1.gatunek = z2.gatunek AND z1.imie < z2.imie;

Podzapytania Nawiasowane wyrażenie SELECT (podzapytanie) można umieszczać we frazach WHERE i FROM. We frazie FROM po podzapytaniu musi wystapić zmienna krotkowa (pełniaca rolę lokalnej nazwy). Jeśli używamy podzapytania we frazie WHERE w zwykłym porównaniu, to powinno zwracać pojedyncza wartość (tzn. pojedyncza kolumnę oraz tylko jeden wiersz).

Podzapytanie w WHERE Podaj imiona zwierzaków, które waża najwięcej. SELECT imie FROM Zwierzaki WHERE waga = (SELECT MAX(waga) FROM Zwierzaki);

Podzapytanie we FROM Podaj imiona najcięższych zwierzaków z każdego gatunku. SELECT imie FROM Zwierzaki, (SELECT gatunek,max(waga) AS maks FROM Zwierzaki GROUP BY gatunek) mwg WHERE Zwierzaki.gatunek = mwg.gatunek AND waga = maks;

Podzapytanie z IN Podaj imiona wszystkich zwierzaków pochodzacych z Afryki. SELECT imie FROM Zwierzaki WHERE gatunek IN (SELECT nazwa FROM Gatunki WHERE kontynent = Afryka );

Podzapytanie z ANY To samo zapytanie można też zapisać inaczej. SELECT imie FROM Zwierzaki WHERE gatunek = ANY (SELECT nazwa FROM Gatunki WHERE kontynent = Afryka ); Dla operatorów porównywania modyfikator ANY służy do sprawdzenia, czy warunek jest spełniony dla któregokolwiek wiersza z zagnieżdżonego podzapytania. Podobny modyfikator ALL pozwala sprawdzić, czy warunek jest spełniony dla wszystkich wierszy podzapytania.

Podzapytanie z EXISTS Podzapytanie nazywamy skorelowanym, jeśli w jego treści odwołujemy się do elementów wiersza z zapytania zewnętrznego. W poniższym zapytaniu odwołanie do kolumny nazwa dotyczy tabeli Gatunki SELECT kontynent FROM Gatunki WHERE EXISTS (SELECT * FROM Zwierzaki WHERE gatunek = Gatunki.nazwa); Operator EXISTS sprawdza, czy podane podzapytanie zwraca jakieś wiersze.

Wyrażenia JOIN Warunki łacz ace dla złaczeń można zapisywać we frazie FROM. Jeszcze raz imiona wszystkich zwierzaków pochodzacych z Afryki SELECT imie FROM Zwierzaki JOIN Gatunki ON (Gatunki.nazwa = Zwierzaki.gatunek) WHERE kontynent = Afryka ;

Operatory złaczeń Standard SQL podaje następujace operatory złaczeń do używania we frazie FROM: T1 CROSS JOIN T2 T1 NATURAL JOIN T2 T1 INNER JOIN T2 T1 LEFT OUTER JOIN T2 T1 RIGHT OUTER JOIN T2 T1 FULL OUTER JOIN T2 Iloczyn kartezjański Złaczenie naturalne (równościowe po kolumnach o tych samych nazwach) Zwykłe złaczenie Złaczenia zewnętrzne Po takim wyrażeniu dodatkowo podajemy jedna z fraz USING (kolumna,...) ON warunek nazwy kolumn po których łaczymy warunek ograniczajacy na złaczenie

Perspektywy W SQL relacja to tabela lub perspektywa. Tworzenie perspektywy CREATE VIEW nazwa [(atrybut...)] AS zapytanie; na przykład CREATE VIEW GatunkiAfryki AS SELECT * FROM Gatunki WHERE kontynent = Afryka ;

Perspektywy Usuwanie perspektywy DROP VIEW nazwa; Uproszczona semantyka operacyjna dla zapytań z perspektywami: Nazwę perspektywy we frazie FROM w zapytaniu zastępuje się relacjami, na podstawie których ja utworzono. Warunki z definicji perspektywy dołacza się do warunków zapytania. Alternatywnie, definicję perspektywy umieszczamy we frazie FROM, używajac nazwy perspektywy jako zmiennej krotkowej

Modyfikacje wierszy perspektyw Modyfikacje sa dozwolone w zasadzie tylko dla aktualizowalnych perspektyw: zbudowanych na podstawie pojedynczej tabeli, oraz obejmujacych wszystkie atrybuty nie posiadajace wartości domyślnych.

Modyfikacje wierszy perspektyw Warto zabronić operacji wstawiania i modyfikacji perspektywy dajacych wiersze, które nie należałyby do perspektywy, używajac podczas jej tworzenia frazy WITH CHECK OPTION: CREATE VIEW GatunkiAfryki AS SELECT * FROM Gatunki WHERE kontynent = Afryka WITH CHECK OPTION;

Kursory Kursory służa do krokowego przegladania wyniku zapytania. Używa się ich przede wszystkim w procedurach składowanych. Kursor deklarujemy poleceniem DECLARE DECLARE kursor_gatkon CURSOR FOR SELECT nazwa,kontynent FROM Gatunki; Z kursora można pobierać kolejne wiersze używajac polecenia FETCH [ kierunek ] [ ile ] IN FROM kursor

Kursory Parametr kierunek definiuje kierunek pobierania wierszy i może być równy FORWARD pobiera następne wiersze (zachowanie domyślne) BACKWARD pobiera poprzednie wiersze. Parametr ile określa, ile wierszy należy pobrać i może być równy n Liczba ze znakiem podajaca liczbę wierszy do pobrania. Podanie liczby ujemnej zamienia znaczenie FORWARD i BACKWARD. ALL Wszystkie pozostałe wiersze. NEXT Równoważny podaniu 1. PRIOR Równoważny podaniu -1.

Kursory przykłady Aby pobrać dwa kolejne wiersze z kursora => FETCH 2 FROM kursor_gatkon; nazwa kontynent ---------------------- lew Afryka bóbr Europa

Kursory cofanie się Po kursorze można się cofać FETCH -1 FROM kursor_gatkon; lub -- Pobierz poprzedni wiersz FETCH BACKWARD 1 FROM kursor_gatkon;

Pozycjonowanie kursora Kursor można pozycjonować bez pobierania wierszy poleceniem MOVE [ kierunek ] [ ile ] IN FROM kursor Znaczenie parametrów jest takie, jak dla FETCH. Aby przestawić kursor o 5 wierszy do przodu MOVE 5 FROM kursor_gatkon; Na zakończenie kursor należy zamknać CLOSE kursor_gatkon;

Pozycjonowanie kursora Uwaga: kursory działaja tylko wewnatrz transakcji, czyli przed ich użyciem należy wykonać BEGIN WORK; (o ile nie jesteśmy wewnatrz otwartej transakcji), a potem (niekoniecznie natychmiast) zamknać transakcję COMMIT WORK; Nie jest możliwa aktualizacja bieżacego wiersza kursora, trzeba używać niezależnego polecenia UPDATE. SQL-2 nie zawiera polecenia MOVE, ale za to pozwala na absolutne pozycjonowanie kursora, co w PostgresSQL nie jest zrealizowane (???).

Asercje Chyba nie występuja nigdzie poza dokumentami standardu SQL! Składnia: CREATE ASSERTION nazwa CHECK (warunek); Przykład hipotetycznego użycia: CREATE ASSERTION DodatniaWaga CHECK (NOT EXISTS (SELECT * FROM Zwierzaki WHERE waga < 0));

Dziedziny Służa do określania typów danych. Polecenie CREATE DOMAIN AdresTyp AS VARCHAR(40) DEFAULT Nieznany ; tworzy nowy typ, którego można użyć wewnatrz CREATE TABLE CREATE TABLE Studenci ( indeks CHAR(6) PRIMARY KEY, imie VARCHAR(15) NOT NULL, nazwisko VARCHAR(15) NOT NULL, adres AdresTyp ); Dziedzinę usuwamy poleceniem DROP DOMAIN AdresTyp;

Indeksy Indeksy służa do przyspieszania przeszukiwania tabel. Polecenie CREATE INDEX definiuje nowy indeks dla podanej tabeli. Pojawiło się dopiero w SQL-3. CREATE [ UNIQUE ] INDEX nazwa-indeksu ON tabela (kolumna [,...]) [ WHERE warunek ] Utworzony indeks będzie oparty na kluczu indeksowym powstałym przez konkatenację podanych kolumn. Parametr UNIQUE powoduje sprawdzanie duplikatów klucza indeksowego podczas tworzenia indeksu i przy każdej modyfikacji tabeli. Do usuwania indeksu służy polecenie DROP INDEX.

Przykłady indeksów Utworzymy prosty indeks na kolumnie kontynent tabeli Gatunki CREATE INDEX IndGat ON Gatunki(kontynent); Indeks może obejmować kilka kolumn. CREATE INDEX IndKontChron ON Gatunki(kontynent,chroniony); Usuwanie indeksu: DROP INDEX IndGat;

Indeksy funkcyjne (Postgres) W Postgresie istnieje też inna postać definicji indeksu: CREATE [ UNIQUE ] INDEX nazwa-indeksu ON tabela (funkcja(kolumna [,... ])) [ WHERE warunek ] Służy ona do definiowania indeksów funkcyjnych, gdzie wartościa klucza indeksowego jest wynik wywołania określonej przez użytkownika funkcji, której parametrami sa podane kolumny indeksowanej tabeli. Przykładowo, użycie funkcji upper(kolumna) pozwoli podczas indeksowania ignorować rozróżnianie dużych i małych liter. CREATE INDEX test1_idx ON test1(upper(kol1)); Wartość funkcji używanej w indeksie musi zależeć jedynie od jej argumentów. Podczas jej tworzenia należy ja oznaczyć jako immutable.

Indeksy częściowe Jeśli w definicji indeksu występuje klauzula WHERE, to powstanie indeks częściowy, zawierajacy pozycje tylko dla wierszy tabeli spełniajacych podany warunek. Na przykład w tabeli zamówień można by zdefiniować indeks tylko dla wierszy zawierajacych tak w kolumnie zapłacono. Wyrażenie w klauzuli WHERE może odwoływać się tylko do kolumn indeksowanej tabeli, nie wolno też używać podzapytań ani funkcji agregujacych.

Sekwencje Służa do otrzymania kolejnych wartości dla kolumn typu całkowitego. Tworzenie CREATE SEQUENCE sekw_kat INCREMENT BY 1 START WITH 1; Generowanie kolejnej wartości funkcja nextval (jej argumentem jest nazwa generatora): SELECT nextval( sekw_kat ); Wywołanie nextval można też umieścić we frazie DEFAULT definicji kolumny w poleceniu CREATE TABLE.

Sekwencje Do otrzymania bieżacej wartości generatora sekwencji służy funkcja curval. SELECT curval( sekw_kat ); zaś do ustawienia na konkretna wartość funkcja setval SELECT setval( sekw_kat, 12); Zamiast umieszczać wywołanie nextval we frazie DEFAULT, można jako typ takiej kolumny podać SERIAL. Zostanie wtedy automatycznie utworzona sekwencja, a kolumna będzie w rzeczywistości typu INT4.

Użytkownicy Zmiana hasła użytkownika ALTER USER nazwa PASSWORD nowe-hasło ;