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