E N D
SQL ("Structured Query Language" - "Strukturalny Język Zapytań"), opracowany przez firmę IBM jest rozwinięciem języka SEQUEL (“Structured English QUEry Language”) jest językiem służącym do budowania systemów obsługi relacyjnych baz danych (RDBMS) na dowolnej płaszczyźnie sprzętowe. W chwili obecnej jest on standardowym językiem służącym do wymiany danych pomiędzy różnymi platformami sprzętowymi i programowymi.
Najważniejsze zasady obowiązujące przy formułowaniu zapytań w języku SQL: • W każdym zapytaniu występują tzw. klauzule rozpoczynające się od słów kluczowych (np. SELECT, FROM, WHERE ... ) • Zapytania SQL mogą być zapisane w jednym lub kilku wierszach. • Małe i wielkie litery nie są rozróżniane. Nie dotyczy to jednak wartości pisanych w cudzysłowach.
SELECT(wybierz) Po tym słówku umieszczamy nazwy kolumn, które chcemy uzyskać w odpowiedzi. Najprostsze zapytanie ma postać: SELECT * FROM tabela Przykład SELECT * FROM ”JNI.DB”
SELECT Imie, Nazwisko, Adres, Miasto, Stan FROM TabelaAdresowPracownikow;
Aby wyświetlić jedynie część informacji z tabeli w zapytaniu należy wypisać nazwy kolumn, które mają zostać wyświetlone: SELECT wyrażenie_1 [, wyrażenie_2, ..., wyrażenie_n] FROM tabela [tabela_2, ..., tabela_n]
WHERE Po tym słowie kluczowym podaje się warunki selekcji, czyli wymagania jakie musi spełniać rekord aby zakwalifikować go do odpowiedzi. SELECT wyrażenie_1 [, wyrażenie_2, ..., wyrażenie_n] FROM relacja WHERE warunek_1 [AND/OR warunek_2 ... AND/OR warunek_n] SELECT * FROM ”JNI.DB” WHERE RodzSGM = 10
Symbol Znaczenia = równość <> nierówność > większość >= większość lub równość < mniejszość <= mniejszość lub równość Operatory arytmetyczne
Operator Znaczenie between ... and ... wartość z przedziału like wartość zgodna z wzorcem is null wartość pusta - null in wartość w zbiorze danych Operatory języka SQL Każdy z operatorów SQL może być poprzedzony negacją NOT
SELECT NumerIDPracownika FROM TablicaStatystykPracownikow WHERE Pensja >= 50000; NumerIDPracownika 010 105 152 215 244
SELECT NumerIDPracownika FROM TablicaStatystykPracownikow WHERE Stanowisko = 'Kierownik'; SELECT NumerIDPracownika FROM TablicaStatystykPraconikow WHERE Pensja > 40000 AND Stanowisko = 'Personel'; SELECT NumerIDPracownika FROM TablicaStatystykPracownikow WHERE Stanowisko = 'Manager' AND (Pensja > 50000 OR Zyski > 10000); Przykłady
SELECT NumerIDPracownika FROM TablicaStatystykPracownikow WHERE Stanowisko IN ('Kierownik', 'Personel'); SELECT NumerIDPracownika FROM TablicaStatystykPracownikow WHERE Pensja BETWEEN 30000 AND 50000; SELECT NumerIDPracownika FROM TablicaStatystykPracownikow WHERE Pensja NOT BETWEEN 30000 AND 50000;
SELECT NumerIDPracownika FROM TablicaAdresowPracownikow WHERE Nazwisko LIKE 'L%'; Operator LIKE Pozwala on na porównywanie napisów, gdzie jeden z napisów może posiadać znaki specjalne: _znak podkreślnikazastępuje w napisie dokładnie jeden znak %znak procentu zastępuje w napisie dowolny ciąg znaków (nawet pusty) .
PosiadaczeAntykow Zamowienia
SELECT NazwiskoPosiadacza, ImiePosiadacza FROM PosiadaczeAntykow, Antyki WHERE IDKupujacego = IDPosiadacza AND Rzecz = 'Krzesło'; SELECT PosiadaczeAntykow.NazwiskoPosiadacza, PosiadaczeAntykow.ImiePosiadacza FROM PosiadaczeAntykow, Antyki WHERE Antyki.IDKupujacego = PosiadaczeAntykow.IDPosiadacza AND Antyki.Rzecz = 'Krzesło'; RELACJE - Połączenia
SELECT Posiad.NazwiskoPosiadacza Nazwisko, Zam.ZadanyPrzemiot Zamawiany przedmiot FROM Zamowienia Zam, PosiadaczeAntykow Posiad WHERE Zam.IDPosiadacza = Posiad.IDPosiadacza AND Zam.ZadanyPrzedmiot IN (SELECT Rzecz FROM Antyki); Aliasy i podzapytania w in aliasy - nazwy zastępcze
NazwiskoZamawiany przedmiot SmithStół SmithBiurko AkinsKrzesło LawsonLustro SELECT artybut_1 AS Atrybut jeden, atrybut_2 AS Atrybut_Dwa ... FROM relacja [WHERE warunki]
DISTINCT Klauzulitąstosujemy celem uniknięcia wielokrotnych wystąpień identycznych wierszy w tabeli stanowiącej wynik zapytania. SELECT DISTINCT atrybut FROM tabela [WHERE warunek]
ORDER BYSortowanie SELECT artybut_1, atrybut_2, atrybut_3 FROM tabela [WHERE warunki] ORDER BY "Atrybut jeden", “atrybut_dwa”, “atrybut_3” [ASC|DESC]
SUM () zwraca sumę wartości z wierszy spełniających zapytanie dla kolumny numerycznej. • AVG () zwraca średnią dla danej kolumny. • MAX () zwraca największą wartość w danej kolumnie. • MIN () zwraca najmniejszą wartość w danej kolumnie. • COUNT(*) zwraca liczbę określającą ilość wierszy spełniających warunki. Funkcje agregujące
SELECT SUM(Pensja), AVG(Pensja) FROM TablicaStatystykPracownikow; SELECT IDPosiadacza, MAX(Cena) FROM Antyki GROUP BY IDKupujacego; SELECT DrogaAdm, COUNT(JNI) AS Ilosc_Obiektow FROM "Jni.db" GROUP BY DrogaAdm
Dodajmy do tabeli Antyki kolumnę umożliwiającą wpisywanie ceny danej Rzeczy: ALTER TABLE Antyki ADD (Cena DECIMAL(8,2) NULL); ALTERUzupełnianie tabel
INSERT INTO Antyki VALUES (21, 01, 'Ottoman', 200.00); INSERT INTO Antyki (IDKupujacego, IDSprzedajacego, Rzecz) VALUES (01, 21, 'Ottoman'); INSERTDodawanie danych
DELETE FROM Antyki WHERE Rzecz = 'Ottoman'; DELETEUsuwanie danych
UPDATE Antyki SET Cena = 500.00 WHERE Rzecz = 'Krzesło'; To ustawi Ceny wszystkich krzeseł na 500.00 UPDATEOdświeżanie danych
CREATE TABLE Zamowienia (IDPosiadacza INTEGER NOT NULL, ZadanyPrzedmiot CHAR(40) NOT NULL); CREATE TABLETworzenie nowych tabel
CREATE UNIQUE INDEX POID_IDX ON PosiadaczeAntykow (IDPosiadacza); Indeksy CREATE INDEX POID_IDX ON PosiadaczeAntykow (IDPosiadacza); CREATE INDEX IMIE_IDX ON PosiadaczeAntykow (NazwiskoPosiadacza, ImiePosiadacza); DROP INDEX POID_IDX;
CREATE VIEW ANTVIEW AS SELECT ZadanyPrzedmiot FROM Zamowienia; CREATE VIEWZestawienia
SELECT IDKupujacego, MAX(Cena) FROM Antyki GROUP BY IDKupujacego HAVING Cena > 1000; HAVING
SELECT IDKupujacego FROM Antyki WHERE Cena > (SELECT AVG(Cena) + 100 FROM Antyki); UPDATE PosiadaczeAntykow SET ImiePosiadacza = 'John' WHERE IDPosiadacza = (SELECT IDKupujacego FROM Antyki WHERE Rzecz = 'Biblioteka'); podzapytania
SELECT ImiePosiadacza, NazwiskoPosiadacza FROM PosiadaczeAntykow WHERE EXISTS (SELECT * FROM Antyki WHERE Rzecz = 'Krzesło'); EXISTS
SELECT IDKupujacego, Rzecz FROM Antyki WHERE Cena >= ALL (SELECT Cena FROM Antyki); ALL
SELECT IDKupujacego FROM Antyki UNION SELECT IDPosiadacza FROM Zamowienia; UNIONUnie – połączenie wyników zapytań Wymagana zgodność typów pól danych Automatyczne DISTINCT
SELECT IDPosiadacza, 'jest w tabeli Zamowienia i Antyki' FROM Zamowienia, Antyki WHERE IDPosiadacza = IDKupujacego UNION SELECT IDPosiadacza, 'jest tylko w tabeli Antyki' FROM Antyki WHERE IDKupujacego NOT IN (SELECT IDPosiadacza FROM Zamowienia); Połączenia zewnętrzne
są jak polecenie UNION, z wyjątkiem tego, że INTERSECT produkuje wiersze, które występują w obydwu zapytaniach, a MINUS rezultaty pierwszego zapytania, ale bez rezultatów drugiego. INTERSECT i MINUS
ABS(X) Moduł z X. • CEIL(X) Zaokrąglenie w górę dziesiętnego X-a. • FLOOR(X) Zaokrąglenie w dół dziesiętnego X-a. • GREATEST(X,Y) Zwraca największą z tych dwóch wartości. • LEAST(X,Y) Zwraca najmniejszą z tych dwóch wartości. • MOD(X,Y) Zwraca reszte z dzielenia X/Y. • POWER(X,Y) Zwraca X do potęgi Y. • ROUND(X,Y) Zaokrągla X do Y miejsc po przecinku. Gdy Y jest pominięte, zaokrąglenie następuje do najbliższej liczby całkowitej. • SIGN(X) Zwraca minus gdy X<0, lub plus w innym wypadku. • SQRT(X) Zwraca pierwiastek kwadratowy z X. Dodatkowe funkcje matematyczne
LEFT(<<>tekst>,X) Zwraca pierwsze X znaków z lewej strony tekstu. • RIGHT(<<>tekst>,X) J.w. tylko z prawej strony. • UPPER(<<>tekst>) Zmienia tekst na duże litery. • LOWER(<<>tekst>) Zmienia tekst na małe litery. • INITCAP(<<>tekst>) Zmienia tekst do oryginalnych caps'ów. • LENGTH(<<>tekst>) Zwraca liczbę znaków w tekście. • <<>tekst>||<<>tekst> Łączy dwa teksty w jeden połączony tekst, gdzie po pierwszym tekście natychmiast następuje następny. • LPAD(<<>tekst>,X,'*') Wypełnia tekst od lewej określonymi znakami (tu znakami '*'), aby tekst nabrał X znaków długości. • RPAD(<<>tekst>,X,'*') J.w. ale wypełnia z prawej strony. • SUBSTR(<<>tekst>,X,Y) Wyciąga Y liter z miejsca tekstu wskazywanego przez X. Dodatkowe funkcje znakowe
Dodajmy do tabeli Antyki kolumnę ceny ALTER TABLE Antyki ADD (Cena DECIMAL(8,2) NULL); ALTER TABLE Modyfikujemy kolumnę ceny ALTER TABLE Antyki MODIFY (Cena DECIMAL(6,4) NULL); Kasujemy kolumnę ceny ALTER TABLE Antyki DROP (Cena);
Char(x) - kolumna znakowa, gdzie x oznacza maksymalną ilość znaków dozwolonych w tej kolumnie. • Integer - Kolumna liczb całkowitych, dodatnich lub ujemnych. • Decimal(x, y) - Kolumna liczb dziesiętnych, gdzie x to maksymalna ilość cyfr w tej kolumnie, a y to maksymalna ilość cyfr w części ułamkowej. Maksymalna liczba dla deklaracji Decimal(4,2) to 99.99. • Date - kolumna z datą w formacie zależnym od DBMS-a • Logical - kolumna, która może przechowywać tylko dwie wartości: TRUE lub FALSE (prawda lub fałsz). Typy danych
1. NULL lub NOT NULL • 2. UNIQUE wymusza unikalność każdego wiersza w kolumnie • 3. PRIMARY KEY mówi bazie danych, że ta kolumna jest kolumną podstawowego klucza (używane tylko gdy klucz jest jednokolumnowym kluczem, w przeciwnym wypadku instrukcja PRIMARY KEY(kolumna, kolumna, ...) powinna się pojawić na końcu polecenia, za definicją ostatniej kolumny. • 4. CHECK umożliwia dodanie warunku, który będzie sprawdzany przy wprowadzaniu danych do tej kolumny; np. CHECK (CENA > 0) spowoduje, że system będzie sprawdzał kolumnę Cena czy przypadkiem nie jest większa niż zero, zanim przyjmie wartość... • 5. DEFAULT wstawia domyślną wartość do bazy danych, jeśli wiersz jest wprowadzony bez uwzględninia danej kolumny. Np. ZYSKI INTEGER DEFAULT = 10000 CREATE / ALTER TABLE argumenty
COMMIT; -- sprawia, że zmiany jakie dokonaliśmy na systemie bazy danych pozostaną w nim na stałe. ROLLBACK; --Anuluje wszystkie zmiany na bazie danych od czasu wykonania ostatniego polecenia Commit. COMMIT i ROLLBACK