ITA 101 Modul 06

background image

ITA-101 Bazy Danych

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

Wersja 1.0

Język SQL - DML

Spis treści

Język SQL DML .................................................................................................................................... 1

Informacje o module ........................................................................................................................... 2

Przygotowanie teoretyczne ................................................................................................................. 3

Przykładowy problem ................................................................................................................. 3

Podstawy teoretyczne ................................................................................................................. 3

Przykładowe rozwiązanie ............................................................................................................ 7

Porady praktyczne ...................................................................................................................... 9

Uwagi dla studenta ................................................................................................................... 10

Dodatkowe źródła informacji .................................................................................................... 10

Laboratorium podstawowe ............................................................................................................... 12

Problem 1 (czas realizacji 45 min) ............................................................................................. 12

Laboratorium rozszerzone ................................................................................................................ 19

Zadanie 1 (czas realizacji 90 min) .............................................................................................. 19

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 2/19

Informacje o module

Opis modułu

Język SQL składa się z trzech składowych: języka definiowania danych (DDL),
języka sterowania danymi (DCL) oraz języka operowania na danych (DML).
W module tym zostaną wprowadzone, a następnie przedstawione na
przykładach podstawowe instrukcje języka sterowania na danych – języka
SQL DML (z ang. Data Manipulation Language).

Cel modułu

Celem modułu jest zapoznanie słuchacza z podstawowymi instrukcjami
języka manipulowania na danych – języka T-SQL DML oraz pokazania
sposobu używania wprowadzonych instrukcji.

Uzyskane kompetencje

Po zrealizowaniu modułu będziesz:

potrafił używad podstawowych instrukcji języka SQL DML

potrafił pobierad i modyfikowad dane w zawarte w bazie

potrafił formatowad zestaw wyników i przedstawiad je w przejrzystej
formie

potrafił konstruowad proste zapytania do bazy danych Microsoft SQL
Server 2008

Wymagania wstępne

Przed przystąpieniem do pracy z tym modułem powinieneś:

wiedzied w jaki sposób stworzyd bazę danych wraz z jej
podstawowymi obiektami (patrz Moduł 4).

wiedzied, w jaki sposób poruszad się po Microsoft SQL Server
Menagement Studio

potrafid definiowad użytkowników i przydzielad im uprawnienia.

Mapa zależności modułu

Zgodnie z mapą zależności przedstawioną na Rys. 1, przed przystąpieniem
do realizacji tego modułu należy zapoznad się z materiałem zawartym
w Module 3 i Module 5

Moduł 6

Dodatek

Moduł 1

Moduł 2

Moduł 3

Moduł 4

Moduł 5

Moduł 7

Moduł 8

Moduł 9

Moduł 10

Moduł 11

Moduł 12

Moduł 13

Rys. 1 Mapa zależności modułu

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 3/19

Przygotowanie teoretyczne

Przykładowy problem

Z bazy danych może korzystad wielu użytkowników, którzy mogą dysponowad różnymi prawami
dostępu i którzy mają dostęp do różnych obiektów w bazie danych. Głównym ich zadaniem jest
możliwośd przeszukiwania danych w niej zawartych według pewnych reguł, które wcześniej zostały
zdefiniowane przez administratora, projektanta i programistę bazy danych. Zatem podstawowym
zadaniem jaki stoi przed osobami odpowiedzialnymi za prawidłowe funkcjonowanie bazy danych to
wybór odpowiedniego zestawu zapytao z wykorzystaniem polecenia SELECT wraz z różnymi
klauzulami i operatorami.

Kolejnym problemem z jakim często możemy się spotkad to wprowadzanie dane i modyfikacja
danych import i eksport danych pomiędzy różnymi bazami danych. Eksport nie stanowi tutaj
większego problemu. Natomiast Głównym problemem jest tutaj import danych z innych Systemów
Zarządzania Bazą Danych. Problem ten wynika z różnej wewnętrznej struktury bazy danych jak
również z niespójności typów danych w nich zawartych. Dobrze jest zatem wiedzied w jaki sposób
można sobie z potencjalnymi problemami importu poradzid.

Podstawy teoretyczne

W części tej pokazany zostanie sposób budowy poleceo odczytujących dane zawarte w bazie.
Rozpoczniemy od prezentacji prostych poleceo

SELECT

. Następnie prześledzimy informacje na

temat złączeo używanych do pobierania danych z wielu tabel. Na koocu prześledzimy w jaki sposób
można łatwo wprowadzad, modyfikowad i kasowad dane zawarte w bazie.

Wybieranie potrzebnych danych
Najprostszym sposobem pozyskiwania danych z pojedynczej tabeli jest wykonanie instrukcji

