Informatyka (1) Bazy danych dr inż. Katarzyna Palikowska Katedra Transportu Szynowego i Mostów p. 4 Hydro katpalik@pg.gda.pl katarzyna.palikowska@wilis.pg.gda.pl
Bazy danych System bazy danych = Trwała pamięć zewnętrzna + System zarządzania (DBMS) + Język zapytań lata 60-te lata 70-te lata 80-te lata 90-te ok. 2000 r. Systemy plików Hierarchiczne bazy danych Sieciowe bazy danych Relacyjne bazy danych Obiektowe bazy danych Obiektowo-Relacyjne bazy danych XML, Semistrukturalne bazy danych Projektowanie modelu logicznego i fizycznego danych przechowywanych w trwałej pamięci zewnętrznej Język zapytań SQL
Systemy plików Płaski plik (ang. flat file) dane zapisane w sposób liniowy analogicznie do taśmy magnetycznej (ang. streamer), brak relacji pomiędzy plikami Specyfikacja struktury pliku 1) Marka; Nr rejestracyjny; Opis $ Format CSV (ang. Comma Separated Values) ; - separator pola $ - separator rekordu Volvo; GA72345;opis samochodu...$fiat;wa98340;w stanie dobrym rok produkcji 2005...$ Mercedes;NR393939;po licznych naprawach... 2) Marka string(20), Nr rejestracyjny string(10), Opis string(255) 1x285 2x285 1 21 31 285 Volvo GA72345 opis samochodu... Fiat WA98340 w stanie dobrym rok produkcji 2005... Mercedes NR393939po licznych naprawach...
Systemy plików Obecne zastosowanie wymiana danych pomiędzy systemami
Przykład Rejestr systemu Windows Struktura drzewa Hierarchiczna baza danych
Struktura grafu Sieciowa baza danych Firma rekord Oddział Oddział zbiór Pracownik Pracownik Pracownik Pracownik Pracownik Maszyna Maszyna Maszyna
Rola DBMS Zapewnienie współbieżnego dostępu do danych Obsługa rozproszenia Ochrona danych kontrola uprawnień Zapewnienie integralności danych Bezpieczeństwo. Śledzenie zmian. Odtwarzanie po awarii.
Plan wykładu 1. Etapy wytwarzania oprogramowania 2. Specyfikacja wymagań 3. Diagram związków encji 4. Model relacyjny 5. Normalizacja 6. Schemat bazy danych
Inżynieria oprogramowania Analiza Metodyka AGILE ( zwinna ) Projektowanie Kodowanie Analiza Testowanie Projektowanie Kodowanie Fragment systemu Model kaskadowy (ang. waterfall) Testowanie System Analiza Testowanie Projektowanie Kodowanie Analiza Testowanie Projektowanie Kodowanie Model iteracyjny
Określenie wymagań (ang. requirements) Analiza Potrzeby Wymagania biznesowe Wymagania użytkownika Reguły biznesowe Atrybuty jakości Wymagania systemowe Wymagania funkcjonalne Zewnętrzne interfejsy Ograniczenia Specyfikacja wymagań
Przypadki użycia Załóż konto Pracownik Zaloguj Czytelnik Wyszukaj Weryfikuj tożsamość Diagramy UML Przypomnij Wypożycz System
Wymagania funkcjonalne: Specyfikacja wymagań System powinien umożliwić: 1. Założenie konta 2. Przeglądanie katalogu książek na podstawie następujących kryteriów: autor, tytuł, wydawnictwo itd. 3. Złożenie zamówienia dot. wypożyczenia książki 4. Sprawdzenie stanu konta Czytelnika 5. Automatyczne wygenerowanie przypomnień dot. zwrotu wypożyczonych książek. Reguły biznesowe, ograniczenia: 1. Czytelnik może wypożyczyć max. 5 książek 2. Przypomnienia generowane są po 2 miesiącach od wypożyczenia Poprawność Jednoznaczność Kompletność Spójność Uporządkowanie (priorytety) Weryfikowalność Modyfikowalność Powiązanie Wiek czytelnika >= 12 lat, stały adres zamieszkania na terenie województwa X,
Modelowanie ŚWIAT RZECZYWISTY Wymagania, Uproszczenia MODEL Diagram związków encji MODEL DANYCH Model relacyjny SCHEMAT BAZY DANYCH
Diagram związków encji (ERD) 1. Identyfikacja encji Książka Czytelnik Pracownik Konto Autor Tytuł ISBN Rok wydania. Imię Nazwisko Data ur Adres. PESEL 2. Identyfikacja atrybutów Imię Nazwisko Nr służbowy Stanowisko Data ur Adres. Login Hasło Data utworzenia Przypomnienie Data przygotowania Status 3. Identyfikacja kluczy Klucz główny, Klucz alternatywny PESEL Imię, Nazwisko, Data ur, Imię ojca
Diagram związków encji (ERD) cd. 3. Identyfikacja relacji i ich typów Czytelnik posiada 1:1 Czytelnik posiada 1:n Konto Konto 1:1 jeden do jeden 1:n jeden do wielu n:m wiele do wielu 1:0 1 1:0...n opcjonalność Czytelnik posiada 1:0 n Konto Książka wypożycza Czytelnik
Diagram związków encji (ERD) cd. Czytelnik posiada Konto wypożycza otrzymuje Książka dotyczy Przypomnienie Czytelnik posiada Konto Wypożyczenie dotyczy Przypomnienie Wypożyczenie Książka Data wypożyczenia Termin zwrotu
Reprezentacja relacji Czytelnik posiada Konto Wypożyczenie dotyczy Przypomnienie Tabela jest wygodną reprezentacją relacji: wiersze reprezentują rekordy (krotki) kolumny reprezentują atrybuty Książka Czytelnik PESEL Imię Nazwisko Data ur Adres 66012000991 Jan Nowak 1966-01-20 80-009 Gdańsk ul. Szeroka 2/1 55031288999 Janina Kowalska 1955-03-12 81-345 Gdynia ul. Dworcowa 3/3 Książka Model relacyjny ISBN Tytuł Rok wydania Autor 2228-29292 Baśnie 2002 Jan Chrystian Andersen Problemy do rozwiązania Więcej niż jeden adres: Adres zamieszkania, Adres korespondencyjny. Więcej niż jeden Autor Atomowość atrybutów
Model relacyjny Czytelnik PESEL Imię Nazwisko Data ur Adres 66012000991 Jan Nowak 1966-01-20 80-009 Gdańsk ul. Szeroka 2/1 55031288999 Janina Kowalska 1955-03-12 81-345 Gdynia ul. Dworcowa 3/3 Klucz główny (primary key) Klucze obce (foreign key) Klucz sztuczny (główny) ID 1 2 3 Ulica Adres Nr domu Nr lokalu Kod Miejsco wość Szeroka 2 1 80-009 Gdańsk Dworcowa 3 3 81-345 Gdynia Atomowość atrybutów Zielona 2A 10-900 Braniewo Poczta Posiada_Adres ID PESEL ID_Adres u Typ adresu 66012000991 1 Zameldowania 1 66012000991 3 Korespondencyjny 2 55031288999 2 Zameldowania 1 ID_typu_adresu Typ_adresu_słownik ID Typ adresu 1 Zameldowania 2 Korespondencyjny 3 Zamieszkania 4 Pobytu
Książka Model relacyjny ISBN Tytuł Rok wydania ID_wydawnictwa Nr wydania 2228-29292 Baśnie 2002 1 II Autor ID Imię Nazwisko 1 Jan Brzechwa 2 Jan Chrystian Andersen Posiada_autora ID ISBN ID_autora lp 1 2228-29292 2 1 2 Wydawnictwo ID Nazwa 1 PWN 2 Helion
create database Biblioteka create table Ksiazka ( isbn char(30), tytul char(200), rok_wydania integer, nr_wydania char(10), id_wydawnictwa integer, PRIMARY KEY (isbn) ) Schemat bazy danych create table Autor ( ID integer, imie char(30), nazwisko char(60), PRIMARY KEY (ID) ) Wydawnictwo Autor Posiada_Autora Książka create table Wydawnictwo ( ID integer, nazwa char(200), PRIMARY KEY (ID) ) create table Posiada_autora ( ID integer, isbn char(30), id_autora integer, lp byte, PRIMARY KEY (ID) )
create table Ksiazka ( isbn char(30), tytul char(200), rok_wydania integer, nr_wydania char(10), id_wydawnictwa integer, Ograniczenia (constraints) create table Wydawnictwo ( ID integer, nazwa char(200), PRIMARY KEY (ID) ) IDENTITY (1,1) NULL / NOT NULL PRIMARY KEY (isbn), FOREIGN KEY (id_wydawnictwa) REFERENCES Wydawnictwo ON DELETE SET NULL ) ON UPDATE/DELETE CASCADE ON UPDATE/DELETE RESTRICT ON UPDATE/DELETE SET NULL Integralność danych Integralność referencyjna Wydawnictwo Książka Co ma się stać w przypadku modyfikacji / usuwania rekordu nadrzędnego Kaskadowa modyfikacja / usunięci epodrzędnego Zabronione Ustawienie na NULL klucza obcego w podrzędnym rekordzie
Autor ID Imię Nazwisko 1 Jan Brzechwa 2 Jan Chrystian Andersen 3 Zbigniew Zach 4 Henryk Czech 5 Karolina Lech Indeks Czytelnik create index Autor_Nazwisko on Autor(nazwisko) Wyświetl autorów Dodatkowa struktura zawierająca informacje o fizycznej lokalizacji na dysku kolejnych rekordów wg ustalonego porządku sortowania Cel : przyspieszenie odczytu danych Wyszukaj: Kowalski K > C K < L Nazwisko ID Andersen 2 Brzechwa 1 Czech 4 Lech 5 Zach 3 ID 1 2 3 4 Tablice rozproszone Drzewa Adres fizycznej lokalizacji
Normalizacja (1NF) Postać normalna Klucz główny jednoznacznie identyfikujący każdą krotkę (rekord) encji (tabeli) Pierwsza postać normalna 1NF (1st Normal Form) Dekompozycja Atomowość atrybutów 1NF ID Adres 1 80-009 Gdańsk ul. Szeroka 2/1 2 81-345 Gdynia ul. Dworcowa 3/3 3 82-300 Elbląg Al. Zielona 1 ID Ulica Nr dom u Nr lokal u Kod Miejscowość Poczta 1 ul. Szeroka 2 1 80-009 Gdańsk Gdańsk 2 ul. Dworcowa 3 3 81-345 Gdynia Gdynia 3 Al. Zielona 1 82-300 Elbląg Elbląg Wprowadź adres ID Prze dro stek Ulica Nr dom u Nr lokal u Kod Miejscowość Poczta ##-### 1 ul. Szeroka 2 1 80-009 Gdańsk Gdańsk 2 ul. Dworcowa 3 3 81-345 Gdynia Gdynia 3 Al. Zielona 1 82-300 Elbląg Elbląg
Druga postać normalna 2NF Normalizacja (2NF) Atrybuty niekluczowe są zależne od całego klucza głównego 2NF Imię Nazwisko Data ur Stanowisko Mechanik 20 Księgowy 50 Kierowca 15 Kierowca 15 Mechanik 20 Anomalie: przy wstawianiu przy modyfikacji (np. podwyżka stawek wymaga modyfikacji wielu rekordów ) przy usuwaniu (np. usunięcie pracownika powoduje usunięcie stawki) Stawka godz. Stanowisko Mechanik 20 Księgowy 50 Kierowca 15 Stawka Dekompozycja Likwidowanie redundancji danych (nadmiarowości) bez ich utraty Stanowisko Stawka Data od Data do Mechanik 20 Księgowy 50 Kierowca 15 Celem normalizacji jest uniknięcie redundancji i anomalii
Normalizacja (3NF) Trzecia postać normalna 1NF Atrybuty niekluczowe są zależne bezpośrednio od klucza głównego 3NF ID Ulica Kod Miejsc owość Poczta 1 Szeroka 80-009 Gdańsk Gdańsk 2 Dworcowa 81-345 Gdynia Gdynia 3 Zielona 82-300 Elbląg Elbląg Kod wyznacza Pocztę Ulica Kod Miejsco wość Szeroka 80-009 Gdańsk Dworcowa 81-345 Gdynia Zielona 82-300 Elbląg Kod Poczta 80-009 Gdańsk 81-345 Gdynia 82-300 Elbląg
Normalizacja (BCNF, 4NF) Postać normalna Boyce a-codda (BCNF) Zależności funkcyjne spełniają regułę: X A A X X jest kluczem lub zawiera klucz 4 NF BCNF 3 NF 2 NF 1 NF ID Data wysłania Adresat Typ przesyłki Waga 1 2013-01-12 Nowak Jan zwykła 120g 5,50 2 2013-03-03 Firma Usługowo Handlowa PROMYK 3 Opłata priorytet 200g 8,50 Naruszenie BCNF Czwarta, piata postać normalna (4NF i 5NF) Warunki dot. zależności wielowartościowych Typ przesyłki Waga od Waga do Opłata zwykła 150g 5,50 priorytet 151g 250g 8,50
Przykład normalizacji ID Adres 1 80-009 Gdańsk ul. Szeroka 2/1 2 81-345 Gdynia ul. Dworcowa 3/3 3 82-300 Elbląg Al. Zielona 1 1NF ID Prze dro stek Ulica Nr dom u Nr lokal u Kod Miejscowość Poczta 1 ul. Szeroka 2 1 80-009 Gdańsk Gdańsk 2 ul. Dworcowa 3 3 81-345 Gdynia Gdynia 3 Al. Zielona 1 82-300 Elbląg Elbląg Ulica Kod Miejscowość Szeroka 80-009 Gdańsk Dworcowa 81-345 Gdynia Zielona 82-300 Elbląg 3NF Kod Poczta 80-009 Gdańsk 81-345 Gdynia 82-300 Elbląg ID Prze dro stek 1 ul. 2 Plac 3 Al. ID ID_prze drostka Ulica Kod Miejsco wość 11 1 Szeroka 80-009 Gdańsk 12 1 Dworcowa 81-345 Gdynia 13 3 Zielona 82-300 Elbląg Kod Poczta 80-009 Gdańsk 81-345 Gdynia 82-300 Elbląg ID ID_ul icy Nr dom u 1 11 2 1 2 12 3 3 3 13 1 Nr lokalu
ID Prze dro stek 1 ul. 2 Plac 3 Al. ID ID_prze drostka Ulica Kod Miejsco wość 11 1 Szeroka 80-009 Gdańsk 12 1 Dworcowa 81-345 Gdynia 13 3 Zielona 82-300 Elbląg 14 1 Łódzka 80-180 Gdańsk Kod Poczta 80-009 Gdańsk 81-345 Gdynia 82-300 Elbląg 80-180 Gdańsk ID ID_ul icy Nr dom u 1 11 2 1 2 12 3 3 3 13 1 Nr lokalu ID ID_prze drostka Ulica Kod ID miejsco wości 11 301 Szeroka 80-009 1 12 301 Dworcowa 81-345 2 13 303 Zielona 82-300 3 14 301 Łódzka 80-180 1 ID Poczta ID_powia tu 1 Gdańsk 2 Gdynia 3 Elbląg ID Miejscow ość 1 Gdańsk 1 2 Gdynia 2 3 Elbląg 3 4 Gronowo 3 ID_poczty Redukcja nadmiarowości Likwidacja anomalii Jakim kosztem? ID ID_ulicy Nr domu Nr lokalu 1 11 2 1 2 12 3 3 3 13 1
ID ID_ulicy Nr domu Nr lokalu 1 11 2 1 2 12 3 3 3 13 1 Problem - Czas dostępu (złożoność wyszukania danych) Redukcja czasu dostępu ID Adres 1 80-009 Gdańsk ul. Szeroka 2/1 2 81-345 Gdynia ul. Dworcowa 3/3 3 82-300 Elbląg Al. Zielona 1 Naruszenie 1NF brak atomowości atrybutu Adres ID Adres_linia1 Adres_linia2 1 ul. Szeroka 2/1 80-009 Gdańsk 2 ul. Dworcowa 3/3 81-345 Gdynia 3 Al. Zielona 1 82-300 Elbląg 4 Pietrzyków 157 62-840 Koźminek Naruszenie 1NF brak atomowości atrybutu ulica_nr ID Prze dro stek 1 ul. 2 Plac 3 Al. ID ID_przedr ostka Ulica_nr Kod Miejscowość Poczta 1 1 Szeroka 2/1 80-009 Gdańsk Gdańsk 2 1 Dworcowa 3/3 81-345 Gdynia Gdynia 3 3 Zielona 1 82-300 Elbląg Elbląg 4 1 Łódzka 4/5 m. 2 80-180 Gdańsk Gdańsk 5 NULL 157 62-840 Pietrzyków Koźminek
Baza danych ID Sklep Miasto 1 2 3 ID Produkt 1 2 3 Hurtownie danych Data Wartość Id_produktu Id_sklepu 2013-01-03 100 1 1 2013-01-13 130 1 1 2013-01-30 150 2 2 Redukcja czasu dostępu do zagregowanych danych Redundancja Źródło: http://edu.pjwstk.edu.pl/wyklady/hur/scb/wyklad7/w7.htm
SELECT INSERT UPDATE DELETE Konto Transakcja Nr_konta Kwota 23000011110000 1000 34555512130101 300 BEGIN TRAN T1 Operacja przelewu z konta na konto update Konto set kwota = kwota + 100 where nr_konta= 34555512130101 Awaria, odczyt niespójnych danych update Konto set kwota = kwota - 100 where nr_konta= 23000011110000 END TRAN T1 COMMIT ROLLBACK Zatwierdzenie zmian Cofnięcie zmian
Struktury hierarchiczne Pracownik Imię Nazwisko PESEL Kierownik Imię Nazwisko PESEL PESEL Imię Nazwisko PESEL_kierownika 66081200111 Jan Nowak 81021277999 81021277999 Karolina Kowalska NULL 57011933222 Edyta Fuk 66081200111 78020322222 Karol Terc 81021277999 Karolina Kowalska Karol Terc Jan Nowak Edyta Fuk PESEL Imię Nazwisko 66081200111 Jan Nowak 81021277999 Karolina Kowalska 57011933222 Edyta Fuk 78020322222 Karol Terc PESEL PESEL_kierownika 66081200111 81021277999 57011933222 78020322222 57011933222 66081200111 78020322222 81021277999. Pracownik Kierownik
Podsumowanie Tabela, rekord, krotka, wiersz Atrybut, kolumna, pole Atomowość atrybutu Klucz główny, alternatywny, obcy, sztuczny Integralność danych, integralność referencyjna Normalizacja Pierwsza postać normalna, Druga postać normalna, Trzecia postać normalna Redundancja danych Anomalia Indeks Hurtownia danych Transakcja
SQL Structured Query Language lata 70-te początki języka SQL 1986 pierwszy standard języka SQL Rozszerzenia: T-SQL (Microsoft), PL/SQL (Oracle), Inteligentne systemy wiedzy Narzędzia CASE, UML, systemy zarządzania bazami danych Generacja III.5 Środowiska programistyczne Języki wysokiego poziomu Asemblery Kod binarny SQL V IV III II I Generacje języków programowania
Język zapytań SQL Język deklaratywny (regułowy) - SQL, ProLog, CLIPS opis warunków, które powinno spełniać rozwiązanie zamiast sekwencji kroków do wykonania (języki imperatywne) SQL: Data Definition Language (DDL) Data Manipulation Language (DML) Data Control Language (DCL) CREATE ALTER DROP SELECT UPDATE DELETE INSERT GRANT REVOKE DENY
SQL DDL Kreator MS Access Utwórz pustą (nową) bazę danych Utwórz nową tabelę Wskazanie klucza głównego Modyfikuj istniejącą tabelę Usuń istniejącą tabelę Kreator odnośników Wymagalność Autonumerowanie Polecenie SQL create database Biblioteka create table Ksiazka ( isbn char(30), tytul char(200), rok_wydania integer, nr_wydania char(10), id_wydawnictwa integer, PRIMARY KEY (isbn) ) alter table Ksiazka drop table Ksiazka FOREIGN KEY (id_wydawnictwa) REFERENCES Wydawnictwo ON DELETE SET NULL NULL / NOT NULL IDENTITY (1,1)
Schemat bazy danych Klucze obce (foreign keys)
INSERT Import danych zewnętrznych Pliki xls XML HTML Pliki tekstowe INSERT INTO Czytelnik (pesel, imie, nazwisko, data_ur, email, plec) VALUES ( 66020102130, Jan, Kowalski, 1996-02-01, kowalski@wp.pl,0) INSERT INTO Ksiazka (isbn,tytul,rok ) VALUES ( 290-8282-0101, Baśnie,2010, )
Tabele wynikowe Czytelnik PESEL Imie Nazwisko Data_ur Ple c 66012000991 Jan Nowak 1966-01-20 M 55031288999 Janina Kowalska 1955-03-12 K 44021411188 Karol Brewak 1944-02-14 M SELECT Nazwisko,Imie FROM Czytelnik Nowak Kowalska Brewak Jan Janina Karol SELECT Nazwisko,Imie Porządkowanie FROM Czytelnik ORDER BY Nazwisko ASC,Imie DESC Brewak Kowalska Nowak Karol Janina Jan Tabela wejściowa SELECT SELECT Nazwisko,Imie Selekcja FROM Czytelnik WHERE Data_ur < 1960-01-01 Kowalska Brewak Janina Karol SELECT Nazwisko,Imie FROM Czytelnik WHERE Nazwisko LIKE %wak Nowak Brewak SELECT * FROM Czytelnik Projekcja (rzutowanie) wybór podzbioru kolumn Jan Karol
SELECT Czytelnik PESEL Imie Nazwisko Data_ur Plec 66012000991 Jan Nowak 1966-01-20 M 55031288999 Janina Kowalska 1955-03-12 K 44021411188 Karol Brewak 1944-02-14 M Adres ID Ulica Nr_ domu ID PESEL ID_Adre su Nr_ lokalu Typ adresu Kod 1 66012000991 1 Zameldowania 2 66012000991 3 Korespondencyjny 3 55031288999 2 Zameldowania 4 44021411188 2 Zameldowania Miejscow ość 1 Szeroka 2 1 80-009 Gdańsk 2 Dworcowa 3 3 81-345 Gdynia 3 Zielona 2A 10-900 Braniewo 4 Sienna 5 82-300 Elbląg Czytelnik_Adres Czytelnik SELECT Nazwisko,Imie, Miejscowosc FROM Czytelnik, Adres Ile rekordów zostanie zwróconych? Czytelnik_Adres 3x4=12 SELECT Nazwisko,Imie, Miejscowosc FROM Czytelnik, Adres, Czytelnik_Adres 3x4x4=48 Złączenie zwraca iloczyn kartezjański zbiorów Adres!!
Czytelnik PESEL Imie Nazwisko 66012000991 Jan Nowak 55031288999 Janina Kowalska 44021411188 Karol Brewak Czytelnik_Adres ID PESEL ID_Adre su Typ adresu 1 66012000991 1 Zameldowania 2 66012000991 3 Korespondencyjny 3 55031288999 2 Zameldowania 4 44021411188 2 Zameldowania Adres ID Ulica Nr_ domu Nr_ lokalu Kod SELECT Miejscowo ść 1 Szeroka 2 1 80-009 Gdańsk 2 Dworcowa 3 3 81-345 Gdynia 3 Zielona 2A 10-900 Braniewo SELECT Nazwisko,Imie, Miejscowosc FROM Czytelnik Czytelnik_Adres, Adres WHERE Czytelnik.PESEL = Czytelnik_Adres.PESEL AN Czytelnik_Adres.ID_Adresu = Adres.ID Nowak Jan Gdańsk Nowak Jan Braniewo Kowalska Janina Gdynia Brewak Karol Gdynia Wybierz czytelników z Gdyni: Kowalska Janina Gdynia Brewak Karol Gdynia Projekcja Złączenie Selekcja FROM Czytelnik JOIN Czytelnik_Adres ON Czytelnik.PESEL = Czytelnik_Adres.PESEL INNER JOIN Adres ON Czytelnik_Adres.ID_Adresu = Adres.ID WHERE Adres.Miejscowosc= Gdynia!
Czytelnik PESEL Imie Nazwisko 66012000991 Jan Nowak 55031288999 Janina Kowalska 44021411188 Karol Brewak Czytelnik_Adres ID PESEL ID_A dresu Typ adresu 1 66012000991 1 Zameldowania 2 66012000991 3 Korespondencyjny 3 55031288999 2 Zameldowania 4 44021411188 2 Zameldowania Wybierz czytelników, którzy nie posiadają żadnego adresu SELECT Nazwisko,Imie FROM Czytelnik WHERE Czytelnik.PESEL NOT IN ( SELECT PESEL FROM Czytelnik_Adres ) SELECT Wybierz czytelników, którzy nie posiadają adresu zameldowania SELECT Nazwisko,Imie FROM Czytelnik INNER JOIN Czytelnik_Adres ON Czytelnik.PESEL = Czytelnik_Adres.PESEL WHERE? Czytelnik_Adres.Typ_adresu <> Zameldowania Nowak Jan SELECT Nazwisko,Imie FROM Czytelnik WHERE Czytelnik.PESEL NOT IN ( ) SELECT PESEL FROM Czytelnik_Adres WHERE Typ_Adresu = Zameldowania Zapytania zagnieżdżone
JOIN Wybierz czytelników z ich adresami INNER JOIN - Złączenie wewnętrzne SELECT Nazwisko, Imię, Ulica, Miejscowosc FROM Czytelnik INNER JOIN Czytelnik_Adres ON Czytelnik.PESEL = Czytelnik_Adres.PESEL INNER JOIN Adres ON Czytelnik_Adres.ID_Adresu = Adres.ID PESEL Imie Nazwisko Data_ur Plec 66012000991 Jan Nowak 1966-01-20 M 55031288999 Janina Kowalska 1955-03-12 K 44021411188 Karol Brewak 1944-02-14 M Ile rekordów zostanie zwróconych? 2 ID PESEL ID_Adre su Typ adresu 1 66012000991 1 Zameldowania 2 66012000991 3 Korespondencyjny ID Ulica Nr_ domu Nr_ lokalu Kod Miejscowo ść 1 Szeroka 2 1 80-009 Gdańsk 2 Dworcowa 3 3 81-345 Gdynia 3 Zielona 2A 10-900 Braniewo SELECT Nazwisko, Imię, Ulica, Miejscowosc FROM Czytelnik LEFT OUTER JOIN Lewostronne złączenie zewnętrzne LEFT OUTER JOIN Czytelnik_Adres ON Czytelnik.PESEL = Czytelnik_Adres.PESEL LEFT OUTER JOIN Adres ON Czytelnik_Adres.ID_Adresu = Adres.ID 4
SELECT SELECT Nazwisko, Imie, 3 (SELECT TOP 1 Ulica + + Miejscowosc FROM Czytelnik_Adres INNER JOIN Adres ON Czytelnik_Adres.ID_Adresu = Adres.ID WHERE Czytelnik.PESEL = Czytelnik_Adres.PESEL) as dane_adresowe FROM Czytelnik Wybierz czytelników, którzy wypożyczali książki wydawnictwa HELION SELECT Nazwisko, Imie FROM Czytelnik INNER JOIN wypozyczenie ON Czytelnik.PESEL = wypozyczenie.pesel INNER JOIN ksiazka ON wypozyczenie.id_ksiazki = ksiazka.id INNER JOIN wydawnictwo ON ksiazka.id_wydawnictwa = wydawnictwo.id WHERE wydawnictwo.nazwa= HELION
Literatura Garcia-Molina H., Ullman J., Widom J. Systemy baz danych. Kompletny podręcznik, Helion 2011 Sacha K. Inżynieria oprogramowania, Wydawnictwo Naukowe PWN, Warszawa 2010