You are on page 1of 19

Zbir zada z SQLa z elementami T-SQLa

(Wersja robocza z dnia 05.04.2016 r.)


(Zgaszanie usterek Robert.Fidytek@inf.ug.edu.pl)
opracowa dr Robert Fidytek
SPIS TRECI
Zadania poziom 1 (Prosty DQL i DML) .................................................................................................................................... 4
1 Projekcja wynikw zapyta (SELECT FROM ) ........................................................................................................... 4
2 Sortowanie wynikw zapyta (ORDER BY) ..................................................................................................................... 4
3 Eliminowanie duplikatw wynikw zapyta (DISTINCT) ................................................................................................ 4
4 Selekcja wynikw zapyta (WHERE) ............................................................................................................................... 4
5 Warunki zoone (AND, OR, NOT) ................................................................................................................................... 4
6 Predykat IN ..................................................................................................................................................................... 5
7 Predykat LIKE .................................................................................................................................................................. 5
8 Predykat BETWEEN ......................................................................................................................................................... 5
9 Warto NULL ................................................................................................................................................................. 5
10 Kolumny wyliczeniowe (COALESCE)............................................................................................................................ 5
11 Ograniczanie wynikw wyszukiwania (TOP) ............................................................................................................... 5
12 Wybrane funkcje daty i czasu (DAY, MONTH, YEAR, GETDATE, DATEDIFF) ............................................................... 6
13 Wybrane funkcje operujce na napisach (LEFT, RIGHT, LEN, UPPER, LOWER, STUFF) .............................................. 6
14 Modyfikacja danych w bazie danych (UPDATE).......................................................................................................... 6
15 Usuwanie danych z bazy danych (DELETE) ................................................................................................................. 6
16 Dodawanie danych do bazy danych (INSERT) ............................................................................................................. 6
Zadania poziom 2 (Zaawansowany DML i DQL)...................................................................................................................... 7
17 Zczenia wewntrzne dwch tabel ........................................................................................................................... 7
18 Zczenia wewntrzne wikszej liczby tabel ............................................................................................................... 7
19 Funkcje agregujce bez grupowania........................................................................................................................... 7
20 Funkcje agregujce z grupowaniem (GROUP BY, zczenia zewntrzne) ................................................................... 7
21 Warunki na funkcje agregujce (HAVING) .................................................................................................................. 8
22 Podzapytania nieskorelowane z uyciem funkcji agregujcych bez grupowania ....................................................... 8
23 Podzapytania nieskorelowane z predykatem IN ........................................................................................................ 8
24 Funkcje agregujce i podzapytania ............................................................................................................................. 8
25 Modyfikacja danych w bazie danych (UPDATE i podzapytania) ................................................................................. 8
26 Usuwanie danych z bazy danych (DELETE i podzapytania)......................................................................................... 9
27 Operacje na zbiorach danych (UNION, UNION ALL, INTERSECT, EXCEPT) .................................................................. 9
Zadania poziom 3 (Struktura bazy danych) ............................................................................................................................ 9
28 Tworzenie tabel (CREATE TABLE)................................................................................................................................ 9

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


2
29 Modyfikacja struktury tabeli (ALTER TABLE) .............................................................................................................. 9
30 Usuwanie tabel, kolumn w tabeli i ogranicze (DROP i ALTER)................................................................................ 10
31 Usuwanie i modyfikacja kaskadowa (CREATE i ALTER) ............................................................................................. 10
Zadania poziom 4 (Oprogramowywanie bazy danych) ........................................................................................................ 11
32 Tworzenie procedur skadowych (CREATE PROCEDURE) ......................................................................................... 11
33 Tworzenie funkcji skadowych (CREATE FUNCTION) ................................................................................................ 11
34 Tworzenie widokw (zczenia zewntrzne, CREATE VIEW) .................................................................................... 11
35 Tworzenie indeksw (CREATE INDEX) ...................................................................................................................... 11
36 Tworzenie wyzwalaczy typu AFTER (CREATE TRIGGER). .......................................................................................... 12
37 Tworzenie wyzwalaczy typu INSTEAD OF (CREATE TRIGGER). ................................................................................. 12
Zadania poziom 5 (Programowanie w T-SQL) ....................................................................................................................... 12
38 Wyzwalacze i kursory ................................................................................................................................................ 12
39 Widoki + CASE ........................................................................................................................................................... 12
40 Procedury + dynamiczny SQL .................................................................................................................................... 13
41 Inne zadania, ciekawostki ......................................................................................................................................... 13

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


3
TRECI ZADA

Zadania poziom 1 (Prosty DQL i DML)

1 Projekcja wynikw zapyta (SELECT FROM )


1.1 Wywietli zawarto wszystkich kolumn z tabeli pracownik.

1.2 Z tabeli pracownik wywietli same imiona pracownikw.

1.3 Wywietli zawarto kolumn imi, nazwisko i dzia z tabeli pracownik.

2 Sortowanie wynikw zapyta (ORDER BY)


2.1 Wywietli zawarto kolumn imi, nazwisko i pensja z tabeli pracownik. Wynik posortuj malejco wzgldem
pensji .

2.2 Wywietl zawarto kolumn nazwisko i imi z tabeli pracownik. Wynik posortuj rosnco (leksykograficznie)
wzgldem nazwiska i imienia.

2.3 Wywietli zawarto kolumn nazwisko, dzia, stanowisko z tabeli pracownik. Wynik posortuj rosnco wzgldem
dziau, a dla tych samych nazw dziaw malejco wzgldem stanowiska.

3 Eliminowanie duplikatw wynikw zapyta (DISTINCT)


3.1 Wywietli niepowtarzajce si wartoci kolumny dzia z tabeli pracownik.

3.2 Wywietli unikatowe wiersze zawierajce wartoci kolumn dzia i stanowisko w tabeli pracownik.

3.3 Wywietli unikatowe wiersze zawierajce wartoci kolumn dzia i stanowisko w tabeli pracownik. Wynik posortuj
malejco wzgldem dziau i stanowiska.

4 Selekcja wynikw zapyta (WHERE)


4.1 Znajd pracownikw o imieniu Jan. Wywietl ich imiona i nazwiska.

4.2 Wywietli imiona i nazwiska pracownikw pracujcych na stanowisku sprzedawca.

4.3 Wywietli imiona, nazwiska, pensje pracownikw, ktrzy zarabiaj powyej 1500 z. Wynik posortuj malejco
wzgldem pensji.