SELECT

. Instrukcja ta służy do odczytywania danych przechowywanych w bazie danych. Sposób

wywołania instrukcji znajduje się poniżej:

SELECT [ALL | DISTINCT] lista_wyboru
FROM nazwa_tabeli[,…n]
WHERE warunek_wyszukiwania

Jeżeli chcemy pobrad wszystkie kolumny z tabeli, to w liście wyboru podajemy gwiazdkę.
Przykładowo:

SELECT * FROM nazwa_tabeli

Powyższe polecenie zwraca wszystkie pola tabeli Department. Zazwyczaj odczytywanie wszystkich
kolumn z tabeli nie jest konieczne a wykonywanie takiego zapytania może spowodowad wiele
problemów.

Załóżmy, że potrzebne są nam dane tylko z niektórych kolumn z danej tabeli. Wówczas po słowie

SELECT

należy wymienid nazwy tych kolumn w takiej kolejności, w jakiej chcemy, aby zostały

wyświetlone. Przykładowo:

SELECT employeeid, lastname, firstname, title
FROM employees

Gdy tabela zwiera małą liczbę wierszy, czas potrzebny na ich zwrócenie jest akceptowalny. W
sytuacji, gdy tabela składa się z milionów wierszy, zwracanie ich wszystkich nie jest dobrym
rozwiązaniem, dlatego powinno się wydobywad tylko potrzebne wiersze. Zatem należy
odpowiedzied sobie na pytania: które kolumny są potrzebne? Które wiersze są potrzebne?
Prawidłowe odpowiedzi zagwarantują utworzenie przyjaznych dla serwera zapytao.

W celu ograniczenia liczby wierszy dokonujemy filtrowania rekordów. Służy do tego klauzula

WHERE

,

którą możemy umieścid w instrukcji

SELECT

. Przykładowo:

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 4/19

SELECT SELECT employeeid, lastname, firstname, title
FROM employees
WHERE employeeid = 5

Należy pamiętad, iż warunki wyszukiwania, które możemy stosowad po słowie

WHERE

, są

różnorodne i dają dużą swobodę filtrowania rekordów. Warunki te mogą:

korzystad z operatorów porównania

korzystad z porównywania ciągów

korzystad z operatorów logicznych

pobierad zakresu wartości

korzystad z listy wartości, jako kryterium wyszukiwania

pobrad wartości nieznane

Operator porównania

Operator porównania (=) powoduje, że zwracane są tylko te rekordy, których wartośd w zadanej
kolumnie jest równa podanej. Przykładowo:

SELECT lastname, city
FROM employees
WHERE country = 'USA'

Operator LIKE

Operator LIKE porównuje ciągi znaków, które powinny byd do siebie podobne. Wraz z operatorem
LIKE można stosowad znaki maskujące:

%

- zastępuje dowolny ciąg znaków. Przykładowo:

SELECT companyname
FROM customers
WHERE companyname LIKE '%Restaurant%'

W wyniku otrzymamy nazwy firm zawierające w sobie słowo „Restaurant”.

Operatorem odwrotnym do operatora

LIKE

jest operator

NOT LIKE

. Jego zastosowanie powoduje

zwrócenie rekordów, które nie spełniają podanego warunku podobieostwa. Przykładowo:

SELECT companyname
FROM customers
WHERE companyname NOT LIKE 'D%'

W wyniku otrzymamy nazwy firm które nie rozpoczynają się na literę „D”.

Operatory logiczne AND i OR

Czasem zachodzi potrzeba połączenia kilku warunków w celu wyodrębnienia potrzebnych danych.
Do łączenia warunków można użyd operatorów logicznych

AND

i

OR

.

Operator AND zapewnia prawdziwośd wielu warunków. Przykładowo:

SELECT company, Date
FROM customers
WHERE (company LIKE '%Restaurant%') AND (Date=2001-07-08)

W wyniku otrzymamy nazwy firm zawierające w sobie słowo „Restaurant” i datę 8 lipiec 2001 roku.

Operator

OR

używany jest wówczas, gdy przynajmniej jeden z warunków musi byd spełniony.

Przykładowo:

SELECT company, Date
FROM customers
WHERE (company LIKE '%Restaurant%') OR (Date=2001-07-08)

W wyniku otrzymamy nazwy firm zawierające w sobie słowo „Restaurant” lub datę 8 lipiec 2001
roku.

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 5/19

Często zachodzi potrzeba połączenia operatorów

AND

i

OR

w celu otrzymania wymaganych danych.

Przykładowo:

SELECT company, productid, Date
FROM customers
WHERE (company LIKE '%Restaurant%' OR productid=20) AND (Date=2001-07-08)

