Podstawy_SQLa.pdf

(144 KB) Pobierz
SQL jest językiem obsługi baz danych implementowanym przez praktycznie
wszystkie systemy zarządzania bazami danych (SZBD) przeznaczone dla wielu
użytkowników, częściowo ze względu na fakt, iż uzyskał on akceptację ANSI
(Amerykańskiego Narodowego Instytutu Normalizacji) oraz ISO
(Międzynarodowej Organizacji Normalizacyjnej) jako standardowy język
zapytań dla relacyjnych baz danych.
Język SQL został opracowany przez korporację IBM w laboratorium
badawczym w San Jose, we wczesnych latach 70. Prototyp SQL-a,
zaprezentowany na konferencji ACM w 1974 roku nosił początkowo miano
SEQUEL (Strukturalny Angielski Język Zapytań; ang. Structured English
Query Language). Nazwa ta została później skrócona do SQL.
Znacznie ulepszona wersja SQL pojawiła się w 1989 roku pod nazwą SQL-
89. Znaczna większość stosowanych dziś relacyjnych systemów SZBD obsługuje
przynajmniej tę wersję języka.
W 1992 roku istniejący standard poddano kolejnemu unowocześnieniu
(SQL-92), dzięki czemu SQL zyskał szereg nowych możliwości. Ponieważ SQL-92
jest rozszerzeniem SQL-89, starsze systemy zarządzania bazami danych mogły
po niewielkich modyfikacjach pracować w nowym standardzie.
Aż do października 1996, producenci oprogramowania SZBD mogli
przedstawiać swoje produkty instytutowi NIST (Narodowy Instytut Standardów
i Technologii) w celu określenia ich zgodności ze standardami SQL. Proces
testowania i certyfikacji stanowił silny bodziec do trzymania się obowiązujących
norm –wynikiem standard SQL:1999. W 2003 przedstawiono SQL:2003 – nowy
standard języka SQL. Został on opublikowany w Sigmod Record Vol. 33 No. 1
Marzec 2004. Jest to w zasadzie poprawione SQL:1999 z wyjątkiem części
SQL/XML oraz kilku dodatkowych właściwości.
W takiej czy innej postaci, SQL jest niezwykle przydatnym narzędziem.
Można go stosować do modyfikowania i wczytywania danych oraz do tworzenia i
obsługi struktur bazodanowych. Nie jest to jednak język samodzielny. Pisząc
aplikację obsługującą twoją bazę danych trzeba osadzać polecenia SQL w innym
języku programowania.
Mówienie o zapytaniach przed utworzeniem bazy i wprowadzeniem do niej
przykładowych danych może wydawać się dziwne, ale większość poleceń SQL-a
wykorzystywanych do modyfikowania tabel wymaga wpierw odszukania danych,
które należy podać modyfikacjom. Załóżmy więc, że dysponujemy gotową bazą
danych, wypełnioną odpowiednimi informacjami.
SQL ma tylko jedno polecenie służące do odszukiwania danych: SELECT.
Wbrew pozorom fakt ten nie stanowi ograniczenia. SELECT umożliwia
wybieranie kolumn oraz wierszy, łączenie tabel, grupowanie danych i
przeprowadzanie na nich prostych obliczeń. Pojedyncze wyrażenie SELECT
wystarczy do wykonania dowolnej kombinacji działań algebry relacyjnej.
Oto podstawowa składnia polecenia SELECT:
SELECT kolumna1, kolumna2, ...
FROM tabela1, tabela2, ...
WHERE kryteria_wyboru
Klauzula SELECT określa kolumny, które chcemy ujrzeć w tabeli
wynikowej. W klauzuli FROM podajemy nazwy tabel, które mają zostać
przeszukane. Klauzula WHERE jest opcjonalna i zawiera kryteria, które mają
być spełnione przez wszystkie zwracane wiersze.
Wyświetlanie wszystkich kolumn
Aby wyświetlić wszystkie kolumny z danej tabeli w kolejności, w której
zostały one zdefiniowane, można skorzystać z gwiazdki (*). Eliminuje to
konieczność wpisywania kolejnych nazw kolumn w wyrażeniu SELECT.
Załóżmy, że chcemy wyświetlić wszystkich dostawców, u których nasza
księgarnia zamawia książki. Wpisz:
SELECT *
FROM dostawcy
Wyświetlanie wybranych kolumn
Większość zapytań SQL-owych polega na wybraniu niektórych kolumny z
analizowanych tabel i wyświetleniu ich w odpowiedniej kolejności. Należy w tym
celu wypisać nazwy interesujących nas kolumn po słowie kluczowym SELECT w
kolejności, w jakiej chcemy je ujrzeć na wydruku. Przyjrzyjmy się zapytaniu
wybierającemu numery telefonów i nazwy dostawców z naszej przykładowej
bazy danych:
SELECT TelefonDost, NazwaDost
FROM Dostawcy
Usuwanie duplikatów
Unikatowe wartości kluczy podstawowych uniemożliwiają wprowadzenie
dwóch identycznych wierszy do danej tabeli bazowej. Jeśli jednak wybierasz z
analizowanej tabeli tylko niektóre kolumny, może się zdarzyć, że tabela
wynikowa będzie zawierać duplikaty.
Aby usunąć duplikaty z tabeli wynikowej, należy po słowie kluczowym
SELECT dopisać DISTINCT:
SELECT DISTINCT NumerKli, NumerKartyKred
FROM Zamówienia
Operacja rzutowania
Wybierając z tabeli interesujące nas kolumny, żądamy od SZBD dokonania
operacji rzutowania. Rzutowanie polega na wyodrębnieniu wartości wskazanych
kolumn ze wszystkich wierszy w tabeli. Ponieważ system zarządzania nie musi
analizować wybieranych wartości, rzutowanie należy do operacji szybkich.
Mówiąc o rzutowaniu należy zwrócić uwagę na pewien problem: SZBD
wybierze z podsuniętej mu tabeli żądane kolumny nie zwracając uwagi czy
wybór ten jest logiczny, czy nie. Przyjrzyj się następującemu zapytaniu:
SELECT NumerZam, Suma
FROM ZamówioneKsiążki
Sortowanie tabeli wynikowej
O ile nie zdecydujesz inaczej, wiersze w tabeli wynikowej będą miały taką
samą kolejność jak w tabeli źródłowej. Jeśli chcesz zmienić porządek wierszy,
musisz dodać klauzulę ORDER BY do wyrażenia SELECT.
Dopisanie klauzuli ORDER BY spowoduje posortowanie tabeli wynikowej
w kolejności alfabetycznej:
SELECT *
FROM Wydawcy
ORDER BY NazwaWydawcy
Po słowach kluczowych ORDER BY następuje nazwa kolumny lub
kolumn, względem których ma zostać posortowana tabela wynikowa. Jeśli
podasz nazwę więcej niż jednej kolumny, wówczas pierwsza kolumna zostanie
wzięta pod uwagę przy sortowaniu zewnętrznym, następna – przy sortowaniu
wewnętrznym pierwszego stopnia itp.
Weźmy dla przykładu następujące wyrażenie:
SELECT NazwiskoKli, KodPocztowyKli
FROM Klienci
ORDER BY NazwiskoKli, KodPocztowyKli
Wynik został posortowany według nazwisk klientów, a wewnętrznie – według
numerów kodów pocztowych.
Jeśli odwrócimy kolejność kolumn, według których nasza tabela ma zostać
posortowana:
SELECT NazwiskoKli, KodPocztowyKli
FROM Klienci
ORDER BY KodPocztowyKli, NazwiskoKli
ASC, DESC!!!!
Otrzymamy listę posortowaną według numerów kodów pocztowych, a
wewnętrznie – według nazwisk klientów.
Podobnie jak w przypadku kolumn, można ograniczać zawartość zwracanej
tabeli przez wyrażenie SELECT do interesujących nas wierszy. Kryteria wyboru
wierszy wpisujemy w klauzuli WHERE. Wyrażenie logiczne następujące po
WHERE określane jest mianem predykatu. Jeśli dany wiersz spełnia kryteria
wyboru (innymi słowy, wartość logiczna predykatu dla zawartych w tym wierszu
danych jest równa 1), wówczas zostaje on włączony do tabeli wynikowej.
Poniższe operatory porównania są wykorzystywane w wyrażeniach i warunkach
do porównywania dwóch wyrażeń. Wynikiem działania operatorów porównania
jest zawsze wartość logiczna (TRUE lub FALSE).
Operator
Opis
Przykład
( )
Zmienia normalną kolejność
wykonywania działań
... NOT (A=1 OR B=1)
=
Sprawdza, czy dwa wyrażenia
są równe
... WHERE PLACA = 1000
924631672.037.png 924631672.038.png 924631672.039.png 924631672.040.png 924631672.001.png 924631672.002.png 924631672.003.png
 
