· 8 years ago · Apr 22, 2018, 05:28 AM
1--1
2create table test_pracownicy.dbo.dziennik(
3tabela varchar(15),
4data smalldatetime,
5l_wierszy int,
6komunikat varchar(300),
7)
8
9--2
10begin
11declare @premia int, @x int
12set @premia=250
13set @x=0
14update pracownicy
15set dod_funkcyjny=dod_funkcyjny+@premia, @x=@x+1 where nr_akt in (select distinct kierownik from pracownicy)
16if(@x!=0)
17begin
18insert into dziennik values ('pracownicy', GETDATE(), @x, 'Wprowdzono dodatek funkcyjny w wysokoœci '+CAST(@premia as varchar(4))+' z³.')
19end
20end
21
22--3
23begin
24declare @rok int, @x int
25set @rok=1989
26set @x=0
27while(@rok<DATEPART(YEAR, GETDATE()))
28begin
29set @x=(select COUNT(*) from pracownicy where DATEPART(Year, data_zatr)=@rok)
30if(@x!=0)
31begin
32insert into dziennik (data, komunikat) values (GETDATE(), 'W roku '+CAST(@rok as varchar(4))+' zatrudniono '+CAST(@x as varchar(2))+' pracowników.')
33end
34else
35begin
36insert into dziennik (data, komunikat) values (GETDATE(), 'W roku '+CAST(@rok as varchar(4))+' nikogo nie zatrudniono.')
37end
38set @rok=@rok+1
39end
40end
41
42--4
43begin
44declare @kom varchar(10)
45if ((select DATEDIFF(YEAR, data_zatr, GETDATE()) from pracownicy where nr_akt=8902)<15)
46begin
47set @kom='krócej ni¿'
48end
49else
50begin
51set @kom='d³u¿ej ni¿'
52end
53insert into dziennik (data, komunikat) values (GETDATE(), 'Pracownik z numerem 8902 jest zatrudniny '+@kom+' 15 lat.')
54end
55
56--5
57create procedure PIERWSZA @parametr varchar(15)
58as
59begin
60print 'Wartoœæ parametru wynosi³a: '+@parametr+'.'
61end
62
63begin
64declare @par varchar(15)
65set @par=(select kierownik from prac_archiw where nazwisko='MALIK')
66exec PIERWSZA @par
67end
68
69--6
70create procedure DRUGA @arg1 varchar(100)=NULL, @arg2 varchar(106) output, @arg3 int=1
71as
72begin
73declare @loc char(5)
74set @loc='DRUGA'
75set @arg2=@loc+@arg1+cast(@arg3 as varchar(5))
76end
77
78
79/*begin
80declare @arg2 varchar(106)
81exec DRUGA 'Test', @arg2 output, 5
82select @arg2
83end*/
84
85--7
86create procedure podwyzka @dzial int=0, @procent int=10
87as
88begin
89declare @x int=0
90if(@dzial=0)
91begin
92update pracownicy
93set placa=placa+placa*@procent/100, @x=@x+1
94end
95else
96begin
97update pracownicy
98set placa=placa+placa*@procent/100, @x=@x+1 where id_dzialu=@dzial
99end
100if(@x>0)
101begin
102insert into dziennik (tabela, data, l_wierszy, komunikat) values ('pracownicy', GETDATE(), @x, 'Wprowadzono podwy¿kê o '+cast(@procent as varchar(2))+' procent.')
103end
104end
105
106--exec podwyzka 20, 20
107
108--8
109create function udzial(@dzial int) returns table
110return (select distinct id_dzialu, ((select SUM(placa)+isnull(sum(dod_funkcyjny),0)+isnull(SUM(prowizja),0) from pracownicy a where id_dzialu=@dzial)/
111(select SUM(placa)+SUM(dod_funkcyjny)+SUM(prowizja) from pracownicy b))*100
112as 'udzial_w_budzecie' from pracownicy where id_dzialu=@dzial)
113
114select * from udzial(20)
115
116--9
117create trigger do_archiwum on pracownicy for delete
118as
119insert into prac_archiw select nr_akt, nazwisko, stanowisko, kierownik, data_zatr, GETDATE(), placa, dod_funkcyjny, prowizja, id_dzialu from deleted
120insert into dziennik (data, komunikat) values (GETDATE(), 'Zwolniono pracownika numer: '+cast((select nr_akt from deleted) as varchar(4))+'.')
121
122
123
124
125
126
127
128
129
130
131--1
132select *
133from zawodnicy
134
135select *
136from kraje
137
138select *
139from uczestnictwa_w_zawodach
140
141select *
142from zawody
143
144select *
145from skocznie
146
147select *
148from trenerzy
149
150--2
151select kraj
152from kraje
153where id_kraju NOT IN
154(select id_kraju
155from zawodnicy);
156GO
157
158--3
159select kraj, COUNT(id_skoczka) as liczba
160from kraje inner join zawodnicy on kraje.id_kraju = zawodnicy.id_kraju
161group by kraj;
162GO
163
164--4
165select nazwisko
166from zawodnicy
167where id_skoczka not in
168(select id_skoczka
169from uczestnictwa_w_zawodach)
170
171--5
172select nazwisko, COUNT(*) as ile
173from zawodnicy inner join uczestnictwa_w_zawodach on zawodnicy.id_skoczka = uczestnictwa_w_zawodach.id_skoczka
174group by nazwisko
175
176--6
177select distinct nazwisko, nazwa
178from zawodnicy inner join uczestnictwa_w_zawodach on zawodnicy.id_skoczka = uczestnictwa_w_zawodach.id_skoczka
179inner join zawody on uczestnictwa_w_zawodach.id_zawodow = zawody.id_zawodow
180inner join skocznie on zawody.id_skoczni = skocznie.id_skoczni
181
182
183--7
184select nazwisko, DATEDIFF(yy, data_ur, getdate()) as wiek
185from zawodnicy
186order by wiek desc;
187GO
188
189--8
190select nazwisko, min(DATEDIFF(yy, data_ur, DATA)) wiek
191from zawodnicy left join uczestnictwa_w_zawodach on zawodnicy.id_skoczka = uczestnictwa_w_zawodach.id_skoczka
192left join zawody on uczestnictwa_w_zawodach.id_zawodow = zawody.id_zawodow
193group by nazwisko
194
195--9
196select nazwa, sedz - k as odl
197from skocznie
198order by odl desc
199
200--10
201select top 1 nazwa, max(sedz - k) as odl
202from skocznie INNER JOIN zawody on skocznie.id_skoczni = zawody.id_skoczni
203group by nazwa
204order by odl desc
205
206--11
207select distinct kraj
208from kraje inner join skocznie on kraje.id_kraju = skocznie.id_kraju
209inner join zawody on skocznie.id_skoczni = zawody.id_skoczni;
210GO
211
212--12
213select nazwisko, kraj, COUNT(zawody.id_zawodow)
214from kraje inner join zawodnicy on kraje.id_kraju = zawodnicy.id_kraju inner join
215uczestnictwa_w_zawodach on zawodnicy.id_skoczka = uczestnictwa_w_zawodach.id_skoczka
216inner join zawody on uczestnictwa_w_zawodach.id_zawodow = zawody.id_zawodow
217inner join skocznie on zawody.id_skoczni = skocznie.id_skoczni
218where skocznie.id_kraju=zawodnicy.id_kraju
219group by nazwisko, kraj
220
221--13
222insert into trenerzy values((select id_kraju from kraje where kraj = 'USA'),
223'Corby', 'Fisher', '1975-07-20');
224GO
225
226--14
227alter table zawodnicy add trener int;
228
229--15
230UPDATE zawodnicy SET zawodnicy.trener= trenerzy.id_trenera
231FROM trenerzy JOIN zawodnicy ON trenerzy.id_kraju=zawodnicy.id_kraju
232
233--16
234ALTER TABLE zawodnicy ADD CONSTRAINT id_trenera FOREIGN KEY (trener) REFERENCES trenerzy (id_trenera)
235
236--17
237update trenerzy set data_ur_t = ( select max(data_ur) from zawodnicy where zawodnicy.trener = trenerzy.id_trenera ) + 5 where data_ur_t is null
238
239
240
241
242
243
244
245
246
247
248
249--1
250use biuro; select * from biura; select * from biura2; select * from klienci;
251select * from nieruchomosci; select * from nieruchomosci2;
252select * from personel; select * from rejestracje;
253select * from wizyty; select * from wlasciciele;
254select * from wynajecia
255
256--2
257select n.nieruchomoscnr, ( select COUNT(*) from wizyty where
258wizyty.nieruchomoscnr = n.nieruchomoscnr) as ile_wizyt,
259( select COUNT(*) from wynajecia where wynajecia.nieruchomoscNr = n.nieruchomoscnr)
260as ile_wynajec
261from nieruchomosci n
262
263--3
264select nieruchomoscnr, (cast ( cast ( (nieruchomosci.czynsz * 1.0) /
265(select top 1 czynsz * 1.0 from wynajecia where wynajecia.nieruchomoscNr = nieruchomosci.nieruchomoscnr
266order by od_kiedy asc)* 100 – 100 as int) as varchar) + '%') as podwyzka from nieruchomosci;
267
268--4
269select nieruchomoscnr, ( select sum(czynsz * (DATEDIFF(month, od_kiedy, do_kiedy)+1))
270from wynajecia where wynajecia.nieruchomoscNr = nieruchomosci.nieruchomoscnr)
271as 'oplaty' from nieruchomosci;
272
273--5
274select biuronr, ( select sum(wynajecia.czynsz * (DATEDIFF(month, od_kiedy, do_kiedy)+1)
275* 0.3) from wynajecia, nieruchomosci where wynajecia.nieruchomoscNr = nieruchomosci.nieruchomoscnr
276and nieruchomosci.biuroNr = biura.biuroNr) as 'oplaty' from biura where exists
277( select * from wynajecia, nieruchomosci where wynajecia.nieruchomoscNr = nieruchomosci.nieruchomoscnr
278and nieruchomosci.biuroNr = biura.biuroNr);
279
280--6a
281select nieruchomosci.miasto, COUNT(*) as wynajecia
282from nieruchomosci left join wynajecia on nieruchomosci.nieruchomoscnr = wynajecia.nieruchomoscNr
283group by nieruchomosci.miasto
284order by wynajecia desc
285
286--6b
287select nieruchomosci.miasto, SUM(datediff(day, od_kiedy, do_kiedy)) as przychod
288from nieruchomosci left join wynajecia on wynajecia.nieruchomoscNr = nieruchomosci.nieruchomoscnr
289group by nieruchomosci.miasto
290order by przychod desc
291
292--7
293select distinct wizyty.klientnr, wizyty.nieruchomoscnr
294from wizyty inner join wynajecia on wizyty.klientnr = wynajecia.klientnr and
295wizyty.nieruchomoscnr = wynajecia.nieruchomoscNr
296
297--8
298select klienci.klientnr, COUNT(*) as ile
299from klienci inner join wizyty on wizyty.klientnr = klienci.klientnr
300where wizyty.data_wizyty < (
301select MIN(od_kiedy) from wynajecia where wynajecia.klientnr = klienci.klientnr
302and wynajecia.nieruchomoscNr <> wizyty.nieruchomoscnr )
303group by klienci.klientnr;
304
305--8
306select distinct klienci.klientnr
307from klienci inner join wynajecia on klienci.klientnr = wynajecia.klientnr
308where klienci.max_czynsz < wynajecia.czynsz
309
310--9
311select biuroNr
312from biura
313except
314select biuronr
315from nieruchomosci
316
317--11
318--a
319select distinct (select count(plec) from personel where plec = 'M') as panowie,
320(select count(plec) from personel where plec = 'K') as panie
321from personel
322--b
323select distinct biura.biuroNr, (select count(plec) from personel where plec = 'M' and
324personel.biuroNr = biura.biuroNr) as panowie,
325(select count(plec) from personel where plec = 'K' and
326personel.biuroNr = biura.biuroNr) as panie
327from biura
328
329--c
330select distinct miasto,(select count(*) from personel, biura where plec = 'K'
331and personel.biuroNr = biura.biuroNr and biura.miasto = biu.miasto) as panie,
332(select count(*) from personel, biura where plec = 'M'
333and personel.biuroNr = biura.biuroNr and biura.miasto = biu.miasto) as panowie
334from biura biu
335
336--d
337select distinct stanowisko,(select count(*) from personel where plec = 'K'
338and personel.stanowisko = p.stanowisko) as panie,
339(select count(*) from personel where plec = 'M'
340and personel.stanowisko = p.stanowisko) as panowie
341from personel p
342
343
344
345
346
347
348
349
350
351
352DECLARE @imieP VARCHAR(20), @nazwiskoP varchar(20)
353SELECT @imieP=imie, @nazwiskoP=nazwisko from biblioteka..pracownicy
354PRINT @imieP+' '+@nazwiskoP
355
356SELECT imie+' '+nazwisko, id
357FROM pracownicy;
358GO
359
360declare @imieP varchar(20), @nazwiskoP varchar(20)
361set @imieP ='Teofil'
362set @nazwiskoP='Szczerbaty'
363SELECT @imieP=imie, @nazwiskoP=nazwisko FROM biblioteka..pracownicy WHERE id=1;
364PRINT @imieP+' '+@nazwiskoP;
365GO
366
367declare @imieP varchar(20), @nazwiskoP varchar(20)
368set @imieP ='Teofil'
369set @nazwiskoP='Szczerbaty'
370SELECT @imieP=imie, @nazwiskoP=nazwisko FROM biblioteka..pracownicy WHERE id=20;
371PRINT @imieP+' '+@nazwiskoP;
372GO
373
374CREATE TABLE biblioteka..liczby (licz1 int, czas datetime default getdate());
375GO
376DECLARE @x int
377set @x=2
378insert into biblioteka..liczby(licz1)values( @x );
379waitfor delay '00:00:10'
380insert into biblioteka..liczby(licz1) values( @x+2 );
381SELECT * FROM biblioteka..liczby;
382
383if EXISTS (select * from biblioteka..wypozyczenia) print('By³y wypozyczenia')
384else print ('Nie by³o wypozyczeñ')
385
386
387DECLARE @y int
388set @y=0
389WHILE ( @y<10)
390begin
391print @y
392if ( @y=5 ) break
393set @y=@y+1
394end
395
396
397select tytul as tytulK, cena as cenaK, [cena jest]=CASE
398WHEN cena<20.00 then 'Niska'
399when cena between 20.00 and 40.00 then 'Przystepna'
400when cena>40 then 'Wysoka'
401else 'Nieznana'
402end
403from biblioteka..ksiazki
404
405raiserror ( 21000,10,1 )
406print @@error
407raiserror (21000, 10, 1 ) with seterror
408print @@error
409raiserror ( 21000,11,1 )
410print @@error
411raiserror ( 'Ala ma kota',11,1 )
412print @@error
413
414
415declare @d1 datetime, @d2 datetime
416set @d1='20091020'
417set @d2='20091025'
418
419SELECT DATEADD(HOUR, 112, @d1)
420SELECT DATEADD(DAY, 112, @d1)
421
422SELECT DATEDIFF(minute, @d1, @d2)
423SELECT DATEDIFF(day, @d1, @d2)
424
425SELECT DATENAME(MONTH, @d1)
426SELECT DATEPART(MONTH, @d1)
427
428SELECT CAST (day(@d1) as varchar)
429+'-'+CAST(month(@d1) as varchar)+'-'+CAST(YEAR(@D1) AS varchar)
430
431select USER_ID()
432select USER_NAME()
433select HOST_NAME()
434select DB_NAME(1)
435select DB_ID('master')
436select DATALENGTH(2+3.4)
437select COL_LENGTH('biblioteka..pracownicy', 'imie')
438select OBJECT_ID('Pracownicy')
439select OBJECT_NAME(object_id('Pracownicy'))
440
441if exists(select 1 from master.dbo.sysdatabases where name = 'test_cwiczenia')
442drop database test_cwiczenia
443go
444create database test_cwiczenia
445go
446use test_cwiczenia
447go
448create table test_cwiczenia..liczby (liczba int )
449go
450declare @i int
451set @i=1
452while @i<100
453begin
454insert test_cwiczenia..liczby values ( @i )
455set @i=@i+1
456end
457go
458select * from test_cwiczenia..liczby;
459
460
461use test_cwiczenia
462go
463if exists(select 1 from sys.objects where type = 'P' and name = 'proc_liczby')
464drop procedure proc_liczby
465go
466create procedure proc_liczby @max int = 10
467as
468begin
469select liczba from test_cwiczenia..liczby
470where liczba <= @max
471end
472go
473exec test_cwiczenia..proc_liczby 3
474exec test_cwiczenia..proc_liczby
475go
476
477
478use test_cwiczenia
479go
480if exists(select 1 from sys.objects where type = 'P' and name = 'proc_statystyka')
481drop procedure proc_statystyka
482go
483create procedure proc_statystyka @max int output, @min int output, @aux int output
484as
485begin
486set @max = (select MAX(liczba) from test_cwiczenia..liczby )
487set @min = (select MIN(liczba) from test_cwiczenia..liczby )
488set @aux = 10
489end
490go
491declare @max int, @min int, @aux2 int
492exec test_cwiczenia..proc_statystyka @max output, @min output, @aux = @aux2 output
493select @max 'Max', @min 'Min', @aux2
494go
495
496--1
497use biblioteka
498if exists(select 1 from sys.objects where type = 'F' and name = 'fn_srednia')
499drop function fn_srednia
500go
501create function fn_srednia(@rodzaj varchar(30)) returns int
502begin
503return (select AVG(cena) from ksiazki where gatunek = @rodzaj)
504end
505
506select dbo.fn_srednia('dla dzieci')
507go
508
509Select * from ksiazki
510--2
511use biblioteka
512if exists(select 1 from sys.objects where type = 'F' and name = 'funkcja')
513drop function funkcja
514go
515create function funkcja(@max int) returns table
516return (select * from ksiazki where cena <=@max)
517
518select * from funkcja(30)