W wyniku otrzymamy nazwy firm zawierające w sobie słowo „Restaurant” lub numer
identyfikacyjny o wartości 20 i datę 8 lipiec 2001 roku.

Wyszukiwanie z listy wartości

Do wyszukiwania wartości z podanej listy służy słowo

IN

. Przykładowo:

SELECT companyname, country
FROM suppliers
WHERE country IN ('Japan', 'Italy')

W wyniku zapytania otrzymamy wszystkie nazwy firm, które mieszczą się w Japonii lub Włoszech.

Wyszukiwanie wartości nieznanych

Bazy danych pozwalają na przechowywanie wartości

NULL

w niektórych polach. Wyszukiwanie

rekordów o nieokreślonych lub pustych wartościach ma wiele praktycznych zastosowao.
Przykładowo:

SELECT companyname, fax
FROM suppliers
WHERE fax IS NULL

W wyniku wykonania zapytania otrzymamy wszystkie nazwy firm, dla których wartośd pola fax jest
pusta.

Wprowadzanie danych
Podstawą dodawania informacji jest instrukcja

INSERT

. Korzysta ona z następującej składni:

INSERT INTO [<NazwaBazyDanych>] <NazwaTabeli>
(<NazwaPola1>[,<NazwaPola2>…])
VALUES
(<Wartosc1>[,<Wartosc2>…])

Przykładowo:

INSERT INTO customers
(customersid, companyname, address, city, phone, fax)
VALUES (‘PECOF’, ‘Pecos Coffee Company’, ‘1900 Street’, ‘London’,
‘(604)555-3392’, ‘(604)555-3393’)

Czasami zachodzi potrzeba wstawienia pustego wiersza do tabeli. Wstawianie takie dokonuje się w
następujący sposób:

INSERT INTO <NazwaTabeli> DEFAULT VALUES

Zdarza się, że występuje potrzeba przeniesienia informacji z jednego systemu bazodanowego do
drugiego bez utraty danych. Służy do tego wiele narzędzi. Omówimy tutaj dwa takie narzędzia.
Jednym z nich jest narzędzie

BCP

, a drugim instrukcja

BULK INSERT

.

Narzędzie

BCP

uruchamiane jest z wiersza poleceo. Pozwala ono na import i eksport danych

wielkich rozmiarów.

BCP

wymaga nazwy bazy danych źródła a także przeznaczania jak również

tabeli lub widoku, identyfikatora działania takiego jak

in

lub

out

oraz nazwy zewnętrznego pliku

danych. Podstawowa składnia jest następująca:

BCP <BazaDanych>.<Schemat>.<NazwaTabeli>/<NazwaWidoku>
<in/out>

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 6/19

<NazwaPlikuZewnętrznego>
<ModyfikatorZabezpieczeń>
<ModyfikatorFormatu>

Poniższy przykład eksportuje rekordy z tabeli

Product

do pliku CSV.

bcp AdventureWorks.Production.Product out ‚Products.txt‛ –T -c

Następnie można zaimportowad dane za pomocą składni

bcp AdventureWorks.Production.Product2 in ‚Products.txt‛ –T -c

Może zdarzyd się sytuacja, że zajdzie potrzeba zaimportowania informacji do bazy danych, ale ze
względów bezpieczeostwa nie możemy używad narzędzia

BCP

. Istnieje polecenie T-SQL, które

pozwala na rozwiązanie tego problemu. Do wstawiania danych do bazy z poziomu języka T-SQL
służy instrukcja

BULK INSERT

, której przykładowe wywołanie ma postad:

BULK INSERT
[AdventureWorks].[Production].[Product2]
FROM ‘C:\Product.txt’
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
CODEPAGE = 'ACP'
)

Usuwanie danych
Istnieją sytuacje, kiedy musimy usunąd częśd lub wszystkie informacje z bazy danych. Przykładem
może byd skasowanie błędnie wprowadzonych rekordów lub gdy chcemy pozbyd się starych
informacji z tabel historycznych. We wszystkich tych sytuacjach korzysta się z polecenia DELETE.
Poniżej przedstawiono podstawową składnię polecenia DELETE.

DELETE FROM [<NazwaSerwera>.][<NazwaBazyDanych>.]
<NazwaSchematu>.<NazwaTabeli>
WHERE <Warunki>

Wiersze można usunąd korzystając z dowolnych kolumn tabeli w warunku

WHERE.

Przykładowo:

DELATE FROM AdventureWorks.Person.Address
WHERE AddressID = 1

Warunek WHERE może zostad użyty z dowolnymi argumentami do usuwania informacji, także tymi,
które określają zakresy danych i korzystają z logicznych kombinacji

