zadania nr 9

Transkrypt

zadania nr 9
Bazy danych – zadania lista nr 9
Elementy języka T-SQL
40. Polecenie PRINT jest wykorzystywane do przekazania wiadomości tekstowej (maksymalna długość
8000 znaków)
Przykład
PRINT 'Aktualna data: '+convert(char(8),getdate())
PRINT 'Aktualny czas: '+convert(char(8),getdate(),108)
41. Zmienne lokalne – muszą mieć nazwę, którą poprzedza znak @ (maksymalnie 128 znaków) oraz
typ (każdy z wyjątkiem: text, ntext oraz image)
DECLARE @nazwa_zmiennej typ
Przez instrukcję DECLARE można deklarować kilka zmiennych:
DECLARE @zmienna1 typ, @zmienna2 typ, @zmienna3 typ
Zmienna lokalna istnieje tylko we wsadzie lub w procedurze.
Oprócz zmiennych przechowujących pojedyncze wartości, można również deklarować zmienne
lokalne tabelowe
DECLARE @nazwa_zmiennej TABLE (definicja_tabeli)
gdzie definicja_tabeli oznacza definicję CREATE TABLE. Definicja zmiennej tabelowych nie
może zawierać : PRIMARY KEY, UNIQUE KEY, CHECK oraz NULL.
Przypisanie wartości zmiennym lokalnym może odbywać się na przez instrukcję SET lub SELECT, a
w przypadku zmiennych tabelowych przez INSERT INTO.
Przykład A
DECLARE @zmienna1 varchar(20)
SET @zmienna1='Przykladowy tekst nr 1'
Przykład B
DECLARE @zmienna2 varchar(35)
SELECT @zmienna2='Przykladowy tekst nr 2'
Przykład C
DECLARE @zmienna3 varchar(10)
SELECT @zmienna3=NazwaOlejku FROM Olejki
Przykład D
DECLARE @zmienna4 TABLE(pole int)
INSERT INTO @zmienna4 SELECT * FROM NazwaTabeli
lub
INSERT INTO @zmienna4 VALUES (20)
Przygotowała: mgr Aneta Klaczyńska
Bazy danych – zadania lista nr 9
Za pomocą instrukcji SET można przypisać wartość tylko jednej zmiennej. Instrukcja SELECT
umożliwia przypisanie wartości kilku zmiennym.
Przykład E Prz pisanie wartości kilu zmiennym
DECLARE @z1 varchar(5), @z2 varchar(5), @z3 varchar(5), @z4 varchar(5)
SELECT @z1=’Ala’, @z2=’Ola’, @z3=’Ela’, @z4=’Ula’
Przykład F Przypisanie wartości dwóm zmiennym:
DECLARE @zmienna4 varchar(10),@zmienna5 int
SELECT @zmienna4=NazwaOlejku,@zmienna5=IDOlejku FROM Olejki
Jeśli przypisujemy wartość zmiennej, przy pomocy instrukcji SELECT, a dane pobierane są z tabeli,
to przypisana wartość jest ostatnią pozycją w tabeli.
Przykład G Chcąc zmiennej @nazwisko przypisać z tabeli OSOBY (której wartości przedstawia rysunek obok)
Nazwisko najmłodszego Kowalskiego, należy dane posortować malejąco według
wieku
TABELA OSOBY
DECLARE @nazwisko varchar(20)
SELECT @nazwisko = Nazwisko FROM OSOBY ORDER BY wiek DESC
PRINT 'Najmłodsza osoba to: '+@nazwisko
Ćw. 162. Znajdź najwyższe stężenie olejków, znaleziona wartość przypisz zmiennej i wypisz jej zawartość
Ćw. 163. Znajdź wszystkie olejki, których cena jest poniżej średniej (zadanie wykonaj bez podzapytań – tzn. najpierw
znajdź średnia i przypisz ja pewnej zmiennej)
Ćw. 164. Należy obniżyć o 10% ceny olejków, których Ceny są powyżej średniej
42. Nazwa zmiennej globalnej jest poprzedzona dwoma znakami @.Nie można zadeklarować własnej
zmiennej globalnej. Deklaracja własnej zmiennej @@ spowoduje że zostanie utworzona zmienna
lokalna i traktowana jest jakby jej nazwę poprzedzał tylko jeden znak @.
Zmienne globalne określane są również jako funkcje.
Zmiennych globalnych jest wiele, mają za zadanie informować o stanie SQL-Servera
43. Instrukcja warunkowa IF…ELSE działa analogicznie jak w popularnych językach programowania.
IF wyrażenie logiczne
blok_kodu
ELSE
blok_kodu
blok_kodu to jedna instrukcja lub kilka, zawartych między poleceniami BEGIN END
Przykład A– Sprawdź, czy nazwa pierwszego olejku (poukładanych alfabetycznie wg nazwy), zaczyna się od litery „B”
DECLARE @nazwa VARCHAR(50)
SELECT @nazwa=Min(NazwaOlejku) FROM Olejki
IF Left(@nazwa,1)='B'
BEGIN
PRINT 'Nazwa pierwszego olejku zaczyna się na literę B'
PRINT 'Jest to olejek: ' + @nazwa
END
ELSE
PRINT 'Nazwa pierwszego olejku nie zaczyna się na literę B'
Przykład B – Sprawdź, czy istnieje tabela OSOBY, jeśli tak to wypisz odpowiedni komunikat i usuń tabelę, w
Przygotowała: mgr Aneta Klaczyńska
Bazy danych – zadania lista nr 9
przeciwnym przypadku wypisz komunikat, że tabela nie istnieje
IF ObjectProperty(Object_id('OSOBY'),'istable')=1
BEGIN
print 'Tabele OSOBY jest ! Usuwam ją!'
DROP TABLE OSOBY
END
else
print 'Tabeli OSOBY nie ma!'
Bardziej złożone sytuacje warunkowe w popularnych językach oprogramowaniach (np. Pascal)
rozwiązuje się przez zastosowanie tzw. instrukcji wyboru CASE. W języku T-SQL CASE jest
funkcją. Funkcja CASE sprawdza wiele warunków logicznych i zwraca pojedynczy wynik. Funkcje
tej można wykorzystywać w dowolnym miejscu zamiast wyrażenia stałego np. w SELECT , albo w
klauzuli WHERE, GROUP BY,SET.
CASE wyrażenie
WHEN wartość1 THEN wynik1
WHEN wartość2 THEN wynik2
[…]
[ELSE wynikN]
END
lub
CASE
WHEN wyrażenie_logiczne1 THEN wyrażenie1
WHEN wyrażenie_logiczne2 THEN wyrażenie2
WHEN wartość2 THEN wynik2
[…]
[ELSE wyrażenieN]
END
Przykład– Wypisz dane z tabeli OSOBY, zamiast wieku wypisz jedną z informacje „Pełnoletni” lub
„Jeszcze nie pełnoletni”
SELECT Nazwisko,
CASE
WHEN wiek<18 THEN 'Jeszcze nie
pełnoletni'
ELSE 'Pełnoletni'
END as [Określenie pełnoletności]
FROM OSOBY
Ćw. 165. Wypisz nazwy olejków i opis wysokości stężenia tzn. jeśli
stężenie jest z przedziału (0;50%) to opis powinien
brzmieć „Niskie”, z przedziału <50,80> „Średnie”, a
każde inne jako wysokie.
Utwórz tabelę TOWARY, zawierającą rekordy jak na poniższym rysunku.
Przygotowała: mgr Aneta Klaczyńska
Bazy danych – zadania lista nr 9
Niektóre ceny należy zmodyfikować, a mianowicie:
Ceny poniżej 100 należy zwiększyć o 20%, a ceny poniżej 100 zł należy obniżyć o 10 %.
Wykonanie powyższych zadań w sposób przedstawiony poniżej, przyniesie niepożądane efekty. Otóż
np., Cena 90 najpierw zostanie podniesiona o 20 % i jej wartość będzie wynosiła 108, a następnie
zostanie potraktowana jako cena powyżej 100 i obniżona o 10%. W efekcie końcowym będzie wynosiła
97,2.
Zwiększenie cen poniżej 100,00 o 20%
Zmniejszenie cen powyżej 100,00 o 10%
Efekt, który powinniśmy uzyskać
Problem można rozwiązać korzystając z tymczasowych tabel, lub zdecydowanie szybciej i mniej
skomplikowanie korzystając z funkcji CASE.
Ćw. 166.Rozwiąż powyższy problem z użyciem tabel tymczasowych (bez użycia funkcji CASE)
Funkcja CASE rozwiązuje powyżej opisany problem w sposób następujący:
44. Polecenie WHILE umożliwia wykonywanie w pętli określonego bloku kodu. Instrukcja WHILE może
Przygotowała: mgr Aneta Klaczyńska
Bazy danych – zadania lista nr 9
zawierać polecenie BREAK lub CONTINUE. Pierwsze z nich powoduje natychmiastowe wyjście z
pętli, drugie natomiast omija poniższe instrukcje i powoduje sprawdzenia warunku dalszego
wykonywania pętli.
WHILE wyrażenie_logiczne
blok_kodu
Przykład – W tabeli TOWARY zwiększ ceny tak, by by ich średnia cena była większa od 140, ale
wszystkie ceny powinny wzrastać równomiernie np. o 5% jednorazowo.
DECLARE @srednia money
SELECT @srednia=avg(Cena) from Towary
WHILE @srednia<140
BEGIN
UPDATE Towary SET Cena=Cena*1.05
SELECT @srednia=avg(Cena) FROM Towary
END
Ćw. 167. Powyższe zadanie wykonaj ponownie i wypisz ile takich podwyżek 5% dokonano.
Przygotowała: mgr Aneta Klaczyńska

Podobne dokumenty