SQL (ang. Structured Query Language - Strukturalny Język Zapytań), umożliwia dostęp i przetwarzanie danych w bazie danych – na poziomie obiektów modelu relacyjnego tj. tabel.
Ponadto określa sposób użycia instrukcji w programach konwencjonalnych języków programowania jak C, C++, Java, Visual Basic.
Instrukcja SELECT - wydobywa informacje z bazy danych, określa:
z jakich tabel w bazie danych mają być sprowadzone dane,
jakie warunki mają spełniać i
w jakiej postaci mają się pojawić przed użytkownikiem (aplikacją użytkownika).
Instrukcja SELECT składa się z części nazywanych klauzulami.
Baza danych przyjmowania zamówień o nazwie OrderEntry, utworzona przez kreator bazy danych w Accessie.
Najprostsza postać instrukcji SELECT:
SELECT
nazwa_kolumny,...
FROM
nazwa_tabeli
[WHERE
warunek];
(Uwaga: meta-nawiasy [ ] oznaczają opcjonalne fragmenty)
Aby wypisać imiona i nazwiska pracowników firmy, definiujemy kwerendę jako zapytanie SQL:
SELECT FirstName, LastName
FROM Employees;
Oto zapis w okienku Accessa w widoku SQL:
Oraz wynik zapytania:
Najprostszym zapytaniem jest wypisanie całej zawartości tabeli:
SELECT *
FROM Employees;
Zapis w okienku Accessa:
Wynik:
Aby wypisać pracowników w kolejności alfabetycznej według nazwisk:
SELECT FirstName, LastName
FROM Employees
ORDER BY LastName;
LastName DESC
- aby w odwrotnej kolejności
alfabetycznej według nazwisk.
Oto wynik:
Aby wypisać wszystkich kierowników:
SELECT FirstName, LastName
FROM Employees
WHERE Title = "Kierownik";
Wynik:
Aby wypisać numery telefonów pracowników bez powtórzeń:
SELECT DISTINCT WorkPhone
FROM Employees;
Wynik:
IS [NOT] NULL
Pracownicy, którzy mają określony numer wewnętrzny (Extension).
[NOT] BETWEEN
Pracownicy których identyfikatory znajdują się w określonym przedziale wartości.
[NOT] LIKE
Pracownicy których nazwiska zaczynają się na literę B.
Spójniki logiczne: AND, OR, NOT
SELECT FirstName, LastName
FROM Employees
WHERE LastName LIKE "*I" AND Extension IS NOT NULL;
Instrukcja INSERT
Dodaj wiersz do tabeli.
INSERT INTO Employees(FirstName,LastName, Title)
VALUES("Adam", "Sapieha", "Dyrektor");
Instrukcja DELETE
Usuń z tabeli wiersze spełniające warunek WHERE.
DELETE FROM Employees
WHERE Title="Dyrektor";
Instrukcja UPDATE
W tabeli dokonaj aktualizacji wskazanych przez klauzulę SET do wierszy spełniających warunek WHERE.
UPDATE Employees
SET Extension = "200"
WHERE Extension = "155";
Kwerendy typu tylko SQL (Query -> SQL Specific)
Wypisz nazwiska wszystkich pracowników i klientów.
Oto rezultat:
Kwerenda definicji danych - instrukcje SQL defininiowania danych.
ALTER TABLE Tabela ADD COLUMN Salary MONEY;
DROP TABLE
Tabela;
Pass-Through Query - zapytanie SQL, które ma być wykonane w odległej bazie danych – składnia rozumiana przez odległą bazę danych (wymaga określenia DSN do zewnętrznego źródła danych).
SELECT ze złączeniem tabel
Wyświetl zestaw klientów i numerów złożonych przez nich zamówień.
Zaprojektujmy kwerendę za pomocą kreatora lub w widoku projekt.
Widok SQL odkrywa nam odpowiadającą instrukcję SELECT:
Mamy do czynienia z wewnętrznym złączeniem INNER JOIN tabel Customers i Orders - z warunkiem złączenia postaci klucz_główny=klucz_obcy.
Wyświetl pracowników razem z przyjętymi przez nich zamówieniami.
Złączenie między pracownikami i zamówieniami jest zewnętrzne tzn. przy złączaniu uwzględniamy też zamówienia, którym nie został przypisany żaden pracownik.
Pojawia się słowo kluczowe RIGHT JOIN.
Operatory DISTINCT i DISTINCTROW (nie ma go w Standardzie)
1. Instrukcja:
SELECT Customers.ContactFirstName, Customers.ContactLastName
FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
zwraca wynik:
2. Instrukcja:
SELECT DISTINCTROW Customers.ContactFirstName, Customers.ContactLastName
FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
zwraca wynik:
DISTINCTROW
- dla każdego wiersza tabeli Customers osobny
wiersz w wyniku.
3. Instrukcja:
SELECT DISTINCT Customers.ContactFirstName, Customers.ContactLastName
FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
zwraca wynik:
Podział na grupy i podsumowywanie grup
Dla każdego klienta wypisz ile złożył zamówień.
Widok SQL:
Arkusz danych:
Dla każdego pracownika wypisz ile przyjął zamówień.
Widok SQL:
Wyznaczyć towar, który ma najwyższą cenę.
SELECT Max(UnitPrice) FROM Products
- określa najwyższą
cenę zapisaną w kolumnie
UnitPrice tabeli Products.
Widok SQL:
Rezultat:
Kwerenda sparametryzowana
Czasami jest wygodnie mieć kwerendę uzależnioną od parametru np. od nazwiska osoby, nazwy firmy itp. Oto metoda tworzenia takiej kwerendy w widoku projekt:
Odpowiada temu instrukcja SQL:
Przy obliczaniu wyniku zapytania wyświetla się okienko dialogowe do którego użytkownik wpisuje wartość parametru:
Typ danych parametru określa się w okienku „Query parameters” wywoływanym z menu Query -> Parameters.
Operator EXCEPT (MINUS) – różnica zapytań
MS Access nie wprowadza tego operatora. Można użyć podzapytania i operator NOT EXISTS.
Wyznaczyć pracowników, którzy nie przyjęli żadnego zamówienia.
Widok SQL
Widok Projekt
Widok Arkusz Danych
Operator INTERSECT – przecięcie wyników zapytań.
MS Access nie wprowadza tego operatora. Można użyć podzapytania i operator EXISTS.
Wyznaczyć pracowników, którzy jednocześnie reprezentują klientów.
Widok SQL
Widok Projekt
Widok Arkusz Danych