AND

,

OR

i

NOT

. Przykładowo:

DELATE FROM Production.Product
WHERE (MakeFlag = 1)
AND
(ReorderPoint BETWEEN 200 AND 600)
AND
(SellStarDate<CONVERT(DATETIME, ‘2000-01-01 00:00:00’, 102))

Czasami istnieje potrzeba usunięcia wierszy z tabeli na postawie warunków dotyczących innej tabeli
lub tabel. Najlepszym sposobem jest wówczas użycie operatora

IN

. Przykładowo:

DELATE FOROM [AdventureWorks].[Production].[ProductInventory]
WHERE ProductID In
(
SELECT ProductID
FROM Production.Product
WHERE (MakeFlag = 1)
AND
(ReorderPoint BETWEEN 200 AND 600)

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 7/19

AND
(SellStarDate<CONVERT(DATATIME,‘2000-01-01 00:00:00’, 102))

Najlepszą kontrolę nad operacjami w bazie danych zapewniają procedury składowane. W takiej
sytuacji implementacja procedury składowanej jest podobna do implementacji innych działao
definiowanych wewnątrz procedury składowanej. Przykładowo:

CREATE PROCEDURE [Sales].[CurrencyRate_Delate] @id int
AS
DELATE FROM [AdventureWorks].[Sales].[CurrencyRate]
WHERE CurrencyRateID = @id
GO

Uaktualnianie danych
Do modyfikacji danych w tabelach używa się polecenia

UPDATE

. Jego podstawowa składnia jest

następująca:

UPDATE [<NazwaSerwera>].[<BazaDanych>].[<Schemat>].[<NazwaTabeli>]
SET [<NazwaKolumny>] = <NowaWartosc>
WHERE <WarunkiWyszukiwania>

Polecenie

UPDATE

oczywiście można stosowad bez warunku

WHERE

.

Przykładowe rozwiązanie

Wprowadzanie danych
Żebyśmy mogli wybierad jakiekolwiek dane w pierwszym kroku powinniśmy naszą bazę danych
zasilid danymi. Załóżmy, że mamy tabelę

Ksiazki

w bazie danych

Biblioteka

. Tabela

Ksiazki

ma

strukturę tak jak pokazano na Rysunku 2.

Rys. 2. Tabela Ksiazki w bazie danych Biblioteka

Pokażemy dwa sposoby wstawiania przykładowych danych do tabeli

Ksiazki

. Sposób pierwszy

polega na wstawieniu pojedynczego wiersza za pomocą instrukcji

INSERT

. Przykładowo:

INSERT INTO Ksiazki
(ID_Ksiazka, Nazwisko, Imie, Tytul, Wydawnictwo, Rok_wydania, CD)
VALUES (‘1’, ‘Kowalski’, ‘Jan’, ‘Programowanie baz danych’,
‘Microsoft Press’, ‘2006’, ’1’)

W wyniku wykonania powyższej instrukcji tabela Ksiazki będzie zawierała jeden rekord co pokazano
na Rysunku 3.

Rys. 3 Tabela Ksiazki po wstawieniu rekordu

Ja widad sposób ten nie jest zbyt efektywny przy wstawianiu większej liczby danych. W sytuacji
kiedy mamy do zaimportowania tysiące rekordów lepszym rozwiązaniem jest użycie na przykład
instrukcji

BULK INSERT

. Załóżmy, ze dane, które chcemy zaimportowad znajdują się w pliku

ksiazki.txt

, w postaci jak pokazano na Rysunku 4.

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 8/19

Rys. 4 Dane zawart w pliku książki.txt

Wówczas wywołanie instrukcji importu będzie wyglądało w następujący sposób:

BULK INSERT Ksiazki
FROM ‘C:\ksiazki.txt’
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
CODEPAGE = 'ACP'
)

Poważny problem pojawiłby się w sytuacji kiedy na kolumnie

CD

mielibyśmy dane typu

booloen

.

Wówczas przy eksporcie danych do pliku wartośd logiczna

true

lub

false

zostałaby zamieniona na

wartośd tekstową

0

lub

1

. Jeżeli w kolejnym kroku chcielibyśmy zaimportowad te same dane do

bazy wówczas pojawiłby się błąd związany z niezgodnością typów danych (kolumna ma typ logiczny
a z pliku importujemy tryb tekstowy).

Wybieranie danych
Jeżeli nasza baza danych jest już uzupełniona danymi to w kolejnym kroku możemy zastanowid się
jakie dane mogą byd najczęściej wybierane przez użytkowników. Przykładowo dla tabeli Ksiazki
użytkownik najczęściej może chcied:

