Arkadiusz Jakubowski – Podstawy SQL – ćwiczenia praktyczne
___________________________________________________________________________________________________
Ćwiczenia te są kierowane do osób, które chcą się nauczyć języka SQL i mam nadzieję, że w znacznym stopniu okażą się one pomocne. Do nauki języka SQL potrzebny jest jego interpreter, czyli baza danych. Do studiowania języka SQL zostały wykorzystane:
baza danych InterBase firmy Inprise (Borland) oraz baza danych DB2 firmy IBM.
Dlaczego InterBase? Dlaczego IBM DB2? Po pierwsze są to systemy relacyjnej bazy danych, w których została zaimplementowana pełna składnia języka SQL. Po drugie zarówno InterBase firmy Inprise (Borland) i DB2 firmy IBM w wersji Personal Edition są dostępne za darmo. Po trzecie są to w pełni profesjonalne i popularne systemy, które dodatkowo są łatwe w obsłudze i administrowaniu.
Oba systemy bazy, jak już wspomniałem są dostępne w Internecie za darmo. Na pewno większość z czytelników wybierze InterBase'a z powodów objętości wersji instalacyjnej. Prawdą jest, że DB2 firmy IBM posiada więcej możliwości, ale jeśli chodzi o zakres interpretowanego języka SQL oba systemy są sobie równe. Dla osób nie posiadających łącza do Internetu o większej niż przeciętna przepustowości, InterBase będzie lepszym wyborem.
Nie chcę umniejszać możliwościom MS Access. W pewnych zastosowaniach, jest to w pełni funkcjonalny i wystarczający system bazy danych. MS Access został szczelnie obudowany pomocniczymi narzędziami, które ułatwiają zarządzanie danymi oraz ułatwiają zarządzanie samym systemem bazy MS Access. Pomimo ze istnieje możliwość „rozmowy" z MS Access za pomocą języka SQL, jest ona niewygodna do tego stopnia, że staje się nieprzyjemna i zniechęcająca.
Aby móc pracować z InterBase, musimy go najpierw zainstalować. Instalacja InterBase została opisana w rozdziale 13. Tam również znajdziemy informacje o miejscu skąd można skopiować wersję instalacyjną. Serwer bazy danych InterBase dostępny jest również z większością produktów, narzędzi programistycznych firmy Inprise (Borland), min: Delphi, JBuilder, C++ Builder. W rozdziale 13. znajduje się również opis narzędzi InterBase, które umożliwiają na pracę z bazą danych i które oczywiście umożliwią wykonywanie ćwiczeń. Przed rozpoczęciem studiowania ćwiczeń, ale już po zainstalowaniu InterBase należy:
1. Stworzyć bazę WYPAUT. Informacje o tym, jak to zrobić znajdziemy w sekcji „Tworzenie bazy danych w Interbase" w rozdziale 13.
2. Po stworzeniu bazy WYPAUT musimy uruchomić skrypty tworzące i wypełniające danymi tabele w bazie WYPAUT. Skrypty te można skopiować z serwera ftp wydawnictwa Helion (ftp://ftp.helion.com.pl/przyklady/cwsql.zip - znajdziesz skrypty dla DB2 i InterBase'a). Skrypty te znajdują się również na końcu tych ćwiczeń. Zostały one jednak opublikowane dla DB2. Informacje o tym, jak je dostosować dla InterBase'a znajdziesz w rozdziale 14. w sekcji „Skrypty tworzące strukturę bazy WYPAUT".
3. Po zainstalowaniu InterBase'a oraz stworzeniu bazy WYPAUT i jej struktury jesteśmy gotowi do pracy z ćwiczeniami, które polegają na wykonywaniu poleceń SQL.
Poniżej zamieszone informacje pozwolą nam na usystematyzowanie czynności, jakie musimy wykonać, aby móc swobodnie korzystać z ćwiczeń, pracując z systemem DB2. Należy przejść przez następujące kroki:
1. Musimy zainstalować DB2. Zostało to opisane w rozdziale 10. W tym rozdziale znajdziemy również informacje o tym, skąd zdobyć kopię instalacji DB2 w wersji 7.1 Personal Edition.
2. Następnie musimy uruchomić menedżera DB2. Do tego celu służy polecenie db2start, które należy wydać w wierszu poleceń systemu operacyjnego lub z poziomu menu Start | Uruchom. W wersji DB2 dla Windows 95 lub 98 menedżer DB2 startuje automatycznie. W Windows NT również może okazać się to niekonieczne, gdy podczas instalacji DB2 wyraźnie zaznaczymy, że menedżer DB2 ma startować automatycznie podczas startu systemu operacyjnego. Jeżeli posiadamy system Windows NT, możemy użyć narzędzia Usługi z Panelu sterowania. Tam również możemy uruchomić menedżera DB2.
3. Po upewnieniu się, że menedżer DB2 został uruchomiony, tworzymy bazę danych WYPAUT w aplikacji Command Linę Processor. Opis procesu tworzenia bazy WYPAUT znajduje się w rozdziale 12. Narzędzia DB2 w sekcji „Tworzenie bazy" opisującej narzędzie Command Linę Processor.
4. Teraz musimy dokonać pewnych ustawień w narzędziu Tools Settings. Musimy określić znak średnika jako znak oddzielający poszczególne wyrażenia SQL wprowadzane m.in. w aplikacji Command Center oraz w skryptach tworzących strukturę bazy danych. Więcej informacji na temat tych ustawień znajdziesz w rozdziale 12. „Narzędzia DB2" w sekcji „Ustawienia narzędzi DB2".
5. Po stworzeniu bazy WYPAUT i ustaleniu znaku średnika jako znaku oddzielającego poszczególne zapytania w skrypcie, musimy uruchomić skrypty tworzące i wypełniające danymi tabele w bazie WYPAUT. Skrypty te można skopiować z serwera ftp://ftp.helion.com.pl/przyklady/cwsql.zip. Skrypty te znajdują się również na końcu tych ćwiczeń. Jeżeli nie mamy dostępu do Intemetu, należy skrypty przepisać do plików, a następnie je uruchomić. Wykonywanie skryptów zostało opisane w rozdziale 12. „Narzędzia DB2" w sekcji opisującej narzędzie Command Center.
6. Po wykonaniu powyższych zadań jesteśmy gotowi do pracy z ćwiczeniami, które polegają na wykonywaniu poleceń SQL.
Uff. Mam nadzieję, że wszyscy przebrną przez powyższe i będą się czuć swobodnie podczas studiowania tych ćwiczeń. Równie dobrze można zacząć od poznania systemu, jak i narzędzi wchodzących w skład systemu DB2 lub InterBase. Po zapoznaniu się z nimi i nabraniu pewnej wprawy w posługiwaniu się nimi, możemy przejść do realizacji zadań wypunktowanych powyżej.
Życzę miłej lektury Autor
89
W tym rozdziale przedstawiona zostanie koncepcja bazy danych, jej podstawowe elementy składowe jak tabele i widoki. Omówione zostaną również typy danych, definiowanie tabel oraz rola i zastosowanie języka SQL w relacyjnych bazach danych.
W czasie kiedy komputery nie były wykorzystywane tak powszechnie jak dzisiaj, informacje były gromadzone na papierze.
Pracownik firmy musiał ręcznie organizować dane. Zapisywał je, wyszukiwał, aktualizował itd. Dzisiaj, oprócz operacji, które musi wykonać ręcznie, pozostałe wykonuje za pomocą funkcji, które dostarcza relacyjny system bazy danych.
Rys.2.1.
Relacyjny system bazy danych przechowuje wszystkie dane w tabelach. Każda tabela zawiera dane na konkretny temat, np dane o klientach, dane o pracownikach, towarach itp. System bazy danych zarządza tymi danymi, pozwala m.in. na szybsze ich wyszukanie i zorganizowanie
Za każdym razem gdy potrzebujemy informacji z bazy danych, musimy „zapytać" system bazy danych w języku, który on rozumie. Tym językiem jest SQL - Structured Qu-ery Language
Rys.2.2.
Do dzisiaj istnieją tzw. tradycyjne bazy danych. Są to bazy informacji, których nośnikiem jest po prostu papier. Wiele instytucji w tym niestety policja oraz szpitale korzysta do dziś z takich baz. Scenariusz wydobywania danych w takich instytucjach jest następujący:
§ l osoba potrzebująca danych np. przełożony prosi drugą osobę o pewne dane;
§ pracownik po otrzymaniu polecenia szuka informacji wśród dokumentów, które zostały złożone albo w archiwum lub w po prostu w szafie;
§ pracownik po zebraniu pewnej ilości segregatorów z danego okresu przegląda je, a następnie przygotowuje zbiorczy dokument zawierający żądane informacje;
§ l po wydobyciu danych i zorganizowaniu ich do odpowiedniej formy wysyła je do przełożonego.
Czas wykonania tych operacji jest różny i zależy od wielkości organizacji, jej struktury, ilości potrzebnych danych oraz od pracowitości osób je zbierających.
Rys.2.3
W systemie relacyjnej bazy danych wszystkie powyższe operacje sprowadzają się do sformułowania tego samego pytania o dane ale w formie zrozumiałej dla komputera, a ściślej mówiąc, w formie zrozumiałej dla systemu bazy danych.
Cała operacja wydobywania danych trwa w tym przypadku znacznie krócej. Jakość tych danych jest przy tym lepsza.
Mamy więcej pewności, że dane są prawdziwe, że ktoś się nie pomylił lub pominął pewną część danych przy zestawianiu żądanych informacji.
Rys.2.4.
Język SQL jest wykorzystywany w większości relacyjnych systemów baz danych. SQL jest zaimplementowany m.in. w takich systemach baz danych, jak: DB2, Oracie, Inter-Base, MySQL, dBase, Paradox. Składnia języka SQL dzieli się na trzy typy:
§ język definiowania struktur danych - DDL (Data Definition Language);
§ R język do wybierania i manipulowania danymi - DML (Data Manipulation Language);
§ l język do zapewniania bezpieczeństwa dostępu do danych - DCL (Data Control Language).
Rys.2.5.
Składnia języka SQL wchodząca w skład języka DDL jest używana przez administratorów systemu relacyjnej bazy danych w celu utrzymania struktury bazy danych, obiektów bazy danych takich jak m.in. tabele.
Język DCL jest używany przez administratorów do zapewnienia bezpieczeństwa dostępu do danych, m.in. do nadawania uprawnień do danych.
Język DML jest używany przez wszystkich użytkowników, którzy mają dostęp do bazy danych. Za pomocą tego typu składni języka SQL użytkownicy mogą otrzymywać, zmieniać dane, dodawać nowe itp.
Tabela składa się z wierszy i kolumn. Wiersze w tabeli są przechowywane w dowolnym porządku. Dla każdego wiersza każda z kolumn posiada jedno pole z wartością. Wszystkie wartości w kolumnie są tego samego typu.
Rys.2.6.
W różnych systemach relacyjnej bazy danych jak np. DB2, Oracie, InterBase czy dBase lub Paradox, każda tabela jest przechowywana w osobnym zbiorze na dysku twardym lub kilka tabel w jednym zbiorze. Sposób przechowywania danych z tabeli na dysku twardym jest tematem drugorzędnym.
Ćwiczenia te maja przede wszystkim na celu nauczenie języka SQL. Teraz wystarczy tylko wiedzieć, że sposób przechowywania tabel zależy od implementacji systemu relacyjnej bazy danych.
Nazwa tabeli składa się z dwóch części. Pierwsza część to kwalifikator, a druga z kolei to nazwa tabeli. Kwalifikator i nazwa tabeli oddzielone są kropka. Każda tabela musi mieć unikatową nazwę w granicach kwalifikatora.
Rys.2.7.
Taka konstrukcja nazwy tabeli nie stosuje się we wszystkich relacyjnych bazach da nych. Między innymi w opisywanym tutaj systemie InterBase. W InterBase odwołanii do tabeli następuje wprost, np.
SELECT * PROM KLIENCI . . .
w systemie DB2
SELECT * FROM DB2ADMIN.KLIENCI
W różnych systemach relacyjnej bazy danych inaczej nazywają się typy danych. Jednak ich zakres i typ jest często identyczny. Każdy system relacyjnej bazy danych posiada w swojej dokumentacji sekcję, która opisuje typy danych używanych w tym systemie. Poniżej znajdują się przykładowe typy danych wraz z ich opisem.
Tabela 2.1. numeryczne typy danych
Typ danych
Opis
liczby całkowite z przedziału –32768 do +32767 (czasami ten zakres jest mniejszy)
liczby całkowite z przedziału –2147483648 do +2147483647 (lub mniejszy)
liczby rzeczywiste, gdzie m oznacza całkowitą liczbę cyfr, a n oznacza liczbę cyfr po przecinku
Tabela 2.2. znakowae typy danych
typ znakowy o stałej długości (max. 255 znaków)
typ znakowy o zmiennej długości
Tabela 2.3.typy danych daty i czasu
typ daty (występują różne standardy zapisywania daty)
typ czasu (występują różne standardy zapisywania czasu)
Tworzenie tabeli polega na definiowaniu jej kolumn. Dla każdej kolumny należy określić nazwę kolumny, typ danych i długość (w zależności od typu) oraz to, czy jest dozwolone pozostawienie wartości pustej w kolumnie.
CREATE TABLE UZYTKOWNIK.PRACOWNICY (
ID_PRACOW CHAR(6)NOT NULL,
IMIE VARCHAR(18)NOT NULL,
NAZWISKO VARCHAR(24) NOT NULL,
STANOWISKO VARCHAR(12)NOT NULL,
DZIAL VARCHAR(12) NOT NULL,
DATA_URODZ DATE,
TELEFON_DOM CHAR(12));
Wartość null jest to wartość nieokreślona, która może zostać użyta w każdym polu tabeli niezależnie od typu kolumny. Wartość null jest różna od zera lub spacji.
W tabeli na rysunku 2.8 osobom, które nie posiadają firmy, w kolumnach: FIRMA oraz NIP przypisano wartość mull.
Rys.2.8.
Przy konstruowaniu tabeli poleceniem create table w poprzedniej sekcji określiliśmy dla pewnych kolumn parametr not null. Oznacza to, że przy wstawianiu nowych wierszy musimy określić wartości dla tych kolumn, nie mogą one być wartością null. Definicja kolumny w poleceniu create table pozostawiona bez klauzuli not null określa, że dozwolone jest wstawienie do tej kolumny wartości null. Istnieje jeszcze opcja o następującej składni:
NOT NULL WITH DEFAULT ( (wartość)]
gdzie parametr wartość określa domyślną wartość dla kolumny. Wartość domyślna zostanie nadana dla kolumny automatycznie, gdy nie określimy jej wprost przy wstawianiu nowego wiersza do tabeli.
Możemy udostępnić nasze dane innym użytkownikom, a ściślej mówiąc możemy udostępnić tabele innemu użytkownikowi. W tym celu stosuje się polecenie języka SOŁ grant. Poniższy przykład nadaje uprawnienia użytkownikowi o nazwie UŻYTKOWNIK do tabeli PRACOWNICY. Od tej pory UŻYTKOWNIK może wybierać (wykonywać zapytania select) ...
kkkate