5 Warunki zoone (AND, OR, NOT)


5.1 Z tabeli pracownik wywietli imiona, nazwiska, dziay, stanowiska tych pracownikw, ktrzy pracuj w dziale
obsugi klienta na stanowisku sprzedawca.

5.2 Znale pracownikw pracujcych w dziale technicznym na stanowisku kierownika lub sprzedawcy. Wywietl
imi, nazwisko, dzia, stanowisko.

5.3 Znale samochody, ktre nie s marek fiat i ford.

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


4
6 Predykat IN
6.1 Znale samochody marek mercedes, seat i opel.

6.2 Znajd pracownikw o imionach Anna, Marzena i Alicja. Wywietl ich imiona, nazwiska i daty zatrudnienia.

6.3 Znajd klientw, ktrzy nie mieszkaj w Warszawie lub we Wrocawiu. Wywietl ich imiona, nazwiska i miasta
zamieszkania.

7 Predykat LIKE
7.1 Wywietli imiona i nazwiska klientw, ktrych nazwisko zawiera liter K.

7.2 Wywietli imiona i nazwiska klientw, dla ktrych nazwisko zaczyna si na D, a koczy si na SKI.

7.3 Znale imiona i nazwiska klientw, ktrych nazwisko zawiera drug liter O lub A.

8 Predykat BETWEEN
8.1 Z tabeli samochd wywietli wiersze, dla ktrych pojemno silnika jest z przedziau [1100,1600].

8.2 Znale pracownikw, ktrzy zostali zatrudnieni pomidzy datami 1997-01-01 a 1997-12-31.

8.3 Znale samochody, dla ktrych przebieg jest pomidzy 10000 a 20000 km lub pomidzy 30000 a 40000 km.

9 Warto NULL
9.1 Znale pracownikw, ktrzy nie maj okrelonego dodatku do pensji.

9.2 Wywietli klientw, ktrzy posiadaj kart kredytow.

9.3 Dla kadego pracownika wywietl imi, nazwisko i wysoko dodatku. Warto NULL z kolumny dodatek powinna
by wywietlona jako 0. Wskazwka: Uyj funkcji COALESCE.

10 Kolumny wyliczeniowe (COALESCE)


10.1 Wywietli imiona, nazwiska pracownikw ich pensje i dodatki oraz kolumn wyliczeniow do_zapaty,
zawierajc sum pensji i dodatku. Wskazwka: Warto NULL z kolumny dodatek powinna by wywietlona jako
zero.

10.2 Dla kadego pracownika wywietl imi, nazwisko i wyliczeniow kolumn nowa_pensja, ktra bdzie miaa o
50% wiksz warto ni dotychczasowa pensja.

10.3 Dla kadego pracownika oblicz ile wynosi 1% zarobkw (pensja + dodatek). Wywietl imi, nazwisko i obliczony
1%. Wyniki posortuj rosnco wzgldem obliczonego 1%.

11 Ograniczanie wynikw wyszukiwania (TOP)


11.1 Znajd imi i nazwisko pracownika, ktry jako pierwszy zosta zatrudniony w wypoyczalni samochodw.
(Jest tylko jeden taki pracownik.)

11.2 Wywietl pierwszych czterech pracownikw z alfabetycznej listy (nazwiska i imiona) wszystkich pracownikw.
(W tym zadaniu nie musisz si przejmowa powtrkami imion i nazwisk, ale gdyby chcia to sprawd konstrukcj
SELECT TOP x WITH TIES )

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


5
11.3 Wyszukaj informacj o ostatnim wypoyczeniu samochodu.

12 Wybrane funkcje daty i czasu (DAY, MONTH, YEAR, GETDATE, DATEDIFF)


12.1 Wyszukaj pracownikw zatrudnionych w maju. Wywietl ich imiona, nazwiska i dat zatrudnienia. Wynik
posortuj rosnco wzgldem nazwiska i imienia.
Wskazwka: Zajrzyj do dokumentacji MS SQL i poczytaj o funkcjach: DAY, MONTH, YEAR, GETDATE, DATEDIFF.

12.2 Dla kadego pracownika (imi i nazwisko) oblicz ile ju pracuje dni. Wynik posortuj malejco wedug iloci
przepracowanych dni.

12.3 Dla kadego samochodu (marka, typ) oblicz ile lat upyno od jego produkcji. Wynik posortuj malejco po iloci
lat.

13 Wybrane funkcje operujce na napisach (LEFT, RIGHT, LEN, UPPER, LOWER,


STUFF)
13.1 Wywietl imi, nazwisko i inicjay kadego klienta. Wynik posortuj wzgldem inicjaw, nazwiska i imienia
klienta.
Wskazwka: Zajrzyj do dokumentacji MS SQL i poczytaj o funkcjach: LEFT, RIGHT, LEN, UPPER, LOWER, STUFF.

13.2 Wywietl imiona i nazwiska klientw w taki sposb, aby pierwsza litera imienia i nazwiska bya wielka, a
pozostae mae.

13.3 Wywietl imiona, nazwiska i numery kart kredytowych klientw. Kada z ostatnich szeciu cyfr wywietlanego
numeru karty kredytowej klienta powinna by zastpiona znakiem x .

14 Modyfikacja danych w bazie danych (UPDATE)


14.1 Pracownikom, ktrzy nie maj okrelonej wysokoci dodatku nadaj dodatek w wysokoci 50 z.

14.2 Klientowi o identyfikatorze rwnym 10 zmie imi i nazwisko na Jerzy Nowak.

14.3 Zwiksz o 100 z dodatek pracownikom, ktrych pensja jest mniejsza ni 1500 z.

15 Usuwanie danych z bazy danych (DELETE)


15.1 Usun klienta o identyfikatorze rwnym 17.

15.2 Usun wszystkie informacje o wypoyczeniach dla klienta o identyfikatorze rwnym 17.

15.3 Usu wszystkie samochody o przebiegu wikszym ni 60000.

16 Dodawanie danych do bazy danych (INSERT)


16.1 Dodaj do bazy danych klienta o identyfikatorze rwnym 121: Adam Cichy zamieszkay ul. Korzenna 12, 00-950
Warszawa, tel. 123-454-321.

16.2 Dodaj do bazy danych nowy samochd o identyfikatorze rwnym 50: srebrna skoda octavia o pojemnoci silnika
1896 cm3 wyprodukowana 1 wrzenia 2012 r. i o przebiegu 5 000 km.

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


