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.