Zakładam, że każdemu udało się
już poprawnie zainstalować i uruchomić aplikacje. Startujemy więc z miejsca,
gdzie ostatnio zakończyliśmy.
Wszyscy mamy uruchomione Microsoft SQL Server
Management
Studio, poniższy screenshoot pokazuje jak wygląda to u mnie.

Pierwszą operacją, jaką wykonamy, będzie wylistowanie
informacji o zgromadzonych kontaktach w tabeli Contacts. Operację
wykonamy na dwa sposoby. W okienku Object Explorer po rozwinięciu
katalogu Databases pokazuje się lista baz danych dostępnych na
naszym serwerze. Standardowo będziemy korzystać z bazy danych AdventureWorks,
która została dołączona w podstawowym pakiecie. Kolejnym krokiem jest rozwinięcie
folderu Tables. Z listy tabel wybieramy Person.Contact
i klikamy na nią prawym guzikiem myszy Z menu podręcznego wybieramy „Open
Table”. W ten oto sposób wyświetliliśmy wszystkie dane kontaktowe. Teraz
przeprowadzimy tą operację za pomocą języka Transact-SQL. Ponieważ sama
aplikacja wspomaga tworzenie zapytań, nie będziemy musieli zbytnio się
napracować. Podobnie jak w poprzednim przypadku klikamy prawym guzikiem myszy
na tabelę Person.Contact - z tą różnicą, że tym razem wybieramy
opcję Script Table as, a następnie SELECT To i
New
Query Editor Window. Otwiera się nowa zakładka z wygenerowanym
zapytaniem bazodanowym wyświetlającym wszystkie dane z tabeli Contact.
Teraz wystarczy tylko wcisnąć przycisk Execute (lub wcisnąć F5)
znajdujący się nad nazwą zakładki.