6
16.3 Dodaj do bazy danych pracownika: Alojzy Mikos zatrudniony od 11 sierpnia 2010 r. w dziale zaopatrzenie na
stanowisku magazyniera z pensj 3000 z i dodatkiem 50 z, telefon do pracownika: 501-501-501, pracownik pracuje w
Warszawie na ul. Lewartowskiego 12, kod pocztowy: 00-950.

Zadania poziom 2 (Zaawansowany DML i DQL)

17 Zczenia wewntrzne dwch tabel


17.1 Wyszukaj samochody, ktry nie zostay zwrcone. (Data oddania samochodu ma mie warto NULL.) Wywietl
identyfikator, mark i typ samochodu oraz jego dat wypoyczenia i oddania.

17.2 Wyszukaj klientw, ktrzy nie zwrcili jeszcze samochodu. (Data oddania samochodu ma mie warto NULL.)
Wywietl imi i nazwisko klienta oraz identyfikator samochodu i dat wypoyczenia nie zwrconego jeszcze
samochodu. Wynik posortuj rosnco wzgldem nazwiska i imienia klienta.

17.3 Wrd klientw wypoyczalni wyszukaj daty i kwoty wpaconych przez nich kaucji. Wywietl imi i nazwisko
klienta oraz dat wpacenia kaucji (data wypoyczenia samochodu jest rwnoczenie dat wpacenia kaucji) i jej
wysoko (pomi kaucje majce warto NULL).

18 Zczenia wewntrzne wikszej liczby tabel


18.1 Dla kadego klienta, ktry cho raz wypoyczy samochd, wyszukaj jakie i kiedy wypoyczy samochody.
Wywietl imi i nazwisko klienta oraz dat wypoyczenia, mark i typ wypoyczonego samochodu. Wynik posortuj
rosnco po nazwisku i imieniu klienta oraz marce i typie samochodu.

18.2 Dla kadej filii wypoyczalni samochodw (tabela miejsce) wyszukaj jakie samochody byy wypoyczane.
Wywietl adres filii (ulica i numer) oraz mark i typ wypoyczonego samochodu. Wyniki posortuj rosnco wzgldem
adresu filii, marki i typu samochodu.

18.3 Dla kadego wypoyczonego samochodu wyszukaj informacj jacy klienci go wypoyczali. Wywietl
identyfikator, mark i typ samochodu oraz imi i nazwisko klienta. Wyniki posortuj rosnco po identyfikatorze
samochodu oraz nazwisku i imieniu klienta.

19 Funkcje agregujce bez grupowania


19.1 Znale najwiksz pensj pracownika wypoyczalni samochodw.

19.2 Znale redni pensj pracownika wypoyczalni samochodw.

19.3 Znale najwczeniejsz dat wyprodukowania samochodu .

20 Funkcje agregujce z grupowaniem (GROUP BY, zczenia zewntrzne)


20.1 Dla kadego klienta wypisz imi, nazwisko i czn ilo wypoycze samochodw (nie zapomnij o zerowej liczbie
wypoycze). Wynik posortuj malejco wzgldem iloci wypoycze.

20.2 Dla kadego samochodu (identyfikator, marka, typ) oblicz ilo wypoycze. Wynik posortuj rosnco wzgldem
iloci wypoycze. (Nie zapomnij o samochodach, ktre ani razu nie zostay wypoyczone.)

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


7
20.3 Dla kadego pracownika oblicz ile wypoyczy samochodw klientom. Wywietl imi i nazwisko pracownika oraz
ilo wypoycze. Wynik posortuj malejco po iloci wypoycze. (Nie zapomnij o pracownikach, ktrzy nie
wypoyczyli adnego samochodu.)

21 Warunki na funkcje agregujce (HAVING)


21.1 Znajd klientw, ktrzy co najmniej 2 razy wypoyczyli samochd. Wypisz dla tych klientw imi, nazwisko i ilo
wypoycze. Wynik posortuj rosnco wzgldem nazwiska i imienia.

21.2 Znajd samochody, ktre byy wypoyczone co najmniej 5 razy. Wywietl identyfikator samochodu, mark, typ i
ilo wypoycze. Wynik posortuj rosnco wzgldem marki i typu samochodu.

21.3 Znajd pracownikw, ktrzy klientom wypoyczyli co najwyej 20 razy samochd. Wywietl imiona i nazwiska
pracownikw razem z iloci wypoycze. Wynik posortuj rosnco wzgldem iloci wypoycze, nazwiska i imienia
pracownika. (Uwzgldnij pracownikw, ktrzy nie wypoyczyli adnego samochodu.)

22 Podzapytania nieskorelowane z uyciem funkcji agregujcych bez grupowania


22.1 Wywietl imiona, nazwiska i pensje pracownikw, ktrzy posiadaj najwysz pensj.

22.2 Wywietl pracownikw (imiona, nazwiska, pensje), ktrzy zarabiaj powyej redniej pensji.

22.3 Wyszukaj samochd (marka, typ, data produkcji), ktry zosta wyprodukowany najwczeniej. Moe si tak
zdarzy, e kilka samochodw zostao wyprodukowanych w ten sam "najwczeniejszy" dzie.

23 Podzapytania nieskorelowane z predykatem IN


23.1 Wywietl wszystkie samochody (marka, typ, data produkcji), ktre do tej pory nie zostay wypoyczone.

23.2 Wywietl klientw (imi i nazwisko), ktrzy do tej pory nie wypoyczyli adnego samochodu. Wynik posortuj
rosnco wzgldem nazwiska i imienia klienta.

23.3 Znale pracownikw (imi i nazwisko), ktrzy do tej pory nie wypoyczyli adnego samochodu klientowi.

24 Funkcje agregujce i podzapytania


24.1 Znajd samochd/samochody (id_samochod, marka, typ), ktry by najczciej wypoyczany. Wynik posortuj
rosnco (leksykograficznie) wzgldem marki i typu.

24.2 Znajd klienta/klientw (id_klient, imie, nazwisko), ktrzy najrzadziej wypoyczali samochody. Wynik posortuj
rosnco wzgldem nazwiska i imienia. Nie uwzgldniaj klientw, ktrzy ani razu nie wypoyczyli samochodu.

24.3 Znajd pracownika/pracownikw (id_pracownik, nazwisko, imie), ktry wypoyczy najwicej samochodw
klientom. Wynik posortuj rosnco (leksykograficznie) wzgldem nazwiska i imienia pracownika.