1. Wyszukiwad książki danego autora lub grupy autorów.
2. Wyszukiwad książki po wydawnictwie
3. Wyszukiwad książki po roku wydania
4. Wyszukiwad książki po informacji o płycie CD
5. Wyszukiwad po kombinacji autor, wydawnictwo, rok wydania i czy jest płyta CD

Przykładowo jeżeli chcielibyśmy znaleźd autora o nazwisku Kowalski wówczas instrukcja SELECT
może mied następującą postad:

SELECT Nazwisko, Imie, Tytul FROM Ksiazki
WHERE Nazwisko=’Kowalski’

Natomiast jeżeli chcielibyśmy znaleźd autorów o nazwisku Kowalski lub Andzioski wówczas
instrukcja SELECT może mied następującą postad:

SELECT Nazwisko, Imie, Tytul FROM Ksiazki
WHERE (Nazwisko=’Kowalski’) OR (Nazwisko=’Andziński’)

W sytuacji kiedy chcielibyśmy znaleźd autorów których nazwisko zawierają ciąg znaków ski
wówczas instrukcja SELECT może mied następującą postad:

SELECT Nazwisko, Imie, Tytul FROM Ksiazki
WHERE Nazwisko LIKE=’%ski’

Oczywiście możemy do tego dołączyd jeszcze wyszukiwanie po dacie wówczas otrzymamy:

SELECT Nazwisko, Imie, Tytul, Rok FROM Ksiazki
WHERE (Nazwisko LIKE=’%ski’) AND (Rok=’2003’)

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 9/19

W sytuacji kiedy chcemy znaleźd autora o nazwisku zawierającym ciąg znaków ski lub o roku
wydania książki 2003, która zawiera płytę CD wówczas zapytanie będzie miało postad:

SELECT Nazwisko, Imie, Tytul, Rok, CD FROM Ksiazki
WHERE (Nazwisko LIKE=’%ski’ OR Rok=’2003’) AND (CD=’1’)

Najbardziej skomplikowane zapytanie występuje wówczas gdy chcemy znaleźd autora o nazwisku
zawierającym ciąg znaków ski lub o roku wydania książki 2003 która zawiera płytę CD i która
została wydana przez Helion, wówczas zapytanie będzie miało postad:

SELECT Nazwisko, Imie, Tytul, Rok, Wydawnictwo, CD FROM Ksiazki
WHERE (Nazwisko LIKE=’%ski’ OR Rok=’2003’) AND
(Wydawnictwo=’Helion’) AND (CD=’1’)

Porady praktyczne

Uwagi ogólne

Najlepszą kontrolę nad operacjami w bazie danych zapewniają procedury składowane. Zatem
lepiej jest umieszczad swoje uaktualnienia wewnątrz procedur składowanych. Pozwala
zwiększyd to zarówno wydajnośd jak i bezpieczeostwo. Korzystanie z procedur jest prostym
sposobem standaryzacji i wywołao z aplikacji.

Tworzenie dynamicznych poleceo wstawiania może zagrażad bezpieczeostwu bazy danych,
dlatego wielce prawdopodobnie jest, że administrator bazy danych będzie preferował
zabezpieczenia tabel przez odmowę uprawnieo zapisu do tabeli. Z tego powodu dobrym
sposobem jest zarządzanie operacjami wstawiania za pomocą procedur składowanych.

Wybieranie danych

Użycie polecenia SELECT * FROM Department odczytuje wszystkie kolumny z tabeli.
Zazwyczaj nie potrzebujemy informacji o wszystkich kolumnach, natomiast wykonanie
takiego zapytania bez potrzeby może spowodowad sporo problemów. Przykładowo:

a) Aplikacja może działad nieprawidłowo. Po dodaniu nowych kolumn do bazy te

nieoczekiwane kolumny mogą również byd odczytywane przez aplikacje. W konsekwencji
mogą zostad niepoprawnie obsłużone.

b) Jeśli zostaną wybrane wszystkie kolumny, optymalizator zapytao nie będzie używał

niektórych indeksów.

W przypadku, kiedy zajdzie potrzeba wykonania zapytania SELECT z połączeniem operatorów
logicznych AND i OR w celu otrzymania wymaganych danych należy pamiętad o zastosowaniu
nawiasów. Pozwalają one precyzyjnie określid kolejnośd podczas łącznia operatorów AND i
OR.

W wielu przypadkach możemy na wiele sposobów otrzymad tan sam efekt wywołania
zapytania. Poniżej mamy dwa zapytania, które zwracają te same rekordy.

SELECT company, Date
FROM customers
WHERE year(ShipDate)=2001 and month(ShipDate)=7

