Wykład 3 SQL - język operacji na bazach danych Schemat przykładowej bazy danych Uczelnia Skrypt SQL - utworzenie bazy Uczelnia Polecenia selekcji i projekcji Interakcyjny dostęp do bazy danych 2014-04-25 12:45 BD-1 W_3 1
SQL - język operacji na bazach danych Do opisu operacji na bazach danych stworzono język SQL (ang. Structured Query Language). Składnia i znaczenie SQL są określone odpowiednimi standardami międzynarodowymi (obowiązuje już czwarta wersja standardu). Wyrażenia w SQL są w większości SZBD (w szczególności w systemach wykorzystujących architekturę klient - serwer) formą pośrednią pomiędzy interface programu użytkowego klienta (tzw. front - end) a serwerem bazy danych (tzw. back - end). W języku SQL zapisuje się (często automatycznie, bez wiedzy użytkownika) polecenia (tzw. zapytania) do serwera bazy danych. 2014-04-25 12:45 BD-1 W_3 2
Podzbiory wyrażeń języka o różnym przeznaczeniu i funkcjach: Podzbiór DDL (Data Definition Language) - wyrażenia z tego podzbioru służą do definiowania obiektów schematu bazy (tabel, kluczy, powiązań, funkcji, procedur pamiętanych, wyzwalaczy, widoków) Podzbiór DML (Data Manipulation Language) - służy do czytania danych, poprawiania, usuwania, tworzenia krotek wierszy tabel Podzbiór DCL (Data Control Language) - sterowanie dostępem do danych i przepływem danych 2014-04-25 12:45 BD-1 W_3 3
S T U D E N C I n u m _ s tu d n a z w is k o im ie a d re s d a ta _ u r p le c P R A C O W N IC Y n u m _ p ra c n a z w is k o _ p ra c im ie _ p ra c a d re s te le fo n _ d o m s ta n o w is k o w y n a g ro d z e n ie n r_ p o k o ju P U N K T Y n u m _ s tu d k u r s n u m _ z a lic z p u n k ty R E J E S T R n u m _ s tu d k u rs s e k c ja P O K O J E n r_ p o k o ju ty p p o je m n o s c Z A L IC Z E N IA k u rs n u m _ z a lic z w a g a k o m e n ta rz d a ta K U R S Y k u rs w s p o lc z y n n ik lic z _ g o d z in k o m e n ta rz S E K C J A k u rs s e k c ja n u m _ p ra c L A B O R A T O R IA k u rs la b o ra to r iu m G R U P Y k u rs s e k c ja d z ie n c z a s lic z _ g o d z in n r_ p o k o ju 2014-04-25 12:45 BD-1 W_3 4
% Tworzenie tabel % - tabela Studenci -------------------------------- CREATE TABLE Studenci ( num_stud integer NOT NULL, % identyfikator nazwisko char(25) NOT NULL, % nazwisko studenta imie char(25), adres char(40), data_ur date, % data urodzenia plec char(1) NOT NULL CHECK (plec in ('M', 'K', 'm', 'k')), PRIMARY KEY (num_stud)); % Tworzenie indeksu NazwiskaStud - kolejnosc % alfabetyczna studentow CREATE INDEX NazwiskaStud on Studenci(nazwisko, imie); 2014-04-25 12:45 BD-1 W_3 5
% - tabela Pokoje ------------------------------------ CREATE TABLE Pokoje ( nr_pokoju char(4) NOT NULL, % numer/symbol % sali - znakowo typ char(4) NOT NULL, % typ % pomieszczenia pojemnosc smallint NOT NULL, % pojemnosc % sali PRIMARY KEY (nr_pokoju)); 2014-04-25 12:45 BD-1 W_3 6
%- tabela pracownicy ---------------------------------------------- CREATE TABLE Pracownicy ( num_prac integer NOT NULL, % identyfikator pracownika nazwisko_prac char(25) NOT NULL, % nazwisko % pracownika imie_prac char(25) NOT NULL, adres char(40), telefon_dom char(16), % telefon domowy wynagrodzenie numeric(6,2), stanowisko char(8) NOT NULL CHECK (stanowisko in ('Asystent', 'Adiunkt', 'Profesor')) DEFAULT 'Profesor', nr_pokoju char(4) NOT NULL, FOREIGN KEY REFERENCES Pokoje, PRIMARY KEY (num_prac)); 2014-04-25 12:45 BD-1 W_3 7
% - tabela Kursy ------------------------------------ CREATE TABLE Kursy ( kurs char(5) NOT NULL, wspolczynnik % identyfikator kursu numeric(3, 2) NOT NULL, % maksymalna % liczba punktow licz_godzin smallint NOT NULL, komentarz char(80) NOT NULL, % opis kursu CHECK (wspolczynnik in (1.00, 0.75, 0.50, 0.25)), PRIMARY KEY (kurs)); 2014-04-25 12:45 BD-1 W_3 8
% - tabela Zaliczenia ------------------------------- CREATE TABLE Zaliczenia ( kurs char(5) NOT NULL, % identyfikator kursu num_zalicz smallint NOT NULL, waga numeric(5,2) NOT NULL, % waga - % wspolczynnik waznosci komentarz char(25), data date, % termin zaliczenia FOREIGN KEY REFERENCES Kursy, PRIMARY KEY (kurs, num_zalicz)); 2014-04-25 12:45 BD-1 W_3 9
% - tabela Sekcja -------------------------------- CREATE TABLE Sekcja ( num_prac integer NOT NULL, % identyfikator % pracownika kurs char(5) NOT NULL, % identyfikator % kursu sekcja smallint NOT NULL, FOREIGN KEY REFERENCES kursy, FOREIGN KEY REFERENCES Pracownicy, PRIMARY KEY (kurs, sekcja)); 2014-04-25 12:45 BD-1 W_3 10
- % - tabela Grupy ----------------------------------- CREATE TABLE Grupy ( kurs char(5) NOT NULL, sekcja smallint NOT NULL, dzien char(3) NOT NULL, czas char(5) NOT NULL, licz_godzin smallint NOT NULL, nr_pokoju char(4) NOT NULL, UNIQUE (dzien, czas, nr_pokoju), FOREIGN KEY REFERENCES Pokoje, FOREIGN KEY REFERENCES Sekcja, PRIMARY KEY (kurs, sekcja, dzien, czas)); 2014-04-25 12:45 BD-1 W_3 11
% - tabela Rejestr ---------------------------------- CREATE TABLE Rejestr ( num_stud integer NOT NULL, kurs char(5) NOT NULL, sekcja smallint NOT NULL, FOREIGN KEY REFERENCES Studenci, FOREIGN KEY REFERENCES Sekcja, PRIMARY KEY (num_stud, kurs)); 2014-04-25 12:45 BD-1 W_3 12
% - tabela Punkty ---------------------------------- CREATE TABLE Punkty ( num_stud integer NOT NULL, kurs char(5) NOT NULL, num_zalicz smallint NOT NULL, punkty smallint NOT NULL CHECK (punkty between 0 and 100), FOREIGN KEY REFERENCES Rejestr, FOREIGN KEY REFERENCES Zaliczenia, PRIMARY KEY (kurs, num_stud, num_zalicz)); 2014-04-25 12:45 BD-1 W_3 13
% Ustawienie uprawnien do przegladania tabel dla % uzytkownika admin grant select on Studenci to admin; grant select on Pokoje to admin; grant select on Pracownicy to admin; grant select on Kursy to admin; grant select on Zaliczenia to admin; grant select on Laboratoria to admin; grant select on Sekcja to admin; grant select on Grupy to admin; grant select on Rejestr to admin; grant select on Punkty to admin; commit work; % zatwierdzenie zmian 2014-04-25 12:45 BD-1 W_3 14
Polecenia selekcji i projekcji danych Wszystkie wiersze i kolumny tablicy można obejrzeć jako wynik zapytania: SELECT * FROM Studenci; SQL dopuszcza użycie, zarówno do zapisu słów kluczowych języka, jak i nazw tabel (relacji) i kolumn (atrybutów) małe i duże litery. Dla wyraźnego rozróżnienia poszczególnych elementów zapytań we wszystkich przykładach użyto dużych liter do zapisu słów kluczowych. Nazwy kolumn (atrybutów) pisane są małymi literami, a nazwy tabel (relacji) rozpoczynają się od dużych liter. Odpowiedzią na powyższe zapytanie jest zawartość całej tabeli Studenci. Dane te będą wyświetlane w zupełnie przypadkowej kolejności. Jeżeli zechcemy obejrzeć je w kolejności np. alfabetycznej nazwisk studentów, to musimy użyć zapytania: 2014-04-25 12:45 BD-1 W_3 15
SELECT * FROM Studenci ORDER BY nazwisko; num_stud nazwisko imie adres data_ur plec =================================================================================== 86088 ACKWOOD S.R. 1734 Eastwood Drive, WATERLOO ONT 1965-10-10 K 86325 ADAMS M.J. 345 Avondale Place, OTTAWA ONT 1965-05-21 M... 86494 BINKLE D.A. 1086 Queen Street, SARNIA ONT 1967-06-23 M 99999 BIORYTM JANUSZEK ul.grunwaldzka 23, Lubin 1905-12-04 M... 86569 WORTH R.M. 151 Parkwood Drive, #654 CAMBRIDGE 1966-12-12 K 86418 ZIMMERMAN W.J. 116 Dunbar Street, CAMBRIDGE ONT 1965-07-18 M 2014-04-25 12:45 BD-1 W_3 16
Do interakcyjnego dostępu do bazy danych w środowisku Sybase można wykorzystać np. programy isql (system Sybase SQL Anywhere 5. 5) lub podobny dbisqlc (Sybase Adaptive Server Anywhere, wersja 8 i wyższe). Dalej pokazano sposób nawiązania połączenia z bazą danych za pomocą programu dbisqlc oraz wygląd ekranu po zalogowaniu się do bazy. 2014-04-25 12:45 BD-1 W_3 17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40