25 Modyfikacja danych w bazie danych (UPDATE i podzapytania)


25.1 Podwyszy o 10% pensj pracownikom, ktrzy zarabiaj poniej redniej.

25.2 Pracownikom, ktrzy w maju wypoyczyli samochd klientowi zwiksz dodatek o 10 z.

25.3 Obniy pensje o 5% wszystkim pracownikom ktrzy nie wypoyczyli klientowi samochodu w 1999 roku.

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


8
26 Usuwanie danych z bazy danych (DELETE i podzapytania)
26.1 Usun klientw, ktrzy nie wypoyczyli adnego samochodu.

26.2 Usun samochody, ktre nie zostay ani razu wypoyczone.

26.3 Usun pracownikw, ktrzy klientom nie wypoyczyli adnego samochodu.

27 Operacje na zbiorach danych (UNION, UNION ALL, INTERSECT, EXCEPT)


27.1 Wywietl razem wszystkie imiona i nazwiska pracownikw i klientw. (Suma dwch zbiorw.) Wynik posortuj
wzgldem nazwiska i imienia. Rozpatrz dwa przypadki
a) z pominiciem duplikatw, b) z wywietleniem duplikatw (pena suma).
Wskazwka: https://msdn.microsoft.com/pl-pl/library/ff848745(v=sql.110).aspx.

27.2 Wywietl powtarzajce si imiona i nazwiska klientw i pracownikw. (Cz wsplna dwch zbiorw.)

27.3 Wywietl imiona i nazwiska klientw, ktrzy nazywaj si inaczej ni pracownicy. (Rnica dwch zbiorw.)
Wynik posortuj wzgldem nazwiska i imienia.

Zadania poziom 3 (Struktura bazy danych)

28 Tworzenie tabel (CREATE TABLE)


28.1 Utwrz tabel pracownik2(id_pracownik, imie, nazwisko, pesel, data_zatr, pensja), gdzie
* id_pracownik jest numerem pracownika nadawanym automatycznie, jest to klucz gwny
* imie i nazwisko to niepuste acuchy znakw zmiennej dugoci,
* pesel unikatowy acuch jedenastu znakw staej dugoci,
* data_zatr domylna warto daty zatrudnienia to bieca data systemowa,
* pensja nie moe by nisza ni 1000z.

28.2 Utwrz tabel naprawa2(id_naprawa, data_przyjecia, opis_usterki, zaliczka), gdzie


* id_naprawa jest unikatowym, nadawanym automatycznie numerem naprawy, jest to klucz gwny,
* data_przyjecia nie moe by pniejsza ni bieca data systemowa,
* opis usterki nie moe by pusty, musi mie dugo powyej 10 znakw,
* zaliczka nie moe by mniejsza ni 100z ani wiksza ni 1000z.

28.3 Utwrz tabel wykonane_naprawy2(id_pracownik, id_naprawa, data_naprawy, opis_naprawy, cena), gdzie


* id_pracownik identyfikator pracownika wykonujcego napraw, klucz obcy powizany z tabel pracownik2,
* id_naprawa identyfikator zgoszonej naprawy, klucz obcy powizany z tabel naprawa2,
* data_naprawy domylna warto daty naprawy to bieca data systemowa,
* opis_naprawy niepusty opis informujcy o sposobie naprawy,
* cena cena naprawy.

29 Modyfikacja struktury tabeli (ALTER TABLE)


29.1 Dana jest tabela CREATE TABLE student2(id_student INT IDENTITY(1,1) PRIMARY KEY, nazwisko VARCHAR(20),
nr_indeksu INT, stypendium MONEY); Wprowad ograniczenia na tabel student2:
* nazwisko niepusta kolumna,
* nr_indeksu unikatowa kolumna,
* stypendium nie moe by nisze ni 1000z,
* dodatkowo dodaj niepust kolumn imie.

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


9
29.2 Dane s tabele: CREATE TABLE dostawca2(id_dostawca INT IDENTITY(1,1) PRIMARY KEY, nazwa VARCHAR(30));
CREATE TABLE towar2(id_towar INT IDENTITY(1,1) PRIMARY KEY, kod_kreskowy INT, id_dostawca INT);
Zmodyfikuj powysze tabele:
* kolumna nazwa z tabeli dostawca2 powinna by unikatowa,
* do tabeli towar2 dodaj niepust kolumn nazwa,
* kolumna kod_kreskowy w tabeli towar2 powinna by unikatowa,
* kolumna id_dostawca z tabeli towar2 jest kluczem obcym z tabeli dostawca2.

29.3 Dane s tabele: CREATE TABLE kraj2(id_kraj INT IDENTITY(1,1) PRIMARY KEY, nazwa VARCHAR(30));
CREATE TABLE gatunek2(id_gatunek INT IDENTITY(1,1) PRIMARY KEY, nazwa VARCHAR(30));
CREATE TABLE zwierze2(id_zwierze INT IDENTITY(1,1) PRIMARY KEY, id_gatunek INT, id_kraj INT, cena MONEY);
Zmodyfikuj powysze tabele:
* kolumny nazwa z tabel kraj2 i gatunek2 maj by niepuste,
* kolumna id_gatunek z tabeli zwierze2 jest kluczem obcym z tabeli gatunek2,
* kolumna id_kraj z tabeli zwierze2 jest kluczem obcym z tabeli kraj2.

30 Usuwanie tabel, kolumn w tabeli i ogranicze (DROP i ALTER)


30.1 Dane s tabele: CREATE TABLE kategoria2(id_kategoria INT PRIMARY KEY, nazwa VARCHAR(30) );
CREATE TABLE przedmiot2(id_przedmiot INT PRIMARY KEY, id_kategoria INT REFERENCES kategoria2(id_kategoria),
nazwa VARCHAR(30));
Napisa instrukcje SQL, ktra usun tabele kategoria2 i przedmiot2.
Wsk: Zwr uwag na kolejno usuwania tabel.
Wersja trudniejsza: Czy potrafisz najpierw sprawdzi, czy tabele istniej i jeli istniej to dopiero wtedy je usun?

30.2 Dana jest tabela: CREATE TABLE osoba2(id_osoba INT, imie VARCHAR(15), imie2 VARCHAR(15) );
Napisa instrukcj SQL, ktra z tabeli osoba2 usunie kolumn imie2.

