Podstawy języka SQL SQL Structured Query Languagestrukturalny język zapytań DDL Język definicji danych (np. tworzenie tabel) DML Język manipulacji danych (np. tworzenie zapytań) DCL Język kontroli danych (zapewniający wewnętrzne bezpieczeńswo baz danych)
SQL SQL nie jest w pełni uniwersalnym językiem programowania nie może być używany samoistnie do pisania aplikacji, nie jest generatorem interfejsu użytkownika nie wspiera tworzenia menu, struktury raportów, okien ubogi w konstrukcje nie jest w pełni ustandaryzowany i dlatego nie jest w pełni przenośny
Notacja Wielkie litery - wpisujemy bez zmian - słowa kluczowe np. CREATE kursywa - zastępujemy np. CREATE nazwa tabeli ( ) są częścią instrukcji oznacza lub np. { ASC DESC } element, - oznacza możliwość wielokrotnego powtórzenia tego elementu := zdefiniowane jako
Język definiowania danych DDL tworzenie tabeli, dodawanie i usuwanie, kolumn, definiowanie klucza, usuwanie tabeli
CREATE TABLE CREATE TABLE nazwa tablicy (Definicja kolumny, ); gdzie Definicja kolumny:= Nazwa kolumny Typ [(rozmiar)] [ ograniczenie] CREATE TABLE klient ( nazwisko CHAR(30), płeć CHAR(1) urodzony DATE );
Ograniczenie dla pojedynczego pola(umieszczane po definicji kolumny): CONSTRAINT nazwa {PRIMARY KEY UNIQUE NOT NULL REFERENCES tabela_obca [(pole_obce, )] [ON UPDATE CASCADE SET NULL] [ON DELETE CASCADE SET NULL]} Ograniczenie dla wielu pól (umieszczane po wszystkich definicjach kolumn): CONSTRAINT nazwa {PRIMARY KEY (podstawowe, ) UNIQUE (unikatowe, ) NOT NULL (niepuste, ) FOREIGN KEY [NO INDEX] (odwołanie, ) REFERENCES tabela_obca [(pole_obce, )]} [ON UPDATE CASCADE SET NULL] [ON DELETE CASCADE SET NULL]} Nazwa Nazwa tworzonego ograniczenia PRIMARY KEY pole (lub zbiór pól) jako klucz podstawowy (wartości klucza podstawowego muszą być unikatowe i mieć wartości różne od Null, tabela może zawierać tylko jeden klucz podstawowy. UNIQUE (lub zbiór pól) jako klucz unikatowy. Jeśli w jednym ograniczeniu wiele pól jest określonych jako klucz unikatowy, unikatowe muszą być wartości tych pól traktowane jako całość, natomiast w pojedynczych polach wartości mogą się powtarzać. NOT NULL pole musi mieć wartości różne od Null FOREIGN KEY pole (lub zbiór pól) jako klucz obcy. należy wymienić wszystkie pola składające się na klucz obcy, nazwę tabeli obcej oraz nazwy wskazywanych pól w tabeli obcej
podstawowe, Nazwa pola lub pól, które mają składać się na klucz podstawowy. unikatowe, Nazwa pola lub pól, które mają składać się na klucz unikatowy. niepuste, Nazwa pola lub pól, których wartości muszą być różne od Null. REFERENCES - odwołanie się do innej tabeli odwołanie, Nazwa pola lub pól mających być kluczem obcym związanym z tabelą obcą, tabela_obca Nazwa tabeli obcej do której się odwołujemy pole_obce, Nazwa pola lub pól w tabeli_obcej do których się odwołujemy
CREATE TABLE Klienci (KlientId INTEGER PRIMARY KEY,Nazwisko TEXT(15)) CREATE TABLE Zamówienia (ZamId INTEGER PRIMARY KEY, KlientId INTEGER, CONSTRAINT ZamKlient FOREIGN KEY (KlientId) REFERENCES Klienci ON UPDATE CASCADE ON DELETE CASCADE ) Klauzula ON UPDATE CASCADE oznacza, że jeśli identyfikator klienta (KlientId) jest aktualizowany w tabeli Klienci, aktualizacja ta będzie również przekazana tabeli Zamówienia. Każde zamówienie zawierające odpowiednią wartość identyfikatora klienta będzie automatycznie aktualizowane. Klauzula ON DELETE CASCADE oznacza, że jeśli klient jest usuwany z tabeli Klienci, wszystkie wiersze w tabeli Zamówienia zawierające ten sam identyfikator klienta też będą usunięte.
CREATE TABLE Klienci (KlientId INTEGER PRIMARY KEY,Nazwisko TEXT (15)) CREATE TABLE Zamówienia (ZamId INTEGER PRIMARY KEY, KlientId INTEGER, CONSTRAINT ZamKlient FOREIGN KEY (KlientId) REFERENCES Klienci ON UPDATE SET NULL ON DELETE SET NULL Klauzula ON UPDATE SET NULL oznacza, że jeśli identyfikator klienta (KlientId) jest aktualizowany w tabeli Klienci, odpowiednie wartości klucza obcego w tabeli Zamówienia będą automatycznie ustawione na NULL. Podobnie, klauzula ON DELETE SET NULL oznacza, że jeśli klient jest usunięty z tabeli Klienci, wszystkie odpowiadające mu klucze obce w tabeli Zamówienia będą automatycznie ustawione na NULL.
ALTER TABLE dodaje nową kolumnę, usuwa kolumnę z tabeli, dodaje lub usuwa indeks ALTER TABLE nazwa tablicy ADD COLUMN nazwa kolumny Typ [(rozmiar)] [ograniczenie] DROP COLUMN nazwa kolumny ADD CONSTRAINT ograniczenie wielokolumnowe DROP CONSTRAINT ograniczenie wielokolumnowe
Tworzenie indeksu CREATE [ UNIQUE ] INDEX indeks ON tabela (pole [ASC DESC],...) [WITH { PRIMARY DISALLOW NULL IGNORE NULL }] indeks Nazwa tworzonego indeksu. tabela Nazwa istniejącej tabeli, która będzie zawierać indeks. pole Nazwa pola lub pól, które mają być indeksowane. Aby utworzyć indeks dla wielu pól, należy podać nazwę każdego pola, które ma być włączone do indeksu. Aby utworzyć indeksy malejące, należy użyć słowa zastrzeżonego DESC; w przeciwnym przypadku indeksy będą uporządkowane rosnąco
Posługując się opcjonalną klauzulą WITH, można określić reguły poprawności danych. Na przykład: DISALLOW NULL, zapobieganie występowaniu wartości NULL w polu lub polach indeksowanych IGNORE NULL, zapobieganie dołączaniu rekordów zawierających w polu lub polach indeksowanych wartości NULL. Dodając słowo zastrzeżone PRIMARY, można określić indeksowane pole lub pola jakoklucz podstawowy Nie należy używać PRIMARY podczas tworzenia nowego indeksu dla tabeli, która już posiada klucz podstawowy.
Usuwanie tabel i indeksów DROP {TABLE tabela INDEX indeks ON tabela} tabela Nazwa tabeli, która ma być usunięta, lub też tabeli, z której ma być usunięty indeks index Nazwa indeksu, który ma być usunięty z tabeli. Przed usunięciem tabeli lub też usunięciem z niej indeksu należy tabelę zamknąć. Aby usunąć indeks z tabeli, można również użyć instrukcji ALTER TABLE.
Język manipulacji danych DML SELECT selekcja i projekcja UNION suma tabel UPDATE- aktualizacja danych w tabeli DELETE usuwanie wierszy INSERT INTO wstawianie wierszy PARAMETR uzyskanie informacji od użytkowanika w czasie działania kwerendy
Instrukcja SELECT SELECT [predykat] {Opis kolumn zwracanych} FROM wyrażenie tabelowe [WHERE warunek ] [GROUP BY kryteria grupowania ] [HAVING dodatkowe kryteria] [ORDER BY kryteria porządkujące]
FROM wyrażenie tabelowe Wyrażenie tabelowe może być nazwą pojedynczej tabeli, nazwami tabel oddzielonymi przecinkami lub sprzężeniem tabel Jeśli nazwy tabel są oddzielone przecinkami instrukcja tworzy iloczyn kartezjański tych tabel.
WHERE Warunek Warunek określa jakie wiersze mają się znaleźć w tabeli wynikowej Przykłady: WHERE Tytuł= prof.. WHERE Miasto IN ( Warszawa, Kraków ) WHERE Cena<100
ORDER BY kryteria porządkujące kryteria porządkujące:= Nazwa kolumny {ASC DESC}, Najpierw sortuje się względem pierwszej wskazanej kolumny, wiersze o identycznych wartościach w pierwszej sortowane są względem drugiej itd.. ASC rosnąo DESC malejąco
Predykat wskazuje jak obsłużyć duplikaty w zwróconych wierszach Możliwe wartości: ALL,DISTINCT, DISTINCTROW, TOP ALL wypisane wszystkie rekordy spełniające podane warunki (z powtórzeniami) DISTINCT Pomijane są te rekordy, które zawierają powtarzające się wartości we wskazanym polu (polach). DISTINCTROW Pomija powtarzające się dane na podstawie wartości całych rekordów, a nie jedynie wybranych pól.
Załóżmy, że tworzymy kwerendę, która sprzęga tabele Wydawnictwa i Książki według wartości polawydid. SELECT ALL WydNazwa FROM Wydawnictwa INNER JOIN Książki ON Wydawnictwa.WydId=Książki.WydId; Tabela wynikowa zwróci wiele duplikatów tego samego wydawnictwa SELECT DISTINCT WydNazwa FROM Wydawnictwa INNER JOIN Książki ON Wydawnictwa.WydId=Książki.WydId; Tabela wynikowa pominie kolejne powtórzenia tej samej nazwy. Jeśli dwa różne (o różnym WydId i innych danych) wydawnictwa mają tę samą nazwę zwróci tylko jedno z nich. SELECT DISTINCTROW WydNazwa FROM Wydawnictwa INNER JOIN Książki ON Wydawnictwa.WydId=Książki.WydId; Tabela wynikowa pominie kolejne powtórzenia tego samego wydawnictwa. Jeśli dwa różne (o różnym WydId i innych danych) wydawnictwa mają tę samą nazwę zwróci oba.
GROUP BY kryteria grupowania Instrukcja rozbijająca rekordy na grupy, w ramach których generowane są podsumowania w tabeli wynikowej Podsumowania dane przez funkcje agregujące np. : Avg, Count, Min, Max, Sum, Last,
Avg średnia arytmetyczna (suma/ilosc) Count funkcja zliczająca Count można np. używać do obliczania liczby rekordów w wyniku kwerendy. Count nie uwzględnia rekordów, których pola zawierają wartość Null za wyjątkiem sytuacji, gdy użyty zostanie znak gwiazdki, wtedy funkcja Count obliczy całkowitą liczbę rekordów First, Last - Zwracają wartość określonego pola odpowiednio pierwszego lub ostatniego rekordu z zestawu wyników zwróconego przez kwerendę. Sum funkcja sumowania,
Przykłady użycia funkcji agregujących SELECT wartość funkcji AS nazwa tabeli wynikowej FROM tabela źródłowa Oblicz wartość funkcji i zapisz w tabeli wynikowej na podstawie danych z tabeli źródłowej np. SELECT SUM(Wartosc) AS SumaWartosci FROM Sprzedaz SumaWartosci 4 345 678
SELECT Sum(Wartosc) AS SumaWartosci Avg(Wartosc) AS SredniaWartosc Min(Wartosc) AS MinimalnaWartosc FROM Zamówienia; SumaWartosci SredniaWartosc MinimalnaWartosc 4 345 678 456 234 53 112
1. Oblicz średnią wartość zamówień klienta o nazwisku Krawczyk: SELECT Avg(Wartosc) AS SredniaWartosc FROM Zamowienia WHERE Klient= Krawczyk GROUP BY 2. Te same informacje na temat każdego klienta SELECT Avg(Wartosc) AS SredniaWartosc FROM Sprzedaz GROUP BY Klient ORDER BY Klient
SELECT Klient, Dostawca, Avg(Wartosc) AS SredniaWartosc GROUP BY Klient, Dostawca; Rekordy pogrupowane wg pól Klient, Dostawca zliczona jest srednia wartosc zamówień klientów od określonych dostawców
GROUP BY HAVING Instrukcja GROUP BY grupuje rekordy klauzula HAVING umożliwia wybór niektórych z nich SELECT Klient, Dostawca, AVG(Wartosc) AS SredniaWartosc FROM SPRZEDAZ GROUP BY Klient, Dostawca HAVING AVG(Wartosc) >= 250;
Praca z wieloma tabelami SELECT SPRZEDAZ.Klient, PRACOWNICY.NAzwisko, SPRZEDAZ.NrPracownika, PRACOWNICY.NrPracownika FROM SPRZEDAZ, PRACOWNICY; Niewygodne (długie nazwy kwalifikowane)
Użycie zastępników nazw tabel SELECT S.Klient, S.Wartosc, P.Imie, P.Nazwisko, S.NrPracownika, P.NrPracownika FROM SPRZEDAZ AS S, PRACOWNICY AS P;
Sprzężenia wewnętrzne SELECT SAMOCHODY.Marka, SAMOCHODY.Model, PRACOWNICY.Imie, PRACOWNICY.Nazwisko FROM SAMOCHODY INNER JOIN PRACOWNICY ON SAMOCHODY.NrSamochodu = PRACOWNICY.NrSamochodu;
Złączenie zewnętrzne SELECT SAMOCHODY.Marka, SAMOCHODY.Model, PRACOWNICY.Imie, lewostronne PRACOWNICY.Nazwisko FROM SAMOCHODY LEFT JOIN PRACOWNICY ON SAMOCHODY.NrSamochodu = PRACOWNICY.NrSamochodu;
SELECT SAMOCHODY.Marka, SAMOCHODY.Model, PRACOWNICY.Imie, PRACOWNICY.Nazwisko FROM SAMOCHODY RIGHT JOIN PRACOWNICY ON SAMOCHODY.NrSamochodu = PRACOWNICY.NrSamochodu;
Suma tabel SELECT SAMOCHODY.Marka, SAMOCHODY.Model, PRACOWNICY.Imie, PRACOWNICY.Nazwisko FROM SAMOCHODY RIGHT JOIN PRACOWNICY ON SAMOCHODY.NrSamochodu = PRACOWNICY.NrSamochodu UNION SELECT SAMOCHODY.Marka, SAMOCHODY.Model, PRACOWNICY.Imie, PRACOWNICY.Nazwisko FROM SAMOCHODY LEFT JOIN PRACOWNICY ON SAMOCHODY.NrSamochodu = PRACOWNICY.NrSamochodu;
Update UPDATE Nazwa tabeli SET Nazwa pola=wartość, WHERE Nazwa pola=wartość, UPDATE SPRZEDAZ SET Klient= Kowalski ;
UPDATE SPRZEDAZ SET Klient = "Kowalski" WHERE Klient = "Krawczyk";
DELETE DELETE FROM Nazwa Tabeli WHERE Kryteria np. Skasowanie rekordów pracowników, którzy zrealizowali poniżej dwóch sprzedaży: DELETE * FROM PRACOWNICY WHERE NrPracownika IN (SELECT NrPracownika FROM SPRZEDAZ GROUP BY NrPracownika HAVING Count(*) < 2);
INSERT INTO Wstawia nowe wiersze do tabeli np. INSERT INTO Książki (ISBN, Tytuł) VALUES ( 232-42-43, Ptaki drapieżne ) Pozostałe wartości pól otrzymają wartość Null
Parametry PARAMATERS Nazwa Typ, PARAMETERS [Wpisz część tytułu] TEXT; SELECT * FROM Książki InStr(Tytuł, [Wpisz część tytułu])>0 >0 jeśli początek wspólny