SQL – język baz danych – przegląd

advertisement
SQL - historia
• SQL - "Structured Query Language" - język czwartej
generacji (4GL) wymowa: "es-kju-ell" lub "sequel [si:kwl]"
• SQL – język baz danych, strukturalny język zapytań, język
kwerend.
SQL – język baz danych –
przegląd
Język do definiowania, wyszukiwania i
administrowania danymi w relacyjnej bazie danej.
Tadeusz Pankowski
www.put.poznan.pl/~tadeusz.pankowski
(c) T. Pankowski, SQL - przegląd
1
(c) T. Pankowski, SQL - przegląd
Standaryzacja - zalety
SQL - historia
1.
2.
3.
4.
5.
6.
7.
1970, E.F.Codd, "A relational model of data for large shared data
banks", Communications of the ACM, Vol.13, No.6, 1970, podstawy
relacyjnego modelu danych
1974, SEQUEL "Structured English Query Language", D. Chamberlin
i in., IBM San Jose Research Laboratory, implementacja: SEQUELXRM (1974-75)
1976-77, SEQUEL/2, implementacja i rozwój w ramach projektu
System R, IBM San Jose RL
1980-83, główne implementacje: ORACLE, DB2 (SQL/DS),
1986, SQL/86 - oficjalny standard ANSI (American National
Stanmdards Institute) oraz ISO (International Organization for
Standardization)
1992, SQL2 (lub SQL/92) - "International Standard ISO/IEC
9075:1992, Database Language SQL"
dalszy rozwój: SQL3 (SQL:1999), włącza idee podejścia
obiektowego, dane wielowymiarowe, heterogeniczne, XML, ...
(c) T. Pankowski, SQL - przegląd
2
3
•
•
•
•
•
•
redukcja kosztów szkolenia
przenośność aplikacji
wydłużenie żywotności aplikacji
komunikacja międzysystemowa, interoperacyjność
wygoda dla użytkownika, co robi system, a nie w jaki
sposób
wspólny interfejs do bazy danych
(c) T. Pankowski, SQL - przegląd
4
Standaryzacja - wady
•
•
•
•
ograniczenie kreatywności
SQL jest dość daleki od idealnego języka relacyjnego
braki samego SQL – wiele problemów pozostawiono jako
zależnych od implementacji "implementation
dependent", co utrudnia przenośność
złudzenie istnienia standardu (?)
Oprogramowanie standardowe
zapewniające wymianę danych
między serwerem i klientem:
ADO
(ActiveX Data Objects)
Architektura aplikacji baz
danych
ODBC
(Open Database Connectivity)
Warstwa
oprogramowania
serwera
MS SQL
Server
(c) T. Pankowski, SQL - przegląd
Warstwa
oprogramowania
klienta
Oprogramowanie klienta
ORACLE
Access
5
SQL – przeznaczenie
Platforma danych MS SQL Server
SQL = SQL2 = SQL/92
Uwaga: Używać będziemy notacji stosowanej w dialekcie języka SQL
systemu MS SQL Server, a więc języka Transact-SQL.
1.
Główne funkcje zarządzania danymi:
• definiowanie
• manipulowanie,
• administrowanie
2.
Przeznaczony dla:
• interakcyjnych użytkowników końcowych,
• twórców programów użytkowych (aplikacji),
• administratorów baz danych,
• twórców oprogramowania specjalizowanego (narzędziowego,
systemów współpracujących z bazami danych, ...)
7
(c) T. Pankowski, SQL - przegląd
8
Cechy platformy danych
1.
Architektura SQL Server
W systemie MS SQL Server istnieją dwa typy baz danych:
Zaufanie (bezpieczeństwo, wiarygodność, dostępność,
skalowalność) ang. trusted, security, reliability, scalability):
bazy systemowe,
bazy użytkowe.
szyfrowanie danych, klucze bezpieczeństwa,
audyt (monitorowanie) aktywności,
mirroring baz danych
2.
Bazy systemowe pamiętają zmiany odnoszące się do całego
systemu SQL Server. System wykorzystuje te bazy danych
do zarządzania samym sobą.
Systemowymi bazami danych są:
Produktywność (wydajność budowy i eksploatacji aplikacji):
wspomaganie procesów tworzenia aplikacji, administrowania,
optymalizacji;
zintegrowane środowiska programowania baz danych, aplikacji,
rozproszenia;
klastry baz danych, wieloprocesorowość
3.
• master – baza pamiętająca informacje o wszystkich użytkowych
bazach danych w systemie,
• model – baza stanowiąca wzorzec dla nowo tworzonych baz
danych
• tempdb – robocza baza danych
• msdb – baza danych wykorzystywana przez serwer w procesie
zarządzania
Inteligencja (bussines intelligence):
integracja danych,
analiza i eksploracja danych;
raportowanie danych.
(c) T. Pankowski, SQL - przegląd
9
Tworzenie baz danych
10
Operacje na bazie danych
CREATE DATABASE nazwa_bazy_danych
Wybieranie bazy danych:
USE nazwa_bazy_danych
Np.:
CREATE DATABASE KSS2010
Usuwanie bazy danych:
DROP DATABASE nazwa_bazy_danych
Utworzone zostaną dwa pliki:
KSS2010.mdf – główny plik bazy danych
KSS2010_LOG.ldf – plik dziennika transakcji
(c) T. Pankowski, SQL - przegląd
(c) T. Pankowski, SQL - przegląd
11
(c) T. Pankowski, SQL - przegląd
12
Typy danych
1.
2.
3.
Tworzenie tabel bazy danych
W systemie SQL Server każda kolumna w tabeli, każda zmienna, każde
wyrażenie i każdy parametr mają określony typ.
Oprócz omawianych poniżej systemowych typów danych, użytkownicy
mogą definiować własne typy (patrz CREATE TYPE), które są w istocie
synonimami dla pewnych ograniczeń typów systemowych.
Wyróżniamy następujące systemowe typy danych (przykłady):
<def kolumny> ::= <nazwa kolumny> <typ danych> <warunek spójności>
<typ danych> ::= int | char(n) | money | decimal(n, u), …
znakowe stałej długości: char(n)
znakowe zmiennej długości: varchar(n)
liczby całkowite: int, smallint, …
liczby o ustalonej dokładności (stałoprzecinkowe): decimal(p, s)
liczby zmiennoprzecinkowe: float(n)
walutowe: money
data: date
XML: xml
wielkie obiekty binarne (BLOB): image
…
(c) T. Pankowski, SQL - przegląd
CREATE TABLE <nazwa tabeli>
(<def. kolumny>,
...
<def kolumny>,
<warunek spójności>)
<warunek spójności> ::= [CONSTRAINT <nazwa ograniczenia>]
PRIMARY KEY |
NOT NULL |
REFERENCES <nazwa tabeli>(<nazwy kolumn klucza głównego>) |
CHECK (<nazwa kolumny> <warunek>)
13
Definiowanie tabel - przykład
(c) T. Pankowski, SQL - przegląd
14
Definiowanie tabel - przykład
create table Dostawca (
NrDcy
char(3) primary key,
Nazwa
char(20),
Adres
char(20))
create table Magazyn (
NrMag
INT primary key,
Adres
char(20))
create table Towar (
NrTow
char(5) not null primary key,
Nazwa
char(20),
GrupaTow
char(3) not null,
CenaZak
money,
CenaSprz
money)
15
16
Definiowanie tabel – przykład (c.d.)
Definiowanie tabel – przykład (c.d.)
create table Dostawa (
IdDost
int
identity(1,1),
NrDcy
char(3),
NrMag
int,
NrTow
char(5),
Data
datetime,
Ilosc
decimal(5),
constraint Kg_Dostawa primary key (IdDost),
constraint Ko_Dostawa_Dostawca
foreign key (NrDcy) references Dostawca,
constraint Ko_Dostawa_Towar
foreign key (NrTow) references Towar ,
constraint Ko_Dostawa_Magazyn
foreign key (NrMag) references Magazyn)
create table TowMag (
NrMag
int,
NrTow
char(5),
Stan
decimal(5),
primary key (NrMag, NrTow),
foreign key (NrMag) references Magazyn,
foreign key (NrTow) references Towar)
17
SQL – postać poleceń
2.
Pracownik(IDPrac, Nazwisko, Placa, Stanowisko)
Dochod(IDPrac, Rok, Kwota)
W trybie interakcyjnym, bezpośrednio z terminala
bezpośrednio w trybie interakcyjnym z terminala,
w oprogramowaniu serwera,
w oprogramowaniu klienta.
select
from
where
Kompletności posiadanej informacji w momencie formułowania
polecenia:
•
•
•
18
Pełne określenie zapytania
Zapytania w języku SQL mogą przybierać różną postać. Postać ta może
zależeć od:
1.
Miejsca wydawania polecenia:
•
•
•
1. W powyższych definicjach:
• klucz główny składa się z kilku kolumn dlatego jego definicja
podana jest po definicji wszystkich kolumn,
np: PRIMARY KEY (NrMag,NrTow);
• warunkom spójności bazy danych można nadać nazwy,
umieszczamy je wtedy we frazie CONSTRAINT,
• definiujemy zależności referencyjne przez określenie klucza
obcego FOREIGN KEY oraz tabeli, od której klucza głównego ten
klucz obcy zależy, np: FOREIGN KEY(NrMag) REFERENCES
Magazyn oznacza, że każda wartość wprowadzana do kolumny
TowMag.NrMag musi występować jako wartość klucza głównego
w tabeli Magazyn.
2. Za pomocą CRERATE TABLE tworzone są tabele bazowe
(ekstensjonalne), mające fizyczną reprezentację w bazie danych oraz
określamy niektóre warunki spójności bazy dnaych.
3. Tablice wirtualne (intencjonalne), tzw. widoki lub perspektywy (ang.
view) tworzone są za pomocą CREATE VIEW
posiadamy pełną informację (w zapytaniu nie ma potrzeby używania
zmiennych),
używamy zmiennych do przekazywania i pobierania do/z zapytania
pewnych parametrów, ale postać zapytania jest ustalona,
używamy zmiennych do dynamicznego tworzenia postaci zapytania, a
więc zmienne mogą być zarówno parametry zapytania, jak również jego
struktura.
19
Nazwisko, Placa
Pracownik
Placa >= 2000
Wynikiem jest tabela o dwóch kolumnach: Nazwisko i Placa.
Do tabeli wynikowej należą wiersze, w których atrybut Placa
ma wartość większą lub równą 2000.
Z wykorzystaniem zmiennnych wierszowych (aliasów):
select P.Nazwisko, D.Rok, D.Kwota
from
Pracownik P, Dochod D
where P.IDPrac = D.IDPrac AND Rok > 1980
Zapytania sparametryzowane
Zapytania sparametryzowane (c.d.)
Pracownik(IDPrac, Nazwisko, Placa, Stanowisko)
Dochod(IDPrac, Rok, Kwota)
Pracownik(IDPrac, Nazwisko, Placa, Stanowisko)
Dochod(IDPrac, Rok, Kwota)
Wykorzystanie zmiennych wyjściowych w T-SQL (Transact-SQL):
Wykorzystanie zmiennych wejściowych i wyjściowych (T_SQL):
declare
select
from
where
declare @IDPrac varchar(30)
declare @placa money
set @IDPrac='00123'
select @zm_placa = Placa
from
Pracownik
where IDPrac = @IDPrac
@placa money
@placa = Placa
Pracownik
IDPrac = '00123'
W pierwszym wierszu deklarowana jest zmienna @placa (nazwa każdej
zmiennej w języku Transact-SQL rozpoczyna się od znaku @) typu
money.
W drugim wierszu pod zmienną @placa podstawiana jest wartość
kolumny Placa z ostatniego wiersza stanowiącego zbiór odpowiedzi na
zapytanie.
Wartość zmienna @IDPrac określana jest przed wykonaniem zapytania.
Zauważmy, że dzięki znakowi @ system rozróżnia czy chodzi o nazwę
zmiennej @IDPrac, czy o nazwę kolumny IDPrac.
W obydwu powyższych przypadkach struktura zapytania jest znana.
21
Zapytania dynamiczne (T-SQL)
Zapytania dynamiczne (T-SQL)
declare @zapytanie varchar(100)
declare @tabela varchar(100)
declare @kolumny varchar(100)
set @tabela = 'Pracownik'
set @kolumny='Nazwisko,Placa'
set @zapytanie='select '[email protected] + ' from '[email protected]
•
W przypadku zapytań dynamicznych postać zapytania nie
jest znana na etapie kompilacji, w szczególności więc
system nie jest w stanie ani sprawdzić poprawności
składniowej zapytania, ani tym bardziej opracować
optymalnej strategii jego wykonania.
•
Czynności te realizowane są dopiero na etapie wykonania,
co istotnie zmniejsza efektywność przetwarzania.
execute sp_sqlexec @zapytanie
•
•
•
22
trzy pierwsze linie zawierają deklaracje zmiennych
w trzech kolejnych liniach następuje określenie wartości zmiennych,
tworzymy:
”select Nazwisko,Placa from Pracownik”
w ostatniej linii następuje wykonanie zapytania, procedury pamiętanej
sp_sqlexec, ktrórej parametr @zapytanie przekazuje tekst polecenia
(zapytania, procedury)
23
24
Operowanie danymi
Operowanie danymi
Cztery podstawowe operacje:
select
insert
update
delete
Operacja wyszukiwania:
- wyszukiwanie,
- dołączanie,
- aktualizacja,
- usuwanie.
select distinct W.NrTow, W.NrMag
from
Dostawa W
where NrDcy = '10' AND Ilosc > 2
Przykłady operacji modyfikujących:
distinct - usuwanie duplikatów
insert into Dostawa
values('10','100',1,'1996.11.26',3)
select W.NrDcy, D.Nazwa, T.Nazwa, T.CenaSprz
from
Dostawa W, Dostawca D, Towar T
where W.NrDcy = D.NrDcy AND W.NrTow = T.NrTow
update Towar
set
CenaSprz = 1.1 * CenaSprz
where GrupaTow = 'AGD'
delete from Towar
whereCenaSprz < CenaZak
(c) T. Pankowski, SQL - przegląd
25
(c) T. Pankowski, SQL - przegląd
Funkcje agregujące (c.d.)
Funkcje agregujące
count, sum, avg, max, min, count(*)
1.
2.
Liczba wszystkich dostawców:
select count(*) as Ld
from Dostawca
Ld
4
26
3. Sumaryczny wartość towaru 100 w cenach zakupu:
select
sum(T.CenaZak * TM.Stan) as W100
from
Towar T, TowMag TM
where
T.NrTow = TM.NrTow AND T.NrTow = '100'
Liczba dostawców realizujących dostawy
select count(distinct W.NrDcy) as Ldd
from Dostawa W
Ldd
bez distinct:
select count(W.NrDcy) AS Ldd
from Dostawa W
3
W100
Ldd
5
45 000
(c) T. Pankowski, SQL - przegląd
28
Funkcje agregujące (c.d.)
4.
Widoki (views)
Wartości towarów w poszczególnych grupach towarowych:
select
from
where
group by
having
select
from
where
• Widoki są tabelami wirtualnymi (intencjonalnymi), nie mającymi
bezpośredniej reprezentacji w bazie danych. Zapamiętana jest jedynie
ich definicja.
• Definicja widoku wykorzystywana jest w momencie odwoływania się
do niego jak do każdej innej tabeli.
T.GrupaTow, sum(T.CenaZak * TM.Stan) as Wartość
Towar T, TowMag TM
GrupaTow Wartość
T.NrTow = TM.NrTow
----------------- -------------KOM
24 000.00
T.GrupaTow
RTV
45 000.00
GrupaTow <> 'AGD'
*
Towar T, TowMag TM
T.NrTow = TM.NrTow
(c) T. Pankowski, SQL - przegląd
29
(c) T. Pankowski, SQL - przegląd
Widoki (views)
Spójność bazy danych
"Towary RTV w cenach sprzedaży "
create view RTV (NrTow, Nazwa, CenaSprz)
as select T.NrTow, T.Nazwa, T.CenaSprz
from Towar T
where T.GrupaTow = 'RTV‘
1.
2.
Definicja widoku wykorzystywana jest w momencie odwoływania się do
niego:
select
RTV.NrTow, RTV.Nazwa, RTV.CenaSprz
from
RTV
where
RTV.CenaSprz < 2000
3.
Przekształcone jest do zapytania względem tabeli TOWAR:
select
RTV.NrTow, RTV.Nazwa, RTV.CenaSprz
from (select T.NrTow, T.Nazwa, T.CenaSprz
from Towar T
where T.GrupaTow = 'RTV' ) RTV
where RTV.CenaSprz < 2000
4.
lub równoważnie:
select
T.NrTow, T.Nazwa, T.CenaSprz
from
Towar T
where
T.GrupaTow = 'RTV' and T.CenaSprz < 2000
(c) T. Pankowski, SQL - przegląd
30
31
Spójność, niesprzeczność, integralność (ang. consistency, integrity
constraints).
Spójność oznacza poprawność, niesprzeczność danych w bazie
danych. Standard SQL zawiera środki do definiowania warunków
spójności (lub więzów integralności), np. w obrębie zdania CREATE
TABLE.
Każda próba naruszenia zdefiniowanych warunków spójności
(podczas modyfikacji bazy danych) zostaje udaremniona, operacja
ją podejmująca jest odrzucana, a baza danych pozostaje nie
zmieniona.
W systemie pamiętana jest więc baza danych (dane podstawowe)
oraz wiedza o bazie danych (dane opisujące struktury i warunki
spójności).
(c) T. Pankowski, SQL - przegląd
32
Rodzaje warunków spójności
1.
2.
3.
4.
5.
6.
Programowanie SQL Servera
Typ kolumny – typ może być standardowy lub pochodny zdefiniowany
przez użytkownika.
UNIQUE – dla określenia, że kolumna lub zestaw kolumn ma mieć
unikalną wartość w tabeli (jest kluczem potencjalnym - alternatywnym,
kandydującym – w tabeli), taki klucz może przyjmować wartości NULL.
PRIMARY KEY – specjalny przypadek UNIQUE dla zdefiniowania
klucza głównego – nie może przyjmować wartości NULL.
FOREIGN KEY - dla zdefiniowania zależności referencyjnych
(zależności odniesień). Wartość klucza obcego musi występować jako
wartość klucza w powoływanej tabeli.
CHECK - dla określenia, że kolumna lub zestaw kolumn (z jednej krotki)
mają mieć wartości spełniające określony warunek. Taka spójność
może być zdefiniowane jako reguła w wyrażeniu CREATE RULE.
Bardziej złożone warunki spójności można definiować za pomocą
procedur wyzwalanych w wyrażeniach CREATE TRIGGER. Procedury
te są automatycznie wyzwalane przy aktualizacji tabeli.
(c) T. Pankowski, SQL - przegląd
33
Systemowe procedury pamiętane
(c) T. Pankowski, SQL - przegląd
34
Paczki (batches)
¾ Nazwy wszystkich systemowych procedur pamiętanych rozpoczynają
się od „sp_” lub „xp_”.
¾ Systemowe procedury pamiętana są prekompilowanymi zbiorami
wyrażeń SQL-owych („sp_”) lub języka programowanie („xp_”).
¾ Procedury typu „xp_” (extended stored procedures) są to funkcje
zdefiniowane w bibliotekach dołączanych dynamicznie (bibliotekach
DLL) i służą do rozszerzenia funkcji SQL Servera.
Przykłady:
exec sp_tables – podaje wszystkie tabele w bieżącej bazie danych
exec sp_help Dostawa– wypisuje informacje o tabeli Dostawa
(c) T. Pankowski, SQL - przegląd
¾ Dla wykonywania obliczeń, których nie można wyrazić za pomocą
pojedynczego wyrażenia w języku Transact-SQL (T-SQL), stosuje
się:
• systemowe procedury pamiętane (system stored procedures),
• paczki (wsady) (batches) i skrypty (scripts),
• funkcje (functions),
• procedury pamiętane (składowane) (stored procedures),
• procedury wyzwalane (trigery) (triggers),
• kursory (cursors).
35
• Paczka stanowi grupę złożoną z jednej lub z wielu wyrażeń
Transact-SQLa. Standardowym końcem paczki jest polecenie GO
lub koniec pliku. Paczkę może też stanowić grupa „podświetlonych”
wyrażeń (przy korzystaniu z Query Analysera).
• SQL Server kompiluje paczkę w pojedynczą jednostkę wykonywalną
zwaną planem wykonania (execution plan).
• Wyrażenia tworzące plan wykonania wykonywane są jednorazowo
w jednym czasie. W przypadku wystąpienia błędu kompilacji, żadne
z wyrażeń w paczce nie zostanie wykonane.
• Zmienna zdefiniowana w paczce nie jest dostępna poza nią –
zmienne są lokalne w paczce.
• Nie wszystkie wyrażenia mogą występować w jednej paczce (np.
definiowanie i wywoływanie procedury).
(c) T. Pankowski, SQL - przegląd
36
Paczki i skrypty
Funkcje
¾ Przykład skryptu złożonego z dwóch paczek:
¾ Rodzaje funkcji:
• funkcje skalarne (scalar user-defined functions) – zwracaną
wartością jest pojedyncza liczba lub tekst, tj. wartość dowolnego
typu z wyjątkiem typów: text, ntext i image;
• proste funkcje tablicowe (inline table-valued functions) – zwracają
wartość typu TABLE, przy czym zwracana tabela jest określona za
pomocą pojedynczego wyrażenia SELECT (funkcje te nazywane są
sparametryzowanymi widokami);
• złożone funkcje tablicowe (multi-statement table-valued functions) –
zwracają zmienną typu TABLE, przy czym zwracana tabela jest
dowolną tabelą utworzoną w ciele funkcji.
USE sklep
GO
-- wykonanie paczki, wybór bazy danych sklep
DECLARE @Powitanie VARCHAR(50)
SET @Powitanie = 'Witaj w sklepie!'
print @Powitanie
GO
-- wykonanie paczki,
-- zmienna @Powitanie po GO nie jest już dostępna.
(c) T. Pankowski, SQL - przegląd
37
(c) T. Pankowski, SQL - przegląd
Funkcje skalarne
38
Proste funkcje tablicowe
Funkcja zwraca największy numer pracownika z podanego działu:
Funkcja zwraca zbiór pracowników z działu o podanym identyfikatorze:
CREATE FUNCTION ostatni_prac_dzialu (@id int)
RETURNS int
BEGIN
declare @nr int
set @nr = (select max(IdPrac) from pracownik
where [email protected])
RETURN @nr
END
create function prac_dzialu(@id int)
RETURNS TABLE
as
RETURN(select * from pracownik where [email protected])
go
Wykorzystanie funkcji (wywołanie funkcji występuje w roli tabeli):
select * from dbo.prac_dzialu(2)
Wykorzystanie funkcji:
lub bez dbo
select * from pracownik
where IdPrac = dbo.ostatni_prac_dzialu(1)
(c) T. Pankowski, SQL - przegląd
select * from prac_dzialu(2)
39
(c) T. Pankowski, SQL - przegląd
40
Procedury pamiętane
Procedura oblicza dochód w podanym okresie:
CREATE PROC Dochod
@idprac int,
-- id pracownika
@czas int,
-- liczba miesięcy
@wynik int OUTPUT
-- parametr wyjsciowy
as
select @wynik = (pensja + premia)*@czas
from Pracownik where IdPrac = @idprac
go
Wywołanie:
declare @c int, @w int
select @c = 12
exec Dochod 1,@c,@w output
select 'Dochod wynosi: ', @w
41
Download