30.3 Dana jest tabela: CREATE TABLE uczen2(id_uczen INT PRIMARY KEY, imie VARCHAR(15), nazwisko VARCHAR(20)
CONSTRAINT uczen_nazwisko_unique UNIQUE);
Napisa instrukcj SQL, ktra usunie narzucony warunek unikatowoci na kolumn nazwisko.
Wersja trudniejsza: Czy potrafiby zrobi powysze zadanie dla definicji tabeli: CREATE TABLE uczen2(id_uczen INT
PRIMARY KEY, imie VARCHAR(15), nazwisko VARCHAR(20) CONSTRAINT UNIQUE); ?

31 Usuwanie i modyfikacja kaskadowa (CREATE i ALTER)


31.1 Utwrz tabel wlasciciel2(id_wlasciciel, imie,nazwisko,data_ur,ulica,numer,kod,miejscowosc) i
zwierze2(id_zwierze,id_wlasciciel,rasa,data_ur,imie) w taki sposb, aby po usuniciu informacji o wacicielu
zwierzcia z tabeli wlasciciel2, SZBD automatycznie identyfikator waciciela w tabeli zwierze2 ustawia na warto
NULL. Nie zapomnij o doborze pozostaych ogranicze na kolumny (mona to zrobi wg uznania).

31.2 Dane s tabele: CREATE TABLE film2(id_film INT PRIMARY KEY,tytul VARCHAR(50) NOT NULL);
CREATE TABLE gatunek2(id_gatunek INT PRIMARY KEY,nazwa VARCHAR(50) NOT NULL);
CREATE TABLE film2_gatunek2(id_film INT,id_gatunek INT,PRIMARY KEY(id_film,id_gatunek));
Zmodyfikuj struktur powyszych tabel (polecenie ALTER) taka aby:
a) w przypadku usunicia filmu z tabeli film2 zostay automatycznie usuwane informacje jakich gatunkw by
usunity film (nie usuwamy gatunkw z tabeli gatunek2),
b) w przypadku usunicia gatunku z tabeli gatunek2 zostay automatycznie usuwane informacje jakie filmy byy tego
gatunku (nie usuwamy filmw z tabeli film2).

31.3 Dane s tabele: CREATE TABLE stanowisko2 (id_stanowisko INT PRIMARY KEY, nazwa VARCHAR(30));
CREATE TABLE pracownik2(id_pracownik INT PRIMARY KEY, id_stanowisko INT, nazwisko VARCHAR(20));
Zmodyfikuj struktury powyszych tabel tak, aby po usuniciu stanowiska z tabeli stanowisko2 identyfikator

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


10
stanowiska w tabeli pracownik2 by automatycznie ustawiany na warto NULL oraz podczas modyfikowania
identyfikatora stanowiska w tabeli stanowisko2 wszystkie identyfikatory stanowiska w tabeli pracownik2 powinny
zosta automatycznie zaktualizowane.

Zadania poziom 4 (Oprogramowywanie bazy danych)

32 Tworzenie procedur skadowych (CREATE PROCEDURE)


32.1 Napisa procedur o nazwie wypisz_samochody, ktra posiada tylko jeden parametr - marka samochodu.
Procedura powinna wywietla wszystkie informacje z tabeli samochd o samochodach zadanej marki.

32.2 Napisa procedur o nazwie zwieksz_pensje posiadajc dwa parametry: identyfikator pracownika i kwot.
Procedura powinna zwikszy pensj pracownikowi, na ktrego wskazuje zadany identyfikator o zadan kwot.
Przetestuj utworzon procedur zwiksz pracownikowi o identyfikatorze rwnym 1 pensj o 1000 z.

32.3 Napisz procedur o nazwie dodaj_klienta umoliwiajc dodanie nowego klienta. Dane klienta powinny by
odczytane z parametrw procedury. Dobierz odpowiednio parametry dla tworzonej procedury na podstawie kolumn
tabeli klient. Przetestuj utworzon procedur dodaj nowego klienta.

33 Tworzenie funkcji skadowych (CREATE FUNCTION)


33.1 Napisa funkcj o nazwie aktywnosc_klienta, ktra bdzie zwraca ilo wypoycze samochodw dla klienta o
identyfikatorze zadanym jako parametr funkcji. Przetestuj utworzon funkcj sprawd ile samochodw wypoyczy
klient o identyfikatorze rwnym 3.

33.2 Napisa funkcj o nazwie ile_wypozyczen posiadajc dwa parametry data_od i data_do. Funkcja powinna
zwrci ilo wypoycze samochodw w zadanym przedziale czasowym. Przetestuj utworzon funkcj sprawd ile
zostao wypoyczonych samochodw od 01.01.2000r. do 31.12.2000r.

33.3 Napisa funkcj o nazwie roznica_pensji nie posiadajc parametrw i zwracajc rnic pomidzy najwiksz i
najmniejsz pensj wrd pracownikw wypoyczalni. Przetestuj utworzon funkcj.

34 Tworzenie widokw (zczenia zewntrzne, CREATE VIEW)


34.1 Utwrz widok o nazwie klient_raport zawierajcy informacje o iloci wypoycze kadego z klientw (id_klient,
imie, nazwisko). Uwzgldnij klientw, ktrzy ani razu nie wypoyczyli samochodu. Za pomoc utworzonego widoku
znajd klientw, ktrzy wypoyczyli samochd wicej ni raz.

34.2 Utwrz widok o nazwie samochod_raport zawierajcy informacje o iloci wypoycze kadego z samochodw
(id_samochod, marka, typ). Uwzgldnij samochody, ktre ani razu nie zostay wypoyczone. Za pomoc utworzonego
widoku znajd samochd/samochody, ktre byy najczciej wypoyczane.

34.3 Utwrz widok o nazwie pracownik_raport zawierajcy informacje o iloci wypoycze samochodw przez
pracownikw. Nie zapomnij uwzgldni pracownikw, ktrzy nie wypoyczyli adnego samochodu. Za pomoc
utworzonego widoku znajd pracownikw, dla ktrych ilo wypoycze jest wiksza od redniej iloci wypoycze
samochodw przez pracownikw.

35 Tworzenie indeksw (CREATE INDEX)


35.1 Utwrz unikalny indeks dla kolumny telefon w tabeli klient.

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


11
35.2 Utwrz indeks klastrowy dla kolumn nazwisko i imie w tabeli klient.

35.3 Utwrz indeks nieklastrowy dla kolumn marka i typ w tabeli samochd.

36 Tworzenie wyzwalaczy typu AFTER (CREATE TRIGGER).