SELECT company, Date
FROM customers
WHERE ShipDate between ‘2001-07-01’ and ‘2001-07-31’

Pierwsze z tych zapytao odczytuje datę i miesiąc. Po odczytaniu wszystkich wierszy wykonuje
obliczenia i je porównuje. Drugie zapytanie wykonuje tylko porównanie, bez obliczeo,
ponadto jeżeli na kolumnie ShipDate znajduje się indeks, to zostanie on użyty tylko w drugim
zapytaniu – a zatem zapytanie drugie jest szybsze.

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 10/19

Można używad jednej lub wszystkich kolumn do tworzenia warunku WHERE. Wydajnośd
warunku WHERE można poprawid poprzez:

a) zastosowanie klucza głównego w warunku
b) użycie kolumn, które są indeksowane

Wprowadzanie, usuwanie i uaktualnianie danych

Aby skasowad wszystkie wiersze z tabeli, zamiast instrukcji DELATE można użyd instrukcji
TRUNCATE TABLE. Różnica w stosunku do instrukcji DELATE polega na tym, iż zadanie
kasowania odbywa się szybciej. Używając TRUNCATE TABLE trzeba mied pewnośd, że tabela
nie ma żadnych związków z innymi tabelami.

Możne także usunąd wiersze z tabeli za pośrednictwem widoków, jednak występują tutaj
pewne ograniczenia:

a) Można usunąd wiersze tylko z jednej tabeli.
b) Połączony użytkownik musi posiadad uprawnienia do usuwania dla widoku.

Można także wykonywad zadania uaktualniające korzystając z widoków. W takiej sytuacji
istnieją pewne ograniczenia:

a) Uaktualnienia są dozwolone tylko dla kolumn z pojedynczej tabeli.
b) Połączony użytkownik musi mied uprawnienia do zapisu do widoku.

Podobnie jak w przypadku instrukcji DELATE, można używad dowolnych lub wszystkich
kolumn tabeli. W celu zwiększenia wydajności polecenia UPDATE, należy:

a) W warunku należy korzystad z kolumn klucza głównego
b) Korzystad z kolumn należących do indeksów.

Uwagi dla studenta

Jesteś przygotowany do realizacji laboratorium jeśli:

rozumiesz składnię języka T-SQL DML

umiesz skonstruowad podstawowe zapytania do bazy danych

umiesz zaimportowad dane do swojej bazy danych

umiesz modyfikowad dane w swojej bazie danych

Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że
rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego
w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów.

Dodatkowe źródła informacji

1. Kalen Delaney, Microsoft SQL Server 2005: Rozwiązania praktyczne krok po kroku, Microsoft

Press, 2006

W książce autor przedstawia między innymi w jaki sposób pobierad dane z instancji
SQL Server za pomocą języka T-SQL. Pozycja polecana dla osób, które chciałyby
dowiedzied się nieco więcej na temat praktycznych metod pobierania danych .

2. Kalen Delaney, Podstawy baz danych krok po kroku, APN Promise, 2006

Bardzo dobra książka dla osób początkujących. W łatwy i przejrzysty sposób pokazano
jak należy odczytywad dane z SQL Server, jak je wybierad, modyfikowad, usuwad i
uaktualniad. Książka oprócz teorii obdarzona dużą liczbą przykładów.

3. Deren Bieniek, Randy Dyess, Mike Hotek, Javier Loria, Adam Machanic, Antonio Soto, Adolfo

Wiernik, SQL Server 2005 Implemantacja i obsuga, APN Promise, Warsyawa 2006

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 11/19

W książce przedstawiono prac e z językiem T-SQL: DML. Pokazano w jaki sposób
tworzyd zapytania formatowad zestaw wyników oraz modyfikowad dane. Książka
szczególnie polecana ze względu na dużą zawartośd dwiczeo laboratoryjnych.

4. Dusan Petkovic, Microsoft SQL Server 2008: A Beginner's Guide, McGraw-Hill, 2008

Pozycja napisana w sposób prosty. Wprowadza w SQL Server 2008 w sposób szybki
i łatwy. Osoba początkująca w SQL Server 2008 znajdzie w niej podstawy z każdego
tematu dotyczącego serwera bazodanowego. W prosty sposób dowiesz się jak
należy tworzyd zapytania, formatowad wyniki zapytao oraz modyfikowad dane.
Pozycja szczególnie polecana dla osób początkujących.

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 12/19

Laboratorium podstawowe

Problem 1 (czas realizacji 45 min)