!=, ^=, <>
Sprawdza, czy dwa wyrażenia
są różne
... WHERE PLACA != 1000
>
Większe niż
... WHERE PLACA > 1000
<
Mniejsze niż
... WHERE PLACA < 1000
>=
Większe lub równe niż
... WHERE PLACA >= 1000
<=
Mniejsze lub równe niż
... WHERE PLACA <= 1000
Wpisując z obu stron wyrażenia nazwy kolumn należy pamiętać, że predykat
stosuje się oddzielnie do każdego wiersza tabeli. Można więc porównywać
wartości przechowywane w dwóch różnych kolumnach tego samego wiersza, ale
nie można w ten sposób porównywać wartości tej samej kolumny w dwóch
różnych wierszach.
SZBD opiera ocenę wartości logicznej na typie porównywanych danych
Dane liczbowe – na zwykłej kolejności liczb
Dane tekstowe – na kolejności alfabetycznej
Dane daty, godziny – na kolejności chronologicznej.
Do konstrukcji złożonych warunków służą operatory logiczne. Wykonują one
obliczenia na wartościach typu logicznego (w szczególności będących wynikiem
obliczania warunków).
Operator
Opis
Przykład
( )
Zmienia normalną kolejność
wykonywania działań
SELECT ...
WHERE x = y AND (a = b OR p = q)
NOT
Zaprzeczenie
wyrażenia
...WHERE NOT (zawod IS NULL)
logicznego
...WHERE NOT (A=1)
AND
Logiczne 'i'. Wynik jest równy
TRUE, jeśli wartości obu
operandów są równe TRUE
... WHERE A = 1 AND B = 2
OR
Logiczne 'lub'. Wynik jest
równy TRUE, jeśli wartość
przynajmniej jednego
operandu jest równa TRUE
... WHERE A = 1 OR B = 3
Poniższe tabele przedstawiają wynik działania operatora AND i OR dla różnych
wartości:
AND
true
false
null
OR
true
false
null
True
true
false
null
True
true
true
true
False
false
false
false
False true
false null
924631672.004.png 924631672.005.png 924631672.006.png 924631672.007.png 924631672.008.png 924631672.009.png 924631672.010.png 924631672.011.png 924631672.012.png 924631672.013.png 924631672.014.png 924631672.015.png 924631672.016.png 924631672.017.png 924631672.018.png 924631672.019.png 924631672.020.png 924631672.021.png 924631672.022.png 924631672.023.png 924631672.024.png 924631672.025.png 924631672.026.png 924631672.027.png 924631672.028.png 924631672.029.png 924631672.030.png 924631672.031.png 924631672.032.png 924631672.033.png 924631672.034.png 924631672.035.png 924631672.036.png
 
Zgłoś jeśli naruszono regulamin