sql.pdf
(
193 KB
)
Pobierz
70324208 UNPDF
Politechnika Śląska
Instytut Informatyki
Język SQL
instrukcja laboratoryjna
laboratorium Bazy Danych
przygotowali:
mgr inż. Paweł Kasprowski
(Kasprowski@zti.iinf.polsl.gliwice.pl)
mgr inż. Bożena Małysiak
(bozena@ivp.iinf.polsl.gliwice.pl)
Laboratorium Bazy Danych 1
Język SQL
Wstęp
Język SQL (Structured Query Language) jest najbardziej znanym językiem zapytań, zaimple-
mentowanym w praktycznie wszystkich istniejących na rynku systemach relacyjnych baz
danych.
SQL jest używany jako samodzielny język służący do interakcyjnych zapytań, tworzenia i
aktualizacji relacyjnej bazy danych (i w ten sposób będzie wykorzystywany podczas ćwiczeń
laboratoryjnych). Może być również zanurzany (ang. embedded) w klasyczne języki programo-
wania. W językach 4GL (np. INFORMIX 4GL) jest zintegrowany ze środowiskiem 4GL.
Instrukcje języka SQL podzielić można na kilka typów:
- instrukcje wyszukiwania danych - SELECT
- instrukcje tworzenia bazy (Data Description Language) – np.: CREATE TABLE
- instrukcje modyfikacji danych (Data Modification Language) – np.: UPDATE
- instrukcjedookreślania praw dostępu i więzów integralności (Data Control Language) –
np.: GRANT
Podczas laboratorium SQL1 i SQL2 wykorzystywać się będzie głównie instrukcję wyszukiwa-
nia SELECT.
Instrukcja SELECT
Instrukcja wyszukiwania SELECT służy do generowania zapytań do bazy danych. Po jej
wykonaniu powstaje tablica wynikowa zawierająca żądane atrybuty pobrane z wierszy
spełniających podane warunki. Jej najprostsza forma to:
SELECT <atrybuty>
FROM <tabela>
WHERE <warunek>
Przykładowo zapytanie:
SELECT Nazwisko FROM Pracownicy
Strona 2
Laboratorium Bazy Danych 1
Język SQL
powoduje pobranie wartości atrybutu Nazwisko z wszystkich rekordów tablicy Pracownicy.
Aby uzyskać wszystkie atrybuty tablicy w miejsce listy atrybutów użyć należy znaku ‘*’:
SELECT * FROM Pracownicy
Powyższe zapytanie zwraca jako wynik całą tablicę Pracownicy.
Aby pobrać tylko określone rekordy użyć należy frazy WHERE:
SELECT * FROM Pracownicy WHERE NumerPrac>10
Powyższe zapytanie pobiera z tablicy tylko rekordy spełniające podany warunek.
Przy porównywaniu wartości tekstowych z podanym wzorcem można we wzorcu używać
znaków specjalnych ‘_’ – odpowiednik jednego dowolnego znaku oraz ‘%’ odpowiednik
dowolnego ciągu znaków. W niektórych systemach przyjmuje się symbolikę pochodzącą z
systemu DOS, odpowiednio ‘?’ i ‘*’. Do porównań wartości tekstowych służy fraza LIKE.
SELECT * FROM Pracownicy WHERE Nazwisko LIKE „Kowal%”
Inne operatory używane po frazie WHERE to na przykład operator IN (zbiór wartości)
SELECT * FROM Pracownicy WHERE NumerPrac IN (100,101,200)
lub operator BETWEEN x AND y
SELECT * FROM Pracownicy WHERE NumerPrac BETWEEN 100 AND 200
Sortowanie
Do sortowania danych używa się frazy ORDER BY. Występuje ona zawsze na końcu zapytania:
SELECT * FROM Pracownicy WHERE NumerPrac > 10
ORDER BY Nazwisko
Zapytanie powyższe zwróci tablicę wartości posortowaną alfabetycznie według nazwisk. Można
sortować tablicę wartości według więcej niż jednego atrybutu
SELECT * FROM Pracownicy WHERE NumerPrac > 10
ORDER BY NumerZesp, Nazwisko
Strona 3
Laboratorium Bazy Danych 1
Język SQL
W tym przypadku tablica posortowana zostanie według numerów zespołów a w ramach jednego
zespołu według nazwisk. Do sortowania w odwrotnej kolejności służy znacznik DESC.
SELECT * FROM Pracownicy WHERE NumerPrac > 10
ORDER BY NumerPrac DESC
Łączenie tablic
W zapytaniu dane pobierać można z więcej niż jednej tablicy jednocześnie. Należy wtedy
zdefiniować warunek łączący te tabele.
SELECT Nazwisko, NazwaZesp FROM Pracownicy P, Zespoły Z
WHERE P.NumerZesp=Z.NumerZesp
Powyższe zapytanie zwróci listę nazwisk pracowników i nazw zespołów w których pracują.
Zapytanie tworzy najpierw iloczyn kartezjański dwóch tablic według podanego warunku
a następnie dokonuje odpowiednich selekcji i projekcji. Ponieważ pole NumerZesp występuje
w obydwu tablicach, dla każdego wystąpienia w zapytaniu należy określić z której tablicy ma
być pobrane. W przykładzie skorzystano z możliwości tworzenia tzw. aliasów – identyfikato-
rów tabel. Zapis ‘Pracownik P’ powoduje, że tablica Pracownik jest w dalszej części zapytania
widziana pod identyfikatorem ‘P’.
Użycie aliasów pozwala na otwarcie więcej niż jednej instancji tej samej tablicy. Przykładowo,
aby znaleźć pracowników należących do zespołów o numerze zespołu większym niż pracownik
o numerze pracowniczym 5 można zastosować zapytanie:
SELECT P.NumerPrac, P.Nazwisko
FROM Pracownicy P, Pracownicy P1
WHERE P1.NumerPrac=5 AND P.NumerZesp>P1.NumerZesp
Funkcje agregujące
Po frazie SELECT można w miejsce atrybutów użyć tzw. funkcji agregujących. Są to funkcje
SUM(), AVG(), COUNT(), MAX() i MIN().
SELECT SUM(Pensja) FROM Pracownicy
Strona 4
Laboratorium Bazy Danych 1
Język SQL
Powyższe zapytanie zwróci
jeden
rekord z jednym polem zawierającym sumę zawartości pola
Pensja we wszystkich rekordach tabeli Pracownicy.
SELECT COUNT(*) FROM Pracownicy
Powyższe zapytanie zwróci ilość rekordów w tabeli Pracownicy.
Wartości unikalne
Aby w zapytaniu uzyskać jedynie wartości unikalne danego atrybutu lub grupy atrybutów należy
użyć frazy DISTINCT. Frazę tę użyć można na dwa sposoby. Pierwszy sposób to umieszczenie
jej bezpośrednio za słowem SELECT:
SELECT DISTINCT Nazwisko FROM Pracownicy
Zapytanie powyższe zwróci zbiór nazwisk pracowników bez powtórzeń dla tych samych
nazwisk.
SELECT DISTINCT Imię, Nazwisko FROM Pracownicy
Zapytanie powyższe zwróci zbiór unikalnych par imię - nazwisko. Dla tego samego nazwiska i
różnych imion pojawią się dwa rekordy, np.: Jan Kowalski i Piotr Kowalski.
Inne zastosowanie frazy DISTINCT to użycie jej wewnątrz funkcji agregujacej:
SELECT SUM(DISTINCT Pensja) FROM Pracownicy
Zapytanie powyższe zwróci sumę
różnych
pensji. Na przykład dla zbioru 100,200,300,200,300
zapytanie to zwróci wartość 600 podczas, gdy zapytanie bez frazy DISTINCT zwróciłoby
wartość 1100.
Grupowanie
Za pomocą instrukcji SELECT można także grupować dane. Aby uzyskać informacje na temat
sum dochodów pracowników w poszczególnych zespołach można zmodyfikować poprzednie
zapytanie dodając frazę GROUP BY:
SELECT SUM(Pensja) FROM Pracownicy GROUP BY NumerZesp
Powyższe zapytanie zwróci jeden rekord dla każdej wartości pola NumerZesp. W rekordzie tym
Strona 5
Plik z chomika:
smifos
Inne pliki z tego folderu:
Wszechswiat2007_7-9_Tykarski.pdf
(2354 KB)
WM_2008_04m.pdf
(422 KB)
WM_2008_03m.pdf
(176 KB)
WM_2008_02m.pdf
(201 KB)
WM_2008_01m.pdf
(151 KB)
Inne foldery tego chomika:
► Programy Diagnostyczne i Serwisowe
● Samochody - Chip-owanie
☀Kurs tworzenia stron internetowych
Android
Architektura
Zgłoś jeśli
naruszono regulamin