Jesteś administratorem w firmie National Insurance. Właśnie dowiedziałeś się od swojego szefa, że
firma National Insurance zarządzająca systemem prac dyplomowych na twoim wydziale planuje
rozszerzenie systemu na skalę uczelnianą. Zadanie, jakie przed Tobą stoi, to zdefiniowanie nowych
zapytao, które najczęściej będą wykonywali użytkownicy na twojej bazie danych.

Zadanie

Tok postępowania

1. Nawiązywanie
połączenia z SQL
Server 2008

Uruchom maszynę wirtualną BD2008.

— Jako nazwę użytkownika podaj Administrator.
— Jako hasło podaj P@ssw0rd.

Jeśli nie masz zdefiniowanej maszyny wirtualnej w MS Virtual PC,
dodaj nową maszynę używając wirtualnego dysku twardego z pliku
D:\VirtualPC\Dydaktyka\BD2008.vhd.

Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom
SQL Server Management Studio.

W oknie logowania kliknij Connect.

2. Tworzenie
tabeli testowej

Z menu głównego wybierz File -> Open -> File.

Odszukaj plik C:\Labs\Lab06\dml_1.sql.

Zaznacz i uruchom (F5) poniższy fragment kodu:

-- (1) Przygotuj tabele do testowania polecen jezyka DML
USE PraceDyplomowe
GO

SELECT ID_Osoby, Imie, Nazwisko, Nr_Indeksu, ID_Stopnian
INTO Osoba_kopia
FROM Osoba
GO

INSERT INTO Osoba_kopia(ID_Osoby, Imie, Nazwisko, Nr_Indeksu,
ID_Stopnian)
VALUES ('6','Pawel','Zaremba','65432','3')
GO

3. Zapoznanie się
z poleceniem
SELECT

Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za
wyświetlenie zawartości całej tabeli Osoba. Wynik działania pokazano
na Rys. 2.

-- (2) Wyswietl cala zawartosc tabeli Osoba_kopia
SELECT *
FROM Osoba_kopia
GO

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 13/19

Rys. 2 Wynik wyświetlenia całej zawartości tabeli Osoab_kopia

Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za
wyświetlenie dwóch kolumn nazwisko i imie. Wynik działania pokazano
na Rys. 3

-- (3) Wybierz kolumny, ktore chcemy wyswietlic
SELECT Nazwisko, Imie
FROM Osoba_kopia
GO

Rys. 3 Wynik wyświetlenia dwóch kolumn Nazwisko i Imię

Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za
dodanie literału i aliasu. Wynik działania pokazano na Rys. 4.

-- (4) Dodajemy literal i alias
SELECT 'Imie i nazwisko: ' + Nazwisko + ' ' + Imie AS Osoba
FROM Osoba_kopia
GO

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 14/19

Rys. 4 Wynik dodania literału i aliasu

Alias nie jest nazwą własną. Jest to tylko tymczasowy (istniejący tylko
dla zapytania, w którym został zdefiniowany; nigdzie nie zapisywany
na stałe) nagłówek kolumny. Może zawierad napis będący nazwą innej
kolumny lub obiektu bazy danych.

Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za nie
wyświetlanie duplikatu. Wynik działania pokazano na Rys. 5.

-- (5) Nie wyswietlajmy duplikatow
SELECT DISTINCT Imie
FROM Osoba_kopia
GO

Rys. 5 Wynik zapytania bez wyświetlania duplikatów

Słowo DISTINCT oprócz usunięcia duplikatów z wyników, ignoruje
także wartości puste w zbiorze rekordów (tzn. gdy w wybranym
zestawie zdarzy się wiersz o pustych wszystkich polach, nie zostanie
on wyświetlony).

Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za
sortowanie rosnące i malejące. Wynik działania pokazano na Rys. 5.

-- (6) sortujmy rekordy rosnaco (ASC) i malejaco (DESC)

SELECT Imie, nazwisko Nr_Indeksu
FROM Osoba_kopia ORDER BY Nr_Indeksu – DESC
GO

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 15/19

Rys. 6 Wynik sortowania

Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za
ogranicenie liczny rekordów. Wynik działania pokazano na Rys. 5.

-- (7) ograniczmy liczbe rekordow

SELECT Imie, Nazwisko
FROM Osoba_kopia
WHERE Nazwisko = 'Rawa'
GO

Rys. 7 Wynik ograniczenia liczby rekordów

Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za
ogranicenie liczny rekordów z użyciem operatora wiekszości. Wynik
działania pokazano na Rys. 5.

-- (8) wyprobujmy operator wiekszosci

SELECT Imie, Nazwisko, Nr_Indeksu
FROM Osoba_kopia
WHERE Nr_Indeksu >= 110
GO

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 16/19

Rys. 8 Wynik ograniczenia liczby rekordów z uzyciem operatora większości

Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za
ogranicenie liczny rekordów z użyciem operatora OR. Wynik działania
pokazano na Rys. 5.