36.1 Napisa wyzwalacz, ktry uniemoliwi usunicie klienta.
Przetestuj utworzony wyzwalacz sprbuj usun wszystkich klientw.

36.2 Napisa wyzwalacz, ktry uniemoliwi dodanie pracownika z pensj lub dodatkiem rwnym zero lub NULL.
Przetestuj utworzony wyzwalacz sprbuj doda kilku pracownikw jednoczenie.

36.3 Napisa wyzwalacz o nazwie "duplikat_miejsce", ktry uniemoliwi jednorazowo dodanie wicej ni jednego
miejsca oraz dodatkowo uniemoliwi dodanie miejsca o takich samych ulicach, numerze, miecie i kodzie.

37 Tworzenie wyzwalaczy typu INSTEAD OF (CREATE TRIGGER).


37.1 a) Do tabeli samochd dodaj kolumn "usuniety" typu BIT o wartoci domylnej rwnej 0.
b) W tabeli samochod zmie wszystkie wartoci kolumny usuniety z NULL na warto 0.
c) Utwrz wyzwalacz o nazwie " usuniety_samochod ", ktry uniemoliwi fizyczne usunicie samochodu z tabeli
samochod, a usuwany samochod oznaczy poprzez ustawienie kolumny usuniety na warto 1.

37.2 Utwrz wyzwalacz o nazwie "usun_miejsce_i_wypozyczenia", ktry uniemoliwi usunicie rwnoczenie wicej
ni 1 miejsca z tabeli miejsce oraz przed usuniciem pojedynczego miejsca usunie najpierw wszystkie rekordy w tabeli
wypoyczenie zawierajce informacj o usuwanym miejscu (id_miejsca_wyp, id_miejsca_odd).
Przetestuj napisany wyzwalacz.

37.3 Utwrz wyzwalacz o nazwie "samochod_blokada", ktry uniemoliwia wprowadzenie jakiejkolwiek zmiany w
tabeli samochd. Przetestuj utworzony wyzwalacz dla instrukcji INSERT, UPDATE, DELETE.

Zadania poziom 5 (Programowanie w T-SQL)

38 Wyzwalacze i kursory
38.1 Napisa wyzwalacz, ktry bdzie wypisywa na ekranie nazwiska i imiona usunitych pracownikw. Uyj kursora.
Przetestuj utworzony wyzwalacz usu wszystkich pracownikw.

38.2 Stwrz tabel o nazwie samochod_delete o identycznej strukturze jak tabela samochd.
Napisz wyzwalacz, ktry wszystkie usunite samochody z tabeli samochd wpisze do tabeli samochod_delete.
Przetestuj utworzony wyzwalacz usu z tabeli samochd samochody o identyfikatorach z przedziau od 1 do 4.

38.3 Napisa wyzwalacz, ktry po podwyce pensji pracownikowi bdzie zerowa jego dodatek.
Przetestuj utworzony wyzwalacz pracownikom o identyfikatorach rwnych 1, 2 i 3 zwiksz pensj o 200 z.

39 Widoki + CASE
39.1 Utwrz widok o nazwie ocena_klienta, ktry dla kadego klienta (id_klient, imie, nazwisko) wywietli informacj,
czy to jest stay klient (czyli wypisze sowo TAK lub NIE jako warto kolumny "staly_klient").
Przyjmijmy, e stay klient to taki, ktry wypoyczy co najmniej dwa razy samochd.
Uyj powyszego widoku i wypisz staych klientw sortujc wynik alfabetycznie po nazwisku i imieniu klienta.

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


12
39.2 Utwrz widok o nazwie pensja_pracownika, ktry dla kadego pracownika (id_pracownik, imie, nazwisko)
wywietli informacj w nowej kolumnie o nazwie "zarobki" o rzdzie jego zarobkw: MAO, REDNIO, DUO.
Przyjmijmy, e pracownik zarabia MAO jeli pensja jest poniej 1500 z, zarabia REDNIO jeli pensja jest od 1500 z
do 3000 z, a zarabia duo jeli pensja jest wiksza od 3000 z.
Uyj powyszego widoku do znalezienia pracownikw zarabiajcych MAO.

39.3 Utwrz widok o nazwie "pracownik_informacje", ktry wywietla o kadym pracowniku takie informacje jak:
a) id_pracownik, b) imie, c) nazwisko, d) kolumna wyliczeniowa "staz_pracy", czyli dugo zatrudnienia w latach,
e) kolumna wyliczeniowa "wypozyczenia", czyli cakowita ilo wypoycze samochodw, f) kolumna wyliczeniowa
"dodatek" z wartociami TAK/NIE/BRAK (TAK gdy dodatek>0, NIE gdy dodatek=0, BRAK w pozostaych przypadkach).
Przetestuj utworzony widok wyszukujc pracownikw, dla ktrych dodatek nie zosta przyznany.

40 Procedury + dynamiczny SQL


40.1 Napisa procedur o nazwie "usun_widoki", ktra z biecej bazy danych usunie wszystkie widoki.
Przetestuj dziaanie utworzonej procedury.
Wsk 1: SELECT * FROM INFORMATION_SCHEMA.TABLES;
Wsk 2: EXEC sp_executesql @zapytanie_sql

40.2 Napisa procedur o nazwie "usun_klucze_obce", ktra z biecej bazy danych usunie wszystkie klucze obce.
Przetestuj dziaanie utworzonej procedury.
Wsk 1: SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

40.3 Napisa procedur o nazwie "klient_dodaj_kolumne_rabat", ktra sprawdza czy w tabeli klient istnieje kolumna
o nazwie "rabat", jeli nie to dodaje j do tabeli klient. Kolumna "rabat" powinna by typu INT i przyjmowa
domylnie warto 0. Wszyscy istniejcy klienci w tabeli klient powinni mie ustawion warto rabatu na 0.
Przetestuj dziaanie procedury.

40.4 Napisa procedur o nazwie "baza_reset" posiadajc jeden parametr, ktry jest nazw bazy danych.
Procedura ma usun zadan baz danych (o ile taka istnieje) i utworzy j na nowo.
Przetestuj dziaanie procedury.

40.5 Napisa procedur o nazwie "tabele_statystyka", ktra dla biecej bazy danych wywietli w formie
tabelarycznej informacj o wszystkich tabelach znajdujcych si w biecej bazie danych oraz iloci rekordw w
kadej z tych tabel. Przyjmij, e kolumny uzyskanego zestawienia bd mie nazwy: nazwa_tabeli, ilosc_rekordow.
Przetestuj dziaanie utworzonej procedury.