Różnica między tym trybem wyświetlania, a poprzednią opcją
jest następująca. W pierwszej opcji mieliśmy możliwość edycji danych, usuwania
wierszy itp. W drugim zaś przypadku możemy jedynie przeglądać dane, bo wiersze
są wylistowane w trybie read-only. Jednak programowe wyświetlanie wierszy jest
bardziej elastyczną formą, co zaraz postaram się udowodnić. Jak pewnie
zauważyliście, ilość informacji, która się pojawiła jest przytłaczająco duża. A
nam potrzeba zaledwie kilku podstawowych danych, takich jak imię, nazwisko,
data urodzenia oraz może jeszcze adres. Przechodzimy więc do modyfikacji
naszego zapytania. Usuwamy z niego większość pól tak, aby zostało w takiej
formie jak jest poniżej.
SELECT [FirstName]
,[LastName]
,[EmailAddress]
,[Phone]
FROM
[AdventureWorks].[Person].[Contact]
Dane, które teraz zostały
wyświetlone są znacznie czytelniejsze i pozwalają nam na lepszą interpretacje
wyników zapytania. Dodając dodatkową klauzulę, możemy posortować kontakty
według nazwiska bądź imienia.
SELECT [FirstName]
,[LastName]
,[EmailAddress]
,[Phone]
FROM [AdventureWorks].[Person].[Contact]
ORDER BY [LastName]
Teraz, kiedy już umiemy
wyświetlać dane, przejdziemy do ich edycji, czyli zmiany wartości w
poszczególnych komórkach, a także usuwania całych wierszy. Jak zwykle zrobimy
to na dwa sposoby (pierwszy – klikając, drugi - korzystając z języka zapytań).
Postaram się, aby stało się to już tradycją, że wszystkie operacje będę
przedstawiał na dwa sposoby. Tak, aby każdy mógł wyrobić w sobie swój własny sposób
korzystania SQL Server 2005 w najwygodniejszy dla niego sposób.
Przypuśćmy więc, że preferujemy polskie imiona, a że tak się składa, iż
jesteśmy administratorami serwera baz danych i wolno nam zrobić bardzo dużo z
danymi, zmieniamy imię pani Catherine na Katarzyna. Aby tego dokonać
przystępujemy do analogicznej procedury jak przed chwilą. Klikamy prawym
klawiszem myszy na tabelę [Person].[Contact] i wybieramy opcję
Open
Table, odszukujemy w wynikach pozycję z Ms. Catherine Abel (drugi
wiersz na liście) naciskamy na komórkę z imieniem Catherine i po prostu
wpisujemy Katarzyna. Po lewej stronie powinna pojawić się ikona z ołówkiem, co
oznacza, że wiersz został w jakiś sposób zmodyfikowany. W momencie gdy
naciśniesz na jakąkolwiek inną komórkę w innym wierszu ikon z ołówkiem znika a
zmiany zostają zapisane. Kasowanie odbywa się w bardzo podobny sposób. W
miejscu gdzie przed momentem pojawił się ołówek naciskamy prawym klawiszem
myszy. Cały wiersz powinien ulec zaznaczeniu, a na menu podręcznym powinna
pojawić się opcja Delete. Po jej wybraniu pozostaje już tylko
zaakceptować wprowadzenie zmiany i wiersz zostaje na stałe usunięty z naszego
repozytorium danych. Jeśli już umiemy zmieniać dane z poziomu aplikacji, czas
przejść do nieco trudniejszego sposobu - języka zapytań. Chcąc zmienić imię pani
Katarzyny z powrotem na Catherine musielibyśmy napisać zapytanie wyglądające następująco:
UPDATE
[AdventureWorks].[Person].[Contact]
SET [FirstName] = 'Catherine'
WHERE [FirstName] =
'Katarzyna'
Na pierwszy rzut oka może
wyglądać to nieco skomplikowanie, ale jeśli choć chwilkę skupisz się na
powyższym wyrażeniu, intuicyjnie stwierdzisz, że jest ono w pełni logiczne i
zrozumiałe, a stworzenie kolejnych zapytań nie sprawi Ci już żadnej trudności. Podobnie
jest z drugą operacją, jaką robiliśmy na zbiorze danych. Jeśli tym razem
chcielibyśmy usunąć kontakt z osobą o imieniu Catherine wystarczyłoby wpisać
następującego selecta (za selecta uważamy każdą z operacji typu Data Manipulation
Language)
DELETE FROM
[AdventureWorks].[Person].[Contact]
WHERE [FirstName] =
'Catherine'
Jeśli przez chwilę zastanowiłeś
się nad powyższym kawałkiem kodu, zapewne masz nieodparte wrażenie, iż nie jest
ono do końca poprawne. Jeśli uruchomilibyśmy ten skrypt, z repozytorium
zostałyby usunięte wszelkie kontakty, które jako własność FirstName
mają Catherine. Czyli po prostu pozbylibyśmy się wszystkich kontaktów z paniami
które mają na pierwsze imię Katarzyna. A tego z pewnością nie chcielibyśmy. Aby
uzyskać wynik zgodny z naszymi oczekiwaniami, powinniśmy dodać jeszcze jeden
warunek, który ograniczy zbiór zmian. W tym celu nieco modyfikujemy klauzulę
WHERE
DELETE FROM
[AdventureWorks].[Person].[Contact]
WHERE
[FirstName] = 'Catherine' AND [LastName] = 'Abel'
Tak zmieniony skrypt spowoduje
usunięcie jednego rekordu ze zbioru kontaktów. Możemy teraz sprawdzić, jak
wielką pomyłkę zrobilibyśmy, gdybyśmy uruchomili najpierw pierwsze zapytanie. I
tak liczba usuniętych wierszy w pierwszym przypadku wyniosłaby:
SELECT COUNT(*) 'Ilosc wierszy'
FROM [AdventureWorks].[Person].[Contact]
WHERE
[FirstName] = 'Catherine' AND [LastName] = 'Abel'
zaś w drugim:
SELECT COUNT(*) 'Ilosc wierszy'
FROM [AdventureWorks].[Person].[Contact]
WHERE
[FirstName] = 'Catherine'
Łatwo więc jest zauważyć, iż zapytania są bardzo wrażliwe i
należy poświęcić dużo uwagi, aby je poprawnie zapisać. Szczególną uwagę
powinniśmy poświęcić skryptom edytującym bądź usuwającym dane. W tym konkretnym
przypadku chwila nieuwagi mogła doprowadzić do utraty 21 wierszy.
Podsumowanie
Jeśli po przeczytaniu tego artykułu czujesz, że nie wszystko
dokładnie zrozumiałeś, że są jeszcze aspekty, które chciałbyś lepiej poznać,
nie powinieneś się martwić. Kurs ten miał za zadanie przybliżyć nam samą
aplikacje, pokazać czym jest SQL Server 2005 i aplikacja dostępowa Microsoft
SQL Server Management Studio. Chciałem, by te osoby, które po raz pierwszy
zetknęły się z Transact-SQL mogły się oswoić, a przy tym troszeczkę pocieszyć,
iż znaczną cześć operacji można wykonać bez potrzeby pisania skomplikowanych
skryptów. Zaś te osoby, które czują troszeczkę niedosytu po powyższym artykule
chciałbym uprzedzić, że kolejne publikacje będą już bardziej konkretne i
udokumentowane znacznie większą ilością przykładów i teorii.