-- (9) wyprobujmy operator OR

SELECT Imie, Nazwisko, Nr_Indeksu
FROM Osoba_kopia
WHERE Nr_Indeksu < 110 OR Nr_Indeksu >= 115
GO

Rys. 9 Wynik ograniczenia liczby rekordów z uzyciem operatora OR

Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za
ogranicenie liczny rekordów z wyszukiwaniem w zbiorze wartości.
Wynik działania pokazano na Rys. 5.

-- (10) wyszukajmy w zbiorze wartosci

SELECT Imie, Nazwisko
FROM Osoba_kopia
WHERE Nazwisko IN ('Rawa','Nowak')
GO

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 17/19

Rys. 10 Wynik ograniczenia liczby rekordów z wyszukiwaniem w zbiorze wartości

Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za
ogranicenie liczny rekordów z wyszukiwaniem w przedziale wartości.
Wynik działania pokazano na Rys. 5.

-- (11) wyszukajmy w przedziale wartosci

SELECT Imie, Nazwisko, Nr_Indeksu
FROM Osoba_kopia
WHERE Nr_Indeksu BETWEEN 110 AND 115
GO

Rys. 11 Wynik ograniczenia liczby rekordów z wyszukiwaniem w przedziale wartości

Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za
ogranicenie liczny rekordów z użyciem operatora LIKE. Wynik działania
pokazano na Rys. 5.

-- (12) uzyjmy operatora LIKE

SELECT Imie, Nazwisko, Nr_Indeksu
FROM Osoba_kopia
WHERE Nazwisko LIKE '[A-F]%'
GO

Rys. 12 Wynik ograniczenia liczby rekordów z użyciem operatora LIKE

Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za
zliczanie liczny rekordów. Wynik działania pokazano na Rys. 5.

-- (13) zliczmy rekordy w tabeli

SELECT Count(*) AS [Liczba osob]
FROM Osoba_kopia
GO

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 18/19

Rys. 13 Zliczanie liczby rekordów

Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za
dodanie nowego rekordu.

-- (14) dodajmy nowy rekord

INSERT INTO Osoba_kopia(ID_Osoby, Imie, Nazwisko, Nr_Indeksu,
ID_Stopnian)
VALUES ('7','Marek','Kogut','35472','2')
GO

Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za
zmianę istniejącego rekordu.

-- (15) zmienmy istniejacy rekord

UPDATE Osoba_kopia
SET Nazwisko = 'Kogucinski'
WHERE LastName = 'Kogut'
GO

Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za
zmianę istniejącego rekordu.

-- (16) usunmy rekord

DELETE FROM Osoba_kopia
WHERE Nazwisko = 'Kogucinski'
GO

Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za
usunięcie tabeli.

-- (17) usunmy zawartosc tabeli

TRUNCATE TABLE Osoba_kopia
GO

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 6

ITA-101 Bazy danych

Język SQL DML

Strona 19/19

Laboratorium rozszerzone

Zadanie 1 (czas realizacji 90 min)

Jesteś administratorem w firmie National Insurance. Właśnie dowiedziałeś się od swojego szefa, że
firma zarządzająca bazą AdventureWorks planuje rozszerzenie i modernizacje systemu w celu
spełnienia pewnych standardów. Rozszerzenie to wiąże się z modyfikacją struktury bazy danych
oraz importem do bazy danych wielu milionów rekordów. W konsekwencji w związku z
modernizacją systemu bazodanowego oraz spełnienia standardów muszą zostad przebudowane
zapytania wysyłane do obiektów bazy danych. W związku z tym częśd zapytao powinna zostad
usunięta, częśd zmodyfikowana, a częśd od nowa utworzona.

Zadania, jakie przed Tobą stoją, to:

1. Podjęcie decyzji w jaki sposób usprawnid proces importu wielu milionów danych do systemu

bazodanowego.

1. Podjęcie, decyzji które zapytania w bazie danych pozostaną bez zmian, a które zostaną

zmodyfikowane lub usunięte.

2. Podjęcie decyzji, jakie nowe zapytania powinny zostad utworzone.


Wyszukiwarka

Podobne podstrony:
ITA 101 Modul 03
ITA 101 Modul 02
ITA 101 Modul 13
ITA 101 Modul 11
ITA 101 Modul 04
ITA 101 Modul 09
ITA 101 Modul Dodatek A
ITA 101 Modul 08
ITA 101 Modul 07
ITA 101 Modul 10
ITA 101 Modul 12
ITA 101 Modul 01
ITA 101 Modul 05
ITA 101 Modul 02 v2

więcej podobnych podstron