Informatyka (5) SQL dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro katpalik@pg.gda.pl katarzyna.palikowska@wilis.pg.gda.pl
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
CREATE ALTER DROP create table Ksiazka ( isbn char(30) not null, tytul char(200) not null, rok_wydania int, nr_wydania char(10), id_wydawnictwa int, Nazwa Typ Właściwości NOT NULL NOT NULL DEFAULT 2016 NOT NULL UNIQUE PRIMARY KEY (isbn) ) ALTER TABLE ksiazka ADD liczba_stron int null drop table Ksiazka
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, )
UPDATE UPDATE Czytelnik SET Imie= Andrzej WHERE Nazwisko = Kowalski UPDATE Czytelnik SET Imie= Andrzej WHERE ID = 5
DELETE Delete from Czytelnik WHERE Nazwisko = Kowalski ON UPDATE/DELETE CASCADE ON UPDATE/DELETE RESTRICT ON UPDATE/DELETE SET NULL Integralność danych Integralność referencyjna
SELECT SELECT * SELECT Nazwisko,Imie ORDER BY Nazwisko ASC,Imie DESC SELECT Nazwisko,Imie SELECT TOP 10 Nazwisko,Imie SELECT DISTINCT Miasto SELECT Nazwisko,Imie WHERE Data_ur < 1960-01-01 AND Imie= Jan SELECT Nazwisko,Imie WHERE Nazwisko LIKE %wak SELECT Nazwisko,Imie WHERE Nazwisko LIKE K% OR Miasto LIKE _op%
SELECT cd. SELECT Nazwisko,Imie,Tytul,Data_wypozyczenia INNER JOIN Wypozyczenie ON Wypozyczenie.id_czytelnika = Czytelnik.ID INNER JOIN Ksiazka ON Wypozyczenie.id_ksiazki=Ksiazka.ID SELECT Nazwisko,Imie,Tytul,Data_wypozyczenia INNER JOIN Wypozyczenie ON Wypozyczenie.id_czytelnika = Czytelnik.ID INNER JOIN Ksiazka ON Wypozyczenie.id_ksiazki=Ksiazka.ID WHERE Data_zwrotu IS NULL SELECT Nazwisko,Imie,Tytul,Data_wypozyczenia INNER JOIN Wypozyczenie ON Wypozyczenie.id_czytelnika = Czytelnik.ID INNER JOIN Ksiazka ON Wypozyczenie.id_ksiazki=Ksiazka.ID WHERE Data_zwrotu IS NULL AND Termin_zwrotu < GetDate()
SELECT cd. SELECT Tytul,Rok_wydania,Wydawnictwo.Nazwa FROM Ksiazka LEFT OUTER JOIN Wydawnictwo ON Wydawnictwo.ID = Ksiazka.id_wydawnictwa RIGHT OUTER FULL OUTER
SELECT cd. WHERE ID IN (5,10,15) WHERE ID NOT IN (5,10,15) WHERE ID NOT IN (SELECT id_czytelnika FROM Wypozyczenia), (SELECT TOP 1 Data_wypozyczenia FROM Wypozyczenia WHERE Wypozyczenia.id_Czytelnika=Czytelnik.ID ORDER BY Data_wypozyczenia DESC) Zapytania zagnieżdżone
Suma zbiorów UNION Wybierz czytelników, którzy wypożyczali książki wydawnictwa HELION lub mieszkają w Gdyni INNER JOIN wypozyczenie ON Czytelnik.ID = wypozyczenie.id_czytelnika INNER JOIN ksiazka ON wypozyczenie.id_ksiazki = ksiazka.id INNER JOIN wydawnictwo ON ksiazka.id_wydawnictwa = wydawnictwo.id WHERE wydawnictwo.nazwa= HELION UNION INNER JOIN czytelnik_adres ON Czytelnik.ID = czytelnik_adres.id_czytelnika INNER JOIN adres ON czytelnik_adres.id_adresu = adres.id WHERE adres.miejscowosc= Gdynia
Różnica zbiorów EXCEPT Wybierz czytelników, którzy wypożyczali książki wydawnictwa HELION ale nie mieszkają w Gdyni INNER JOIN wypozyczenie ON Czytelnik.ID = wypozyczenie.id_czytelnika INNER JOIN ksiazka ON wypozyczenie.id_ksiazki = ksiazka.id INNER JOIN wydawnictwo ON ksiazka.id_wydawnictwa = wydawnictwo.id WHERE wydawnictwo.nazwa= HELION EXCEPT INNER JOIN czytelnik_adres ON Czytelnik.ID = czytelnik_adres.id_czytelnika INNER JOIN adres ON czytelnik_adres.id_adresu = adres.id WHERE adres.miejscowosc= Gdynia
Iloczyn zbiorów INTERSECT Wybierz czytelników, którzy wypożyczali książki wydawnictwa HELION i mieszkają w Gdyni INNER JOIN wypozyczenie ON Czytelnik.ID = wypozyczenie.id_czytelnika INNER JOIN ksiazka ON wypozyczenie.id_ksiazki = ksiazka.id INNER JOIN wydawnictwo ON ksiazka.id_wydawnictwa = wydawnictwo.id WHERE wydawnictwo.nazwa= HELION INTERSECT INNER JOIN czytelnik_adres ON Czytelnik.ID = czytelnik_adres.id_czytelnika INNER JOIN adres ON czytelnik_adres.id_adresu = adres.id WHERE adres.miejscowosc= Gdynia
Funkcje agregujące SUM() COUNT() MAX() MIN() AVG() SELECT COUNT(Wypozyczenia ID) FROM Wypozyczenia SELECT Miasto, COUNT(Wypozyczenia ID) FROM Wypozyczenia INNER JOIN Czytelnik ON Czytelnik.ID=Wypozyczenia.id_czytelnika GROUP BY Miasto SELECT Miasto, COUNT(Wypozyczenia ID) AS Liczba FROM Wypozyczenia INNER JOIN Czytelnik ON Czytelnik.ID=Wypozyczenia.id_czytelnika GROUP BY Miasto ORDER BY Liczba DESC
GROUP BY Wybierz czytelników, którzy wypożyczyli więcej niż 5 książek i mają więcej niż 50 lat INNER JOIN wypozyczenie ON Czytelnik.ID = wypozyczenie.id_czytelnika WHERE Year(Czytelnik.data_ur) <= 1966 GROUP BY Nazwisko, Imie HAVING COUNT(wypozyczenie.id_czytelnika) > 5 WHERE - warunek selekcji HAVING opóźniony warunek selekcji
SELECT COUNT(ID) FROM Ksiazka SELECT gatunek, COUNT(ID) FROM Ksiazka GROUP BY gatunek SELECT gatunek, COUNT(ID), SUM(Cena), AVG(Cena), MAX(Cena), MIN(Cena) FROM Ksiazka GROUP BY gatunek SELECT gatunek, COUNT(ID), SUM(Cena), AVG(Cena), MAX(Cena), MIN(Cena) FROM Ksiazka GROUP BY gatunek HAVING MIN(Cena) > 10