41 Inne zadania, ciekawostki


41.1 Zmie domylny format daty na dzie/miesic/rok.

41.2 Jakim skrtem klawiszowym zakomentowa/odkomentowa fragment kodu T-SQL pisanym w SQL Server
Management Studio.

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


13
ROZWIZANIA ZADA
1.1 SELECT * FROM pracownik;

2.1 SELECT imie, nazwisko, pensja FROM pracownik ORDER BY pensja DESC;

3.1 SELECT DISTINCT dzial FROM pracownik;

4.1 SELECT imie, nazwisko FROM pracownik WHERE imie='Jan';

5.1 SELECT imie, nazwisko, dzial, stanowisko FROM pracownik WHERE dzial='obsuga klienta' AND
stanowisko='sprzedawca';

6.1 SELECT * FROM samochod WHERE marka IN ('Mercedes','Seat','Opel');

7.1 SELECT imie, nazwisko FROM klient WHERE nazwisko LIKE '%k%';

8.1 SELECT * FROM samochod WHERE poj_silnika BETWEEN 1100 AND 1600;

9.1 SELECT * FROM pracownik WHERE dodatek IS NULL;

10.1 SELECT imie, nazwisko, pensja, COALESCE(dodatek,0), pensja+COALESCE(dodatek,0) AS do_zaplaty


FROM pracownik;

11.1 SELECT TOP 1 imie, nazwisko FROM pracownik ORDER BY data_zatr ASC;

12.1 SELECT imie, nazwisko, data_zatr


FROM pracownik
WHERE MONTH(data_zatr)=5
ORDER BY nazwisko ASC, imie ASC;

13.1 SELECT imie, nazwisko, LEFT(imie,1)+'. '+LEFT(nazwisko,1)+'.' AS inicjaly


FROM klient ORDER BY inicjaly, nazwisko, imie;

14.1 UPDATE pracownik SET dodatek=50 WHERE dodatek IS NULL;

15.1 DELETE FROM klient WHERE id_klient=17;

16.1 INSERT INTO klient (id_klient,imie,nazwisko,ulica,numer,kod,miasto,telefon)


VALUES(121,'Adam','Cichy','Korzenna','12','00-950','Warszawa','123-454-321');

17.1 SELECT s.id_samochod, s.marka, s.typ, w.data_wyp, w.data_odd


FROM samochod s INNER JOIN wypozyczenie w ON s.id_samochod=w.id_samochod
WHERE w.data_odd IS NULL;

18.1 SELECT k.imie, k.nazwisko, w.data_wyp, s.marka, s.typ


FROM klient k INNER JOIN wypozyczenie w ON k.id_klient=w.id_klient
INNER JOIN samochod s ON w.id_samochod=s.id_samochod
ORDER BY k.nazwisko, k.imie, s.marka, s.typ;

19.1 SELECT MAX(pensja) FROM pracownik;

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


14
20.1 SELECT k.imie, k.nazwisko, COUNT(w.id_klient) AS ilosc_wypozyczen
FROM klient k LEFT JOIN wypozyczenie w ON k.id_klient=w.id_klient
GROUP BY k.imie, k.nazwisko, k.id_klient
ORDER BY COUNT(w.id_klient) DESC;

21.1 SELECT k.imie, k.nazwisko, COUNT(w.id_klient) AS ilosc_wypozyczen


FROM klient k INNER JOIN wypozyczenie w ON k.id_klient=w.id_klient
GROUP BY k.imie, k.nazwisko, k.id_klient
HAVING COUNT(w.id_klient)>=2
ORDER BY nazwisko ASC, imie ASC;

22.1 SELECT imie, nazwisko, pensja FROM pracownik WHERE pensja=(SELECT MAX(pensja) FROM pracownik);

23.1 SELECT marka, typ, data_prod FROM samochod WHERE id_samochod NOT IN (SELECT DISTINCT id_samochod
FROM wypozyczenie);

24.1 SELECT s.id_samochod, s.marka, s.typ


FROM samochod s JOIN wypozyczenie w ON s.id_samochod=w.id_samochod
GROUP BY s.id_samochod, s.marka, s.typ
HAVING COUNT(w.id_samochod) =
(
SELECT TOP 1 COUNT(w.id_samochod) AS ilosc
FROM wypozyczenie w
GROUP BY w.id_samochod
ORDER BY ilosc DESC
)
ORDER BY s.marka ASC, s.typ ASC;

Rozwizanie z uyciem z T-SQL konstrukcji TOP 1 WITH TIES:


SELECT TOP 1 WITH TIES s.id_samochod, s.marka, s.typ, COUNT(w.id_samochod) AS ilosc_wyp
FROM samochod s JOIN wypozyczenie w ON s.id_samochod=w.id_samochod
GROUP BY s.id_samochod, s.marka, s.typ
ORDER BY ilosc_wyp DESC, s.marka ASC, s.typ ASC;

25.1 UPDATE pracownik SET pensja=1.1*pensja WHERE pensja < (SELECT AVG(pensja) FROM pracownik);

26.1 DELETE FROM klient WHERE id_klient NOT IN (SELECT DISTINCT id_klient FROM wypozyczenie);

27.1 a) SELECT imie, nazwisko FROM klient


UNION
SELECT imie, nazwisko FROM pracownik
ORDER BY 2, 1;
b) SELECT imie, nazwisko FROM klient
UNION ALL
SELECT imie, nazwisko FROM pracownik
ORDER BY 2, 1;

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


15
28.1 --DROP TABLE pracownik2;
--GO
CREATE TABLE pracownik2(
id_pracownik INT IDENTITY(1,1) PRIMARY KEY,
imie VARCHAR(15) NOT NULL,
nazwisko VARCHAR(20) NOT NULL,
pesel CHAR(11) UNIQUE,
data_zatr DATETIME DEFAULT GETDATE(),
pensja MONEY CHECK(pensja>=1000)
);

29.1 ALTER TABLE student2 ALTER COLUMN nazwisko VARCHAR(20) NOT NULL;
ALTER TABLE student2 ADD CONSTRAINT unikatowy_nr_indeksu UNIQUE (nr_indeksu);
ALTER TABLE student2 ADD CONSTRAINT sprawdz_stypendium CHECK (stypendium>=1000);
ALTER TABLE student2 ADD imie VARCHAR(15) NOT NULL;

30.1 --wersja podstawowa


DROP TABLE przedmiot2;
DROP table kategoria2;
--wersja trudeniejsza
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_name='przedmiot2')
DROP TABLE przedmiot2;
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_name='kategoria2')
DROP TABLE kategoria2;

31.1 --DROP TABLE zwierze2;


--DROP TABLE wlasciciel2;
CREATE TABLE wlasciciel2(
id_wlasciciel INT IDENTITY(1,1)PRIMARY KEY,
imie VARCHAR(15) NOT NULL CHECK(LEN(imie)>2),
nazwisko VARCHAR(15) NOT NULL CHECK(LEN(nazwisko)>2),
data_ur DATE NOT NULL DEFAULT GETDATE(),
ulica VARCHAR(50),
numer VARCHAR(8),
kod CHAR(6) NOT NULL CHECK(LEN(kod)=6),
miejscowosc VARCHAR(30) NOT NULL CHECK(LEN(miejscowosc)>1)
);
CREATE TABLE zwierze2(
id_zwierze INT IDENTITY(1,1) PRIMARY KEY,
id_wlasciciel INT REFERENCES wlasciciel2(id_wlasciciel) ON DELETE SET NULL,
rasa VARCHAR(30) NOT NULL CHECK(LEN(rasa)>2),
data_ur DATE NOT NULL DEFAULT GETDATE(),
imie VARCHAR(15) NOT NULL CHECK(LEN(imie)>2)
);
--INSERT INTO wlasciciel2(imie,nazwisko,data_ur,ulica,numer,kod,miejscowosc)
--VALUES ('Jan','Kos','1999-01-11','Polna','1','11-222','Nysa');

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


16
--INSERT INTO zwierze2(id_wlasciciel,rasa,data_ur,imie)
--VALUES (1,'Jamnik','2010-03-03','Krtki');
--SELECT * FROM zwierze2;
--DELETE FROM wlasciciel2 WHERE id_wlasciciel=1;
--SELECT * FROM zwierze2;

32.1 --DROP PROCEDURE wypisz_samochody;


CREATE PROCEDURE wypisz_samochody @marka VARCHAR(20)
AS
SELECT * FROM samochod WHERE marka=@marka;
GO
EXECUTE wypisz_samochody 'opel';

33.1 --DROP FUNCTION dbo.aktywnosc_klienta;


--GO
CREATE FUNCTION dbo.aktywnosc_klienta (
@id_klient INT
) RETURNS INT
BEGIN
RETURN (SELECT COUNT(*) FROM wypozyczenie
WHERE id_klient=@id_klient)
END;
GO
SELECT dbo.aktywnosc_klienta(3) AS ile_wyp;

34.1 --DROP VIEW klient_raport;


--GO
CREATE VIEW klient_raport
AS
SELECT k.id_klient, k.imie, k.nazwisko, COUNT(w.id_klient) AS "ilosc_wyp"
FROM klient k LEFT JOIN wypozyczenie w ON k.id_klient=w.id_klient
GROUP BY k.id_klient, k.imie, k.nazwisko;
GO
SELECT * FROM klient_raport WHERE ilosc_wyp>1;

35.1 --DROP INDEX klient.index_klient_telefon;


--GO
CREATE UNIQUE INDEX index_klient_telefon ON klient(telefon);
GO

36.1 --DROP TRIGGER klient_anuluj_usuwanie;


--GO
CREATE TRIGGER klient_anuluj_usuwanie ON klient
FOR DELETE
AS
RAISERROR('Zabronione jest usuwanie klientw!',1,2)

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


17
ROLLBACK

GO
DELETE FROM klient;

37.1 ALTER TABLE samochod ADD usuniety BIT DEFAULT 0;


UPDATE samochod SET usuniety=0;
GO
CREATE TRIGGER usuniety_samochod ON samochod
INSTEAD OF DELETE AS
BEGIN
UPDATE samochod
SET usuniety=1
WHERE id_samochod IN (SELECT id_samochod FROM deleted)
END
GO
DELETE FROM samochod WHERE id_samochod=3;
SELECT * FROM samochod;

38.1 --DROP TRIGGER pracownik_usuwanie;


--GO
CREATE TRIGGER pracownik_usuwanie ON pracownik
FOR DELETE
AS
BEGIN
--deklaracja kursora
DECLARE kursor_deleted CURSOR
FOR SELECT imie, nazwisko FROM deleted;
--otwarcie kursora
OPEN kursor_deleted
--zmienne pomocnicze do przechowywania danych pobranych z kursora
DECLARE @imie varchar(15), @nazwisko varchar(20)
--pobranie pierwszego wiersza z kursora
FETCH NEXT FROM kursor_deleted INTO @imie, @nazwisko
--wykonuj dopki pobranie wiersza z kursora zakoczy si sukcesem
WHILE @@FETCH_STATUS = 0
BEGIN
--wyswietlenie wartosci zmiennych @imie i @nazwisko
print 'Usunito: '+@imie+' '+ @nazwisko
--pobranie kolejnego wiersza z kursora
FETCH NEXT FROM kursor_deleted INTO @imie, @nazwisko
END
--zamkniecie kursora
CLOSE kursor_deleted
--usuniecie kursora z bazy danych
DEALLOCATE kursor_deleted

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


18
END
GO
DELETE FROM pracownik

39.1 CREATE VIEW ocena_klienta AS


SELECT k.id_klient, k.imie, k.nazwisko, CASE WHEN COUNT(w.id_klient)>=2 THEN 'TAK' ELSE 'NIE' END AS staly_klient
FROM klient k LEFT JOIN wypozyczenie w ON k.id_klient=w.id_klient
GROUP BY k.id_klient, k.imie, k.nazwisko;
GO
SELECT * FROM ocena_klienta WHERE staly_klient='TAK' ORDER BY nazwisko, imie;

40.1 CREATE PROCEDURE usun_widoki AS


BEGIN
DECLARE @sql NVARCHAR(200);
WHILE EXISTS(SELECT TOP 1 1
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_CATALOG=DB_NAME() AND TABLE_TYPE='VIEW')
BEGIN
SELECT @sql='DROP VIEW ' + TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_CATALOG=DB_NAME() AND TABLE_TYPE='VIEW';
EXEC sp_executesql @sql
END
END
GO
EXEC usun_widoki;

41.1 SET DATEFORMAT dmy;

dr Robert Fidytek (Robert.Fidytek@inf.ug.edu.pl) Bezwzgldny zakaz kopiowania i publikowania.


19

You might also like