Relacyjne bazy danych Podstawy SQL
Język SQL SQL (Structured Query Language) język umoŝliwiający dostęp i przetwarzanie danych w bazie danych na poziomie obiektów modelu relacyjnego tj. tabel i perspektyw. Po co się uczyć? SQL umoŝliwia odczyt informacji z kaŝdej relacyjnej bazy danych zrozumienie mechanizmów rządzących graficznymi interfejsami uŝytkownika moŝliwość tworzenia złoŝonych zapytań wiedza przydatna na wielu platformach sprzętowych
Funkcje realizowane przez SQL definicja struktury bazy danych odczyt danych modyfikacja danych kontrola dostępu współuŝytkowanie danych integralność danych MoŜna uŝywać go jako: element aplikacji i narzędzi programowych interakcyjny język zapytań język komunikacji pomiędzy róŝnymi SZRBD
Składnia SQL - SELECT SELECT FROM nazwa kolumny nazwa tabeli WHERE GROUP BY warunek wyszukiwania nazwa kolumny
Składnia SQL - SELECT SELECT nazwa kolumny FROM nazwa tabeli Przykłady: SELECT nazwisko FROM TSedziowie SELECT nazwa, id FROM TKluby SELECT gol1, gol2, gol3, gol4 FROM TMecze SELECT * FROM TKluby
SELECT eliminowanie duplikatów nazwa kolumny SELECT FROM nazwa tabeli DISTINCT Przykłady: SELECT DISTINCT kolejka FROM TMecze
Sortowanie rekordów nazwa kolumny SELECT FROM nazwa tabeli ORDER BY nazwa kolumny ASC Przykłady: DESC SELECT imie, nazwisko FROM TSedziowie ORDER BY nazwisko, imie ASC SELECT imie, nazwisko FROM TSedziowie ORDER BY nazwisko, imie DESC SELECT imie, nazwisko FROM TSedziowie ORDER BY nazwisko ASC, imie DESC SELECT DISTINCT kolejka FROM TMecze ORDER BY kolejka DESC
Proste wyraŝenia MoŜna uŝywać operatorów do wykonywania działań na polach, np. +, -, *, /, Przykłady: SELECT domin-odmin FROM tsklady
Nadawanie nazw wyraŝenie SELECT AS nazwa kolumny - nowa Przykłady: SELECT domin-odmin AS CzasGryPiłkarza FROM tsklady SELECT m.id, k1.nazwa, k2.nazwa FROM TMecze AS m, TKluby AS k1, TKLuby AS k2
Filtrowanie danych SELECT DISTINCT wyraŝenie AS alias FROM nazwa tabeli WHERE warunek wyszukiwania Przykłady: SELECT * FROM tkartkigole WHERE rodzaj = 'K' SELECT imie, nazwisko FROM TPilkarze WHERE klubid = 3 SELECT nazwa FROM TKluby WHERE id = 999 SELECT p.imie, p.nazwisko, k.nazwa FROM TPilkarze as p, TKluby as k WHERE p.klubid = k.id AND k.id = 4 ORDER BY p.nazwisko
Filtrowanie danych warunki wyszukiwania Podstawowe warunki: porównanie (operatory: =, <>, <, >, <=, >=) zakres (BETWEEN AND ) występowanie (IN) wzór (LIKE) % - zastępuje dowolny ciąg znaków _ - zastępuje pojedynczy znak puste wartości (IS NULL) istnienie (EXISTS)
Filtrowanie danych warunki wyszukiwania Przykłady: SELECT * FROM tsedziowie WHERE miasto <> 'Warszawa' SELECT * FROM tmecze WHERE kiedy BETWEEN '2003-08-16' AND '2003-09-13' SELECT * FROM tmecze WHERE kolejka IN ('2', '3', '5') SELECT * FROM tsedziowie WHERE miasto IS NULL SELECT imie, nazwisko FROM tsedziowie WHERE nazwisko LIKE 'G%'
Filtrowanie danych łączenie predykatów Warunki złoŝone buduje się przy pomocy operatorów logicznych AND, OR, NOT Przykłady: SELECT p.imie, p.nazwisko, k.nazwa FROM TPilkarze as p, TKluby as k WHERE p.klubid = k.id AND k.id = 4 ORDER BY p.nazwisko SELECT id FROM TMecze WHERE gospodarz = 5 OR przeciwnik = 5
Proste funkcje agregujące SELECT COUNT (*) wyraŝenie AS alias COUNT SUM AVG MIN MAX FROM nazwa tabeli WHERE warunek wyszukiwania
Proste funkcje agregujące Przykłady: SELECT SUM(widownia) FROM Tmecze SELECT SUM(gol1) + SUM(gol2) FROM TMecze SELECT COUNT(*) FROM TPilkarze, TKluby SELECT COUNT(*) FROM tkartkigole WHERE rodzaj = 'S' SELECT COUNT(*) as ilegoli FROM tkartkigole WHERE rodzaj = 'N' OR rodzaj = 'K' OR rodzaj = 'S'
Zapytania wielotabelowe WaŜne: naleŝy podać wszystkie nazwy tablic w klazuzuli FROM w celu uniknięcia niejednoznaczności naleŝy stosować nazwy kwalifikowane pól (poprzedzone nazwą tabeli lub alias) we frazie WHERE naleŝy umieścić warunek wiąŝący zbiory Nazwa kwalifikowana: np. GoleKartki.rodzaj, TKluby.nazwa Alias tablicy umieszcza się we frazie FROM np. FROM TMecze AS m, TKluby AS k1, TKLuby AS k2
Zapytania wielotabelowe - przykłady Zapytanie SELECT imie, nazwisko, nazwa FROM TPilkarze, TKluby zwraca wszystkie moŝliwe kombinacje rekordów tabel TPilkarze, TKluby w ilości: SELECT COUNT(*) FROM TPilkarze, TKluby czyli iloczyn: SELECT COUNT(*) FROM TPilkarze SELECT COUNT(*) FROM TKluby
Zapytania wielotabelowe - przykłady SELECT COUNT(*) as liczbapilkarzy FROM TPilkarze AS p, TKluby AS k WHERE p.klubid = k.id AND k.id = 4 SELECT p.imie, p.nazwisko, k.nazwa FROM TPilkarze AS p, TKluby AS k WHERE p.klubid = k.id AND p.id = 179 SELECT k1.nazwa, k2.nazwa, m.id FROM TKluby AS k1, TKluby AS k2, TMecze AS m WHERE m.id = 5 AND k1.id = m.gospodarz AND k2.id = m.przeciwnik
Klauzula JOIN nazwa kolumny SELECT FROM nazwa tabeli JOIN nazwa tabeli ON warunek wyszukiwania Klazula JOIN pozwala łączyć ze sobą kilka tabel wykorzystując do tego klucze główne i obce. Dotyczy tylko tych wierszy, które mają swoje odpowiedniki w tabeli komplementarnej.
Klauzula JOIN - przykłady SELECT COUNT(*) as liczbapilkarzy FROM TPilkarze AS p JOIN TKluby AS k ON p.klubid = k.id AND k.id = 4 SELECT p.imie, p.nazwisko, k.nazwa FROM TPilkarze AS p JOIN TKluby AS k ON p.klubid = k.id AND p.id = 179 SELECT imie, nazwisko, nazwa FROM TPilkarze JOIN TKluby ON TPilkarze.klubid = TKluby.id AND TPilkarze.id = 179
Klauzula GROUP BY nazwa kolumny SELECT FROM nazwa tabeli WHERE warunek wyszukiwania GROUP BY nazwa kolumny Przykłady: liczba goli i kartek zdobytych przez kaŝdego z piłkarzy SELECT pilkarzid, COUNT(*) as ile FROM tkartkigole GROUP BY pilkarzid ORDER BY ile DESC liczba goli zdobyta przez kaŝdego z piłkarzy SELECT pilkarzid, COUNT(*) as ile FROM tkartkigole WHERE (rodzaj = 'N' OR rodzaj = 'K') GROUP BY pilkarzid ORDER BY ile DESC
Klauzula GROUP BY - c.d. Co z nazwiskami piłkarzy, jak je uzyskać? SELECT p.imie, p.nazwisko, pilkarzid, COUNT(*) AS ile FROM tkartkigole, TPilkarze AS p WHERE (rodzaj = 'N' OR rodzaj = 'K') AND p.id = pilkarzid GROUP BY pilkarzid ORDER BY ile DESC
Klauzula GROUP BY c. d. Jak uzyskać listę strzelców z danego klubu? SELECT p.imie, p.nazwisko, kl.nazwa, COUNT(*) AS ile FROM tkartkigole AS gol, TPilkarze AS p, TKluby AS kl WHERE gol.rodzaj = 'N' AND p.id = gol.pilkarzid AND kl.id = gol.klubid AND kl.id = 2 GROUP BY gol.pilkarzid ORDER BY ile DESC
Ograniczenie liczby rekordów - LIMIT Klauzula LIMIT ogranicza liczbę jednocześnie wyświetlanych rekordów SELECT * FROM `tmecze` LIMIT 15 zwraca 15 pierwszych rekordów SELECT * FROM `tsklady` LIMIT 105, 15 zwraca 15 kolejnych rekordów pomijając pierwsze 105
Instrukcje modyfikacji tablic INSERT pozwala dopisywać nowe wiersze do tablicy UPDATE - pozwala modyfikować istniejące dane DELETE pozwala usunąć wiersze z tablicy
Instrukcja INSERT INSERT INTO nazwa tabeli, ew. nazwy kolumn VALUES wartości Przykłady: INSERT INTO tkartkigole VALUES ( '1', '1', '266', '7', '28', 'K'); INSERT INTO TPilkarze VALUES ( '114', 'Piotr', 'Soczewka', '2'); INSERT INTO TPilkarze (id, imie, nazwisko) VALUES ( '350', 'Grzegorz', 'Kowalski');
Instrukcja UPDATE UPDATE nazwa tabeli WHERE SET wartości warunek wyszukiwania SET podaje nazwy kolumn i przypisane im nowe wartości WHERE określa, które rekordy mają być modyfikowane Przykłady: UPDATE TPilkarze SET nazwisko = 'Gruszka' WHERE id = 114; UPDATE TPilkarze SET imie = 'Jan', nazwisko = 'Gruszka' WHERE id = 114;
Instrukcja DELETE DELETE FROM nazwa tabeli WHERE warunek wyszukiwania Przykłady: DELETE FROM TPilkarze WHERE id = 350; DELETE FROM TPilkarze WHERE klubid IN (SELECT id FROM tkluby WHERE nazwa LIKE '%Warszawa%');
Tworzenie tabel CREATE TABLE nazwa tabeli WHERE nazwa kolumny=typ Przykłady: CREATE TABLE TPilkarze ( id int(11) NOT NULL auto_increment, imie varchar(75) NOT NULL, nazwisko varchar(75) NOT NULL, klubid int(11), PRIMARY KEY (id), UNIQUE id_2 (id), KEY id (id, imie, nazwisko, klubid) );
Usuwanie tabel DROP TABLE nazwa tabeli Przykłady: DROP TABLE TPilkarze DROP TABLE TMecze DROP TABLE tkartkigole
Klauzula UNION Klauzula UNION słuŝy do łączenia rezultatów dwóch lub więcej instrukcji SELECT w jedną tablicę Łączone instrukcje SELECT muszą spełniać określone warunki: muszą zawierać tę samą liczbe kolumn odpowiednie kolumny ze wszystkich instrukcji SELECT muszą mieć zgodne typy klauzula ORDER BY moŝe wystąpić tylko w ostatniej instrukcji SELECT
Klauzula UNION SELECT * FROM tkartkigole WHERE rodzaj = 'N' UNION SELECT * FROM tkartkigole WHERE rodzaj = 'S'