Wykonywanie podstawowych zapytań. Schemat bazy danych
|
|
- Jolanta Ostrowska
- 6 lat temu
- Przeglądów:
Transkrypt
1 Wykonywanie podstawowych zapytań Schemat bazy danych 1
2 Schemat bazy danych Składnia SELECT SELECT [predykat] { * tabela.* [tabela.]pole1 [AS alias1] [, [tabela.]pole2 [AS alias2] [,...]]} FROM krotka [,...] [IN zewnętrzna baza] [WHERE... ] [GROUP BY... ] [HAVING... ] [ORDER BY... ] [WITH OWNERACCESS OPTION] Predykaty w SELECT SELECT [ALL DISTINCT DISTINCTROW [TOP n [PERCENT]]] FROM tabela 2
3 Przykłady SELECT Wybranie wszystkich pól z tabeli zarobki SELECT * FROM zarobki Aliasy pól i tabel oraz klauzula WHERE SELECT o.nazwisko AS nazwa FROM Osoby AS o WHERE o.idosoby>3; Przykłady SELECT Zapytanie wybierające z wyrażeniem SELECT brutto, 0.8*brutto AS dochod FROM zarobki SELECT brutto, idosoby*brutto AS cos FROM zarobki 3
4 Zapytania wybierające Przykłady podstawowe Wyświetlenie trzech wybranych pól z tabeli SELECT Nazwisko, Imie, Wiek FROM Osoby; Wyświetlenie wszystkich pól z tabeli SELECT * FROM Osoby; Zapytania wybierające Wyrażenia i Aliasy pól Wyświetlenie iloczynu dwóch pól SELECT wiek*wzrost AS Iloczyn FROM Osoby; Wyświetlenie łączne Imienia i Nazwiska SELECT Nazwisko + ' ' + Imie AS Osoba FROM Osoby; 4
5 Zapytania wybierające Wyrażenia i Aliasy w sortowaniu Sortowanie wg wyrażenia SELECT wiek*wzrost AS Iloczyn FROM Osoby ORDER BY wiek*wzrost; Sortowanie wg aliasu SELECT wiek*wzrost AS Iloczyn FROM Osoby ORDER BY Iloczyn; Zapytania wybierające Operatory Algebraiczne + dodawanie - odejmowanie * mnożenie / dzielenie % modulo Logiczne AND iloczyn bitowy (AND) OR suma bitowa (OR) NOT przeczenie bitowe (NOT) + Konaktacja łańcucha 5
6 Zapytania wybierające Sortowanie Sortowanie według pojedynczego pola - rosnąco SELECT Nazwisko, Imie FROM Osoby ORDER BY Wiek; Sortowanie według pojedynczego pola - rosnąco SELECT Nazwisko, Imie FROM Osoby ORDER BY Wiek ASC; Zapytania wybierające Sortowanie Sortowanie według pojedynczego pola - malejąco SELECT Nazwisko, Imie FROM Osoby ORDER BY Wiek DESC; Sortowanie według dwóch pól SELECT Nazwisko, Imie FROM Osoby ORDER BY Wiek ASC, Wzrost DESC; 6
7 Zapytania wybierające Filtrowanie Filtrowanie wg wyrażenia algebraicznego SELECT Nazwisko, Imie FROM Osoby WHERE Wiek >30; Filtrowanie wg wyrażenia logicznego SELECT Nazwisko, Imie FROM Osoby WHERE Wiek >30 AND Wiek <50; Zapytania wybierające Operatory algebraiczne = równe < mniejsze niż <= mniejsze niż lub równe > większe niż >= większe niż lub równe <> różne!= nie równe 7
8 Zapytania wybierające Operatory logiczne NOT negacja OR suma logiczna AND iloczyn logiczny AND TRUE FALSE NULL OR TRUE FALSE NULL TRUE TRUE FALSE NULL TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE NULL NULL NULL FALSE NULL NULL TRUE NULL NULL Zapytania wybierające Operatory specjalne BETWEEN IN LIKE ANY SOME ALL EXISTS przedział dwustronnie domknięty lista podobny do wzorca prawda jeśli jedna pozycja na liście prawdziwa prawda jeśli kilka pozycji na liście prawdziwych prawda jeśli wszystkie pozycje na liście prawdziwe prawda jeśli zapytanie zwraca rekordy 8
9 Zapytania wybierające Filtrowanie - BETWEEN SELECT Nazwisko, Imie FROM Osoby WHERE Wiek BETWEEN 30 AND 50; Równoważne zapytanie SELECT Nazwisko, Imie FROM Osoby WHERE Wiek >=30 AND Wiek <=50; Zapytania wybierające Filtrowanie IN SELECT Nazwisko, Imie FROM Osoby WHERE Wiek IN (20, 30, 40); Równoważne zapytanie SELECT Nazwisko, Imie FROM Osoby WHERE Wiek = 20 OR Wiek = 30 OR Wiek = 40; 9
10 Zapytania wybierające Filtrowanie IN SELECT Nazwisko, Imie FROM Osoby WHERE Nazwisko IN ('Kowalski', 'Nowak'); Równoważne zapytanie SELECT Nazwisko, Imie FROM Osoby WHERE Nazwisko = 'Kowalski' OR Nazwisko= 'Nowak' Zapytania wybierające Filtrowanie LIKE SELECT Nazwisko, Imie FROM Osoby WHERE Nazwisko LIKE 'KOW'; Równoważne zapytanie SELECT Nazwisko, Imie FROM Osoby WHERE Nazwisko = 'KOW'; 10
11 Zapytania wybierające Operator LIKE - znaki specjalne % dowolny ciąg znaków (w tym ciąg pusty) _ dokładnie jeden znak Zapytania wybierające Operator LIKE - znaki specjalne przykłady Nazwiska rozpoczynające się od frazy KOW Nazwiska kończące się frazą KOW SELECT Nazwisko, Imie FROM Osoby WHERE Nazwisko LIKE 'KOW%'; SELECT Nazwisko, Imie FROM Osoby WHERE Nazwisko LIKE '%KOW'; Nazwiska posiadające w środku frazę KOW SELECT Nazwisko, Imie FROM Osoby WHERE Nazwisko LIKE '%KOW%'; 11
12 Zapytania wybierające Operator LIKE - znaki specjalne przykłady cd Nazwiska rozpoczynające się od litery K a kończące literą I SELECT Nazwisko, Imie FROM Osoby WHERE Nazwisko LIKE 'K%I'; Nazwiska w których na trzeciej pozycji występuje litera W SELECT Nazwisko, Imie FROM Osoby WHERE Nazwisko LIKE ' W%'; Nazwiska w których występuje znak % SELECT Nazwisko, Imie FROM Osoby WHERE Nazwisko LIKE '[%]%'; Zapytania wybierające Grupowanie Wyznaczenie funkcji agregującej dla grupy (dla każdej osoby) SELECT IdOsoby, SUM(Brutto) AS Razem FROM Zarobki GROUP BY IdOsoby; Wyznaczenie funkcji agregującej dla całej tabeli (wszystkie osoby) SELECT SUM(Brutto) AS Razem FROM Zarobki; 12
13 Zapytania wybierające Funkcje agregujące AVG wartość średnia SUM suma MAX maksimum MIN minimum STDEV odchylenie standardowe VAR wariacja STDEVP odchylenie populacji VARP wariacja populacji COUNT zlicz n n ( x) 2 x n( n 1) ( x) 2 x n( n 1) 2 2 Zapytania wybierające Złączenia w oparciu o klauzulę WHERE SELECT Nazwisko, Brutto FROM Osoby, Zarobki SELECT Nazwisko, Brutto FROM Osoby, Zarobki WHERE Osoby.IdOsoby=Zarobki.IdOsoby SELECT Nazwa, Nazwisko, Brutto FROM Osoby, Zarobki, Dzialy WHERE Osoby.IdOsoby = Zarobki.IdOsoby AND Dzialy.IdDzialu = Osoby.IdDzialu 13
14 Zapytania wybierające Złączenia w oparciu o operator JOIN SELECT Nazwisko, Brutto FROM Zarobki JOIN Osoby ON Osoby.IdOsoby=Zarobki.IdOsoby SELECT Nazwa, Nazwisko, Brutto FROM Zarobki JOIN Osoby ON Osoby.IdOsoby = Zarobki.IdOsoby JOIN Dzialy ON Dzialy.IdDzialu = Osoby.IdDzialu INNER Zapytania wybierające Złączenia w oparciu o operator JOIN cd SELECT Nazwisko, Brutto FROM Zarobki RIGHT JOIN Osoby ON Osoby.IdOsoby=Zarobki.IdOsoby SELECT Nazwisko, Brutto FROM Zarobki LEFT JOIN Osoby ON Osoby.IdOsoby=Zarobki.IdOsoby SELECT Nazwisko, Brutto FROM Zarobki FULL JOIN Osoby ON Osoby.IdOsoby=Zarobki.IdOsoby 14
15 Zapytania wybierające Złączenia i aliasing SELECT Nazwisko, Brutto FROM Zarobki JOIN Osoby ON Osoby.IdOsoby=Zarobki.IdOsoby SELECT Nazwisko, Brutto FROM Zarobki AS Z JOIN Osoby AS O ON O.IdOsoby=Z.IdOsoby SELECT Nazwisko, Brutto FROM Zarobki Z JOIN Osoby O ON O.IdOsoby=Z.IdOsoby Zapytania wybierające Złączenia SELECT Nazwisko, Brutto FROM Zarobki CROSS JOIN Osoby 15
16 Zapytania wybierające Złączenia optymalizacja i plan wykonania Zapytania wybierające Złączenia optymalizacja i plan wykonania 16
17 Zapytania wybierające Złączenia optymalizacja i plan wykonania Zapytania wybierające Podzapytania Podzapytanie jako lista dla operatora IN SELECT Nazwisko, Imie FROM Osoby WHERE Nazwisko IN (SELECT Nazwisko FROM ttt); 17
18 Zapytania wybierające Podzapytania Podzapytanie jako lista dla operatora IN SELECT Nazwisko, Imie FROM Osoby WHERE Nazwisko IN (SELECT Nazwisko FROM ttt) AND Imie IN (SELECT Imie FROM ttt); OSOBY ttt Kowalski Jan Kowalski Nowak Karol Jan Zapytania wybierające Dziwne Złączenia w oparciu o operator JOIN SELECT Osoby.Nazwisko FROM Osoby JOIN ttt ON Osoby.Nazwisko=ttt.Nazwisko OSOBY Idosoby Nazwisko Imie... ttt Nazwisko Imie... 18
19 Zapytania wybierające Dziwne Złączenia w oparciu o operator JOIN SELECT Osoby.Nazwisko FROM Osoby JOIN ttt ON Osoby.Nazwisko=ttt.Nazwisko AND Osoby.Imie=ttt.Imie... OSOBY Idosoby Nazwisko Imie... ttt Nazwisko Imie... Zapytania wybierające Grupowanie i wyznaczanie średniej dla grupy SELECT Nazwa, AVG(brutto) FROM Dzialy JOIN Osoby ON Dzialy.IdDzialu=Osoby.IdDzialu JOIN Zarobki ON Osoby.IdOsoby=Zarobki.IdOsoby GROUP BY Nazwa 19
20 Zapytania wybierające Funkcje agregujące Funkcja agregująca Opis AVG COUNT COUNT (*) MAX MIN SUM STDEV STDEVP VAR VARP Średnia wartości wyrażenia Ilość wartości not NULL Ilość wierszy Maksymalna wartość wyrażenia Minimalna wartość wyrażenia Suma wyrażenia Odchylenie standardowe Odchylenie standardowe populacji Wariancja Wariancja wartości dla populacji n n ( x) 2 x n( n 1) ( x) 2 x n( n 1) 2 2 Zapytania wybierające Grupowanie i wyznaczanie średniej dla grupy (podwójne grupowanie) SELECT opis, Nazwisko, AVG(brutto) FROM Dzialy JOIN Osoby ON Dzialy.IdDzialu=Osoby.IdDzialu JOIN Zarobki ON Osoby.IdOsoby=Zarobki.IdOsoby GROUP BY opis,nazwisko, Osoby.IdOsoby 20
21 Zapytania wybierające Grupowanie z klauzulą WHERE SELECT opis, Nazwisko, AVG(brutto) FROM Dzialy JOIN Osoby ON Dzialy.IdDzialu=Osoby.IdDzialu JOIN Zarobki ON Osoby.IdOsoby=Zarobki.IdOsoby WHERE Brutto >100 GROUP BY opis,nazwisko, Osoby.IdOsoby Zapytania wybierające Grupowanie z klauzulą HAVING SELECT opis, Nazwisko, AVG(brutto) FROM Dzialy JOIN Osoby ON Dzialy.IdDzialu=Osoby.IdDzialu JOIN Zarobki ON Osoby.IdOsoby=Zarobki.IdOsoby GROUP BY opis,nazwisko, Osoby.IdOsoby HAVING AVG(brutto)>300 Tutaj nie może występować alias nazwy pola 21
22 Zapytania wybierające Grupowanie z klauzulami WHERE i HAVING SELECT opis, Nazwisko, AVG(brutto) FROM Dzialy JOIN Osoby ON Dzialy.IdDzialu=Osoby.IdDzialu JOIN Zarobki ON Osoby.IdOsoby=Zarobki.IdOsoby WHERE Brutto >100 GROUP BY opis,nazwisko, Osoby.IdOsoby HAVING AVG(brutto)>300 ORDER BY AVG(Brutto) Tutaj może występować alias nazwy pola Zapytania wybierające Grupowanie w podzapytaniu SELECT Nazwisko FROM Osoby WHERE IdOsoby IN (SELECT IdOsoby FROM Zarobki GROUP BY IdOsoby HAVING SUM(brutto)>300) SELECT Nazwisko, Imie FROM Osoby WHERE Nazwisko IN (SELECT Nazwisko FROM Osoby GROUP BY Nazwisko HAVING COUNT(Nazwisko) >1) 22
23 Zapytania wybierające Grupowanie z klauzulami ROLLUP i CUBE SELECT opis, Nazwisko, SUM(brutto) FROM Dzialy JOIN Osoby ON Dzialy.IdDzialu=Osoby.IdDzialu JOIN Zarobki ON Osoby.IdOsoby=Zarobki.IdOsoby GROUP BY opis,nazwisko, Osoby.IdOsoby WITH ROLLUP --WITH CUBE ORDER BY AVG(Brutto) Grupowanie z klauzulami ROLLUP i CUBE Administracja Janik 555,00 Administracja Nowak 1332,00 Administracja NULL 1887,00 Dyrekcja Kowalski 2109,00 Dyrekcja NULL 2109,00 Techniczny Adamczyk 777,00 Techniczny Kow 222,00 Techniczny NULL 999,00 NULL NULL 4995,00 Administracja Janik 555,00 Administracja Nowak 1332,00 Administracja NULL 1887,00 Dyrekcja Kowalski 2109,00 Dyrekcja NULL 2109,00 Techniczny Adamczyk 777,00 Techniczny Kow 222,00 Techniczny NULL 999,00 NULL NULL 4995,00 NULL Adamczyk 777,00 NULL Janik 555,00 NULL Kow 222,00 NULL Kowalski 2109,00 NULL Nowak 1332,00 23
24 WITH CUBE; ROLLUP SELECT Nazwa, Nazwisko, SUM(Brutto) FROM Dzialy JOIN Osoby ON Dzialy.Iddzialu=Osoby.Iddzialu JOIN Zarobki On Osoby.Idosoby=Zarobki.Idosoby GROUP BY Nazwa, Nazwisko WITH ROLLUP SELECT Nazwa, Nazwisko, SUM(Brutto) FROM Dzialy JOIN Osoby ON Dzialy.Iddzialu=Osoby.Iddzialu JOIN Zarobki On Osoby.Idosoby=Zarobki.Idosoby GROUP BY Nazwa, Nazwisko WITH CUBE DateTime and Security Functions (Transact-SQL) SELECT YEAR(GETDATE()); SELECT DATEPART(hh, GETDATE()); SELECT CURRENT_USER, SESSION_USER, SYSTEM_USER,SCHEMA_NAME(), SUSER_ID(),SUSER_NAME(SUSER_ID()), USER_NAME(SUSER_ID()); 24
25 Funkcje OVER PARTITION SELECT Idosoby, Brutto, ROW_NUMBER() OVER (ORDER BY Idosoby)AS RowNumber FROM Zarobki SELECT Idosoby, Brutto, ROW_NUMBER() OVER ( PARTITION BY idosoby ORDER BY Brutto DESC)AS RowNumber FROM Zarobki Funkcje OVER PARTITION SELECT Idosoby, Brutto, Dense_Rank() OVER (PARTITION BY Idosoby ORDER BY Brutto)AS D_Rank FROM Zarobki SELECT Idosoby, Brutto, Rank() OVER (PARTITION BY idosoby ORDER BY brutto)as Rank FROM Zarobki SELECT Idosoby, Brutto, Ntile(2) OVER (PARTITION BY idosoby ORDER BY Brutto)AS N_Rank FROM ZAROBKI 25
26 Ranking Functions (Transact-SQL) Ustala ranking według wzrostu w obrębie działu. Dla równych wartości taki sam ranking ale następny zwiększany o N SELECT IdDzialu,Wzrost, RANK() OVER (PARTITION BY IdDzialu ORDER BY Wzrost DESC) AS RANK FROM Osoby IdDzialu Wzrost RANK ORDER BY Iddzialu NULL Ranking Functions (Transact-SQL) Ustala ranking według wzrostu w obrębie działu. Dla równych wartości taki sam ranking ale następny zwiększany o 1 SELECT IdDzialu,Wzrost, DENSE_RANK() OVER (PARTITION BY IdDzialu ORDER BY Wzrost DESC) AS RANK FROM Osoby ORDER BY Iddzialu IdDzialu Wzrost RANK NULL
27 Ranking Functions (Transact-SQL) Ustala numer wiersza według wzrostu w obrębie działu. Dla równych wartości numer wiersza losowo SELECT IdDzialu,Wzrost, ROW_NUMBER() OVER (PARTITION BY IdDzialu order by Wzrost DESC) AS NUMER_WIERSZA FROM Osoby ORDER BY Iddzialu IdDzialu Wzrost NUMER_WIERSZA NULL Ranking Functions (Transact-SQL) Ustala numer wiersza według wzrostu w obrębie klastra (liczba klastrów dana parametrem) działu. Dla równych wartości numer wiersza losowo SELECT IdDzialu,Wzrost, NTILE(2) OVER (PARTITION BY IdDzialu ORDER BY Wzrost DESC) AS NUMER_WIERSZA FROM Osoby ORDER BY Iddzialu IdDzialu Wzrost NUMER_WIERSZA NULL
28 Funkcje agregujące nad partycją (Transact-SQL) SELECT IdDzialu, Osoby.IdOsoby, Brutto, SUM(Brutto) OVER (PARTITION BY IdDzialu) AS suma, Brutto / SUM(Brutto) OVER(PARTITION BY IdDzialu) AS udzial FROM Osoby JOIN Zarobki ON Osoby.IdOsoby=Zarobki.IdOsoby Funkcje agregujące nad partycją (Transact-SQL) SELECT IdDzialu, Osoby.IdOsoby, Brutto, SUM(Brutto) OVER (PARTITION BY Osoby.IdOsoby) AS suma, Brutto / SUM(Brutto) OVER(PARTITION BY IdDzialu) AS udzial, SUM(Brutto) OVER (PARTITION BY Osoby.IdOsoby)/ SUM(Brutto) OVER(PARTITION BY IdDzialu) AS udzial_w_dziale FROM Osoby JOIN Zarobki ON Osoby.IdOsoby=Zarobki.IdOsoby 28
29 Informacje o... SELECT HOST_ID (),HOST_NAME (), APP_NAME() SELECT EXEC sp_who Zapytania wybierające Zastosowanie SOME, ANY i ALL SELECT Brutto FROM Zarobki WHERE Brutto > ANY (SELECT AVG(Brutto)FROM Zarobki GROUP BY IdOsoby) ROWNOWAŻNE SELECT Brutto FROM Zarobki WHERE Brutto > SOME (SELECT AVG(Brutto)FROM Zarobki GROUP BY IdOsoby) SELECT AVG(Brutto) FROM Zarobki GROUP BY IdOsoby SELECT Brutto FROM Zarobki WHERE Brutto > ALL (SELECT AVG(Brutto)FROM Zarobki GROUP BY IdOsoby) 29
30 Zapytania wybierające Klauzula COMPUTE SELECT Nazwa, Nazwisko, Brutto FROM Dzialy LEFT JOIN Osoby ON Dzialy.IdDzialu=Osoby.IdDzialu LEFT JOIN Zarobki ON Osoby.IdOsoby=Zarobki.IdOsoby ORDER BY Nazwa COMPUTE SUM(Brutto) BY Nazwa Zapytania wybierające Zamiast klauzuli COMPUTE SELECT Nazwa, Nazwisko, SUM(Brutto)As RazemO, RazemD FROM Dzialy JOIN Osoby ON Dzialy.IdDzialu=Osoby.IdDzialu JOIN Zarobki ON Osoby.IdOsoby=Zarobki.IdOsoby JOIN (SELECT Osoby.IdDzialu, SUM(brutto) AS RazemD FROM Dzialy JOIN Osoby ON Dzialy.IdDzialu=Osoby.IdDzialu JOIN Zarobki ON Osoby.IdOsoby=Zarobki.IdOsoby GROUP BY Osoby.IdDzialu) as xxx ON Osoby.IdDzialu=xxx.IdDzialu GROUP BY Nazwa, Nazwisko, zarobki.idosoby, RazemD 30
31 Zapytania wybierające Klauzula COMPUTE cd SELECT Nazwa, Nazwisko, Brutto FROM Dzialy LEFT JOIN Osoby ON Dzialy.IdDzialu=Osoby.IdDzialu LEFT JOIN Zarobki ON Osoby.IdOsoby=Zarobki.IdOsoby ORDER BY Nazwa, Nazwisko COMPUTE SUM(Brutto) BY Nazwa, Nazwisko COMPUTE SUM(Brutto) BY Nazwa Na każdym poziomie grupowania można wyznaczać wiele różnych funkcji agregujących Zapytania wybierające Klauzula COMPUTE cd SELECT Nazwa, Nazwisko, Brutto FROM Dzialy LEFT JOIN Osoby ON Dzialy.IdDzialu=Osoby.IdDzialu LEFT JOIN Zarobki ON Osoby.IdOsoby=Zarobki.IdOsoby Na każdym poziomie grupowania można wyznaczać wiele różnych funkcji agregujących ORDER BY Nazwa, Nazwisko COMPUTE SUM(Brutto) BY Nazwa, Nazwisko COMPUTE SUM(Brutto), AVG(Brutto) BY Nazwa 31
32 Zapytania wybierające Klauzula Pivot SELECT kto, [1] AS D1, [2] AS D2, [3] AS D3, [4] AS D4, [5] AS D5 FROM (SELECT IdDzialu, Nazwisko+ ' '+ Imie as Kto, Brutto FROM Osoby JOIN Zarobki ON Osoby.IdOsoby=Zarobki.IdOsoby) ppp PIVOT ( SUM (Brutto) Kto D1 D2 D3 D4 D5 FOR IdDzialu IN 1 Adamczyk Janusz NULL NULL 777,00 NULL NULL 2 Janik Paweł NULL 555,00 NULL NULL NULL ( [1], [2], [3], [4], [5] ) 3 Kow Piotr NULL NULL 666,00 NULL NULL ) AS pvt 4 Kowalczyk Jarosław NULL NULL 777,00 NULL NULL 5 Kowalski Jan 2109,00 NULL NULL NULL NULL ORDER BY kto 6 Nowak Karol NULL 1332,00 NULL NULL NULL 7 Nowicki Jan NULL NULL NULL 2109,00 NULL 8 Zięba Andrzej 333,00 NULL NULL NULL NULL Zapytania wybierające Predykat TOP SELECT TOP 5 Nazwisko, Imie FROM Osoby ORDER BY Wzrost SELECT TOP 5 Nazwisko, Imie FROM Osoby ORDER BY Wzrost DESC SELECT TOP 5 PERCENT Nazwisko, Imie FROM Osoby ORDER BY Wzrost 32
33 Zapytania wybierające Predykat DISTINCT SELECT DISTINCT Nazwisko FROM Osoby SELECT DISTINCT Nazwisko, Imie FROM Osoby Zapytania wybierające Operator CASE SELECT Nazwisko, RokUrodz, Wiek= CASE WHEN RokUrodz >=1970 THEN 'Młody' WHEN RokUrodz >=1960 AND RokUrodz <1970 THEN 'Taki sobie' WHEN RokUrodz <1960 THEN 'Stary' ELSE 'A bo ja wiem' END FROM Osoby 33
34 Zapytania wybierające Operator CASE można pominąć część warunku jeśli odpowiednia kolejność SELECT Nazwisko, RokUrodz, Wiek= CASE WHEN RokUrodz >1970 THEN 'Młody' WHEN RokUrodz >=1960 THEN 'Taki sobie' WHEN RokUrodz <1960 THEN 'Stary' ELSE 'A bo ja wiem' END FROM Osoby Zapytania wybierające Operator CASE inny sposób aliasowania SELECT Nazwisko, RokUrodz, CASE WHEN RokUrodz >1970 THEN 'Młody' WHEN RokUrodz >=1960 THEN 'Taki sobie' WHEN RokUrodz <1960 THEN 'Stary' ELSE 'A bo ja wiem' END AS Wiek FROM Osoby 34
35 Zapytania wybierające UNIA Suma dwóch zapytań z eliminacją powtarzających się rekordów SELECT Nazwisko, Imie FROM Osoby UNION SELECT Nazwisko, Imie FROM ttt; Suma dwóch zapytań SELECT Nazwisko, Imie FROM Osoby UNION ALL SELECT Nazwisko, Imie FROM ttt; Zapytania wybierające UNIA Część wspólna dwóch zapytań SELECT Nazwisko, Imie FROM Osoby INTERSECT SELECT Nazwisko, Imie FROM ttt; Różnica dwóch zapytań SELECT Nazwisko, Imie FROM Osoby EXCEPT SELECT Nazwisko, Imie FROM ttt; 35
36 Wyprowadzenie danych do formatu XML SELECT Nazwisko, Imie FROM Osoby FOR XML AUTO SKUTEK XML_F52E2B61-18A1-11d1-B F49916B <osoby nazwisko="kowalski" imie="jan"/> <osoby nazwisko="nowak" imie="karol"/> <osoby nazwisko="kow" imie="piotr"/> <osoby nazwisko="janik" imie="paweł"/> <osoby nazwisko="kowalik" imie="paweł"/> <osoby nazwisko="lis" imie="janusz"/> <osoby nazwisko="kowalski"... Wyprowadzenie danych do formatu XML SELECT Nazwa, Nazwisko, Imie FROM Dzialy JOIN Osoby ON Osoby.IdDzialu=Dzialy. IdDzialu FOR XML AUTO SKUTEK XML_F52E2B61-18A1-11d1-B F49916B <dzialy nazwa="dyrekcja"> <osoby nazwisko="kowalski" imie="jan"/> </dzialy><dzialy nazwa="administracja"> <osoby nazwisko="nowak" imie="karol"/> </dzialy><dzialy nazwa="techniczny"> <osoby nazwisko="kow" imie="piotr"/> </dzialy><dzialy nazwa="administracja"> <oso... 36
37 Wyprowadzenie danych do formatu XML SELECT Nazwa, Nazwisko, Imie FROM Dzialy LEFT JOIN Osoby ON Osoby.IdDzialu=Dzialy. IdDzialu FOR XML AUTO SKUTEK Nie ma pracowników Dyrekcji XML_F52E2B61-18A1-11d1-B F49916B <dzialy nazwa="dyrekcja"> <osoby/> </dzialy><dzialy nazwa="administracja"><osoby nazwisko="nowak" imie="karol"/><osoby nazwisko="janik" imie="paweł"/><osoby nazwisko="lis" imie="janusz"/></dzialy><dzialy nazwa="techniczny"><osoby nazwisko="kow" imie="piotr"/ Wyprowadzenie danych do formatu XML SELECT Nazwisko, Imie FROM Osoby FOR XML AUTO, ELEMENTS SKUTEK XML_F52E2B61-18A1-11d1-B F49916B <osoby> <nazwisko>kowalski</nazwisko> <imie>jan</imie> </osoby> <osoby> <nazwisko>nowak</nazwisko> <imie>karol</imie> </osoby> <osoby> <nazwisko>kow</nazwisko> <imie>piotr</imie> </osoby> <osoby> <nazwisko>janik</nazwisko> <imie>paweł</imie> </osoby> <osoby> <nazwisko>kowa... 37
38 Wyprowadzenie danych do formatu XML SELECT Nazwa, Nazwisko, Imie FROM Dzialy JOIN Osoby ON Osoby.IdDzialu=Dzialy. IdDzialu FOR XML AUTO, ELEMENTS SKUTEK XML_F52E2B61-18A1-11d1-B F49916B <dzialy> <nazwa>dyrekcja</nazwa> <osoby> <nazwisko>kowalski</nazwisko> <imie>jan</imie> </osoby> </dzialy> <dzialy> <nazwa>administracja</nazwa> <osoby> <nazwisko>nowak</nazwisko> <imie>karol</imie> </osoby> </dzialy> <dzialy> <nazwa>techniczny</nazwa> <osoby> <nazwisko>ko... Wyprowadzenie danych do formatu XML SELECT Nazwa, Nazwisko, Imie FROM Dzialy LEFT JOIN Osoby ON Osoby.IdDzialu=Dzialy. IdDzialu FOR XML AUTO, ELEMENTS SKUTEK Nie ma pracowników Dyrekcji XML_F52E2B61-18A1-11d1-B F49916B <dzialy><nazwa>dyrekcja</nazwa><osoby/></dzialy><dzialy><nazwa >Administracja</nazwa><osoby><nazwisko>Nowak</nazwisko><imie >Karol</imie></osoby><osoby><nazwisko>Janik</nazwisko><imie>P aweł</imie></osoby><osoby><nazwisko>lis</nazwisko><imie>janus z</imie></os 38
39 Zapytania modyfikujące Tworzenie tabeli i wstawianie danych z istniejącej tabeli Kopiowanie tabeli SELECT Nazwisko, wiek INTO Nowa1 FROM Osoby Zapytania modyfikujące Wstawianie danych INSERT INTO Nowa VALUES ('KOWAL', 'JAN', 33); INSERT INTO Nowa(Nazwisko, Imie) VALUES ('NOWAK','KAROL'); 39
40 Zapytania modyfikujące Wstawianie danych z istniejącej tabeli INSERT INTO Nowa SELECT Nazwisko, Imie, Wiek FROM Osoby WHERE Wiek >30 ORDER BY Nazwisko; INSERT INTO Nowa(Imie, Nazwisko) SELECT Imie, Nazwisko FROM Osoby WHERE Wiek <30 ORDER BY Nazwisko DESC; Zapytania modyfikujące Wstawianie do pola z ustawionym Identity SET IDENTITY_INSERT Dzialy ON; INSERT INTO dzialy (IdDzialu, Nazwa) VALUES (-13, 'Jakiś') SELECT * FROM Dzialy; SET IDENTITY_INSERT Dzialy OFF; Lista pól jest obowiązkowa 40
41 Zapytania modyfikujące Nawiasy są obowiązkowe INSERT TOP (5) INTO Nowa SELECT Nazwisko, Imie, RokUrodz FROM Osoby ORDER BY RokUrodz DESC SELECT * FROM Nowa DELETE FROM Nowa Nawiasy nie są obowiązkowe INSERT INTO Nowa SELECT TOP 5 Nazwisko, Imie, RokUrodz FROM Osoby Order by RokUrodz DESC SELECT * FROM Nowa DELETE FROM Nowa Nie działa sortowanie dla TOP() Działa sortowanie dla TOP() Zapytania modyfikujące UPDATE Nowa SET Wiek = 0 WHERE Wiek IS NULL; Modyfikacja danych UPDATE Nowa SET Nazwisko = UPPER(Nazwisko), Imie = UPPER(Imie); 41
42 Zapytania modyfikujące Usuwanie danych DELETE FROM Nowa WHERE Wiek IS NULL; DELETE FROM Nowa; TRUNCATE TABLE Nowa; Zapytania modyfikujące - OUTPUT TABLE( Komu int NOT NULL, stara int, nowa int, kiedy datetime); Zmienna tabelaryczna UPDATE Zarobki SET Brutto=1.1 * Brutto OUTPUT INSERTED.IdOsoby, DELETED.Brutto, INSERTED.Brutto, getdate() WHERE IdOsoby<3 SELECT * 42
43 Zapytania modyfikujące - OUTPUT TABLE( Komu int NOT NULL, nowa int, kiedy datetime); INSERT INTO Zarobki OUTPUT INSERTED.IdOsoby, INSERTED.Brutto, getdate() VALUES(2, 111) SELECT * DELETE FROM Zarobki OUTPUT DELETED.* WHERE brutto IS NULL Działa jak SELECT Zapytania tworzące tabelę CREATE TABLE Nowa ( Nazwisko varchar (15), Imie varchar (15), Wiek integer ); Proste Ograniczenia CREATE TABLE Nowa ( IdOsoby int IDENTITY (1, 1) NOT NULL PRIMARY KEY, Nazwisko varchar(20) NULL, Imie varchar(20) NULL ); 43
44 Zapytania tworzące tabelę Klucz główny złożony DROP TABLE nnn; CREATE TABLE nnn (Nazwisko varchar(15), Imie varchar(15), CONSTRAINT klucz PRIMARY KEY (Nazwisko,Imie)); INSERT INTO nnn VALUES('KOWAL','JAN'); INSERT INTO nnn VALUES('KOWAL','KAROL'); INSERT INTO nnn VALUES('KOWAL','JAN'); SELECT * FROM nnn; Zapytania tworzące tabelę CREATE TABLE T1 ( nr1 int IDENTITY, nr2 uniqueidentifier ); INSERT INTO T1 (nr2) VALUES (NEWID()); INSERT INTO T1 DEFAULT VALUES; SELECT * FROM T1; Zamiast minimalny rozmiar varchar nr2 varchar(36) SKUTEK 1 DAA7C F-443B F55AE7BA3CD 2 NULL 44
45 Zapytania tworzące tabelę UNIQUE DROP TABLE nnn; CREATE TABLE nnn (Nazwisko varchar(15), Imie varchar(15), CONSTRAINT spr UNIQUE (Nazwisko,Imie)); INSERT INTO nnn VALUES('KOWAL','JAN'); INSERT INTO nnn VALUES('KOWAL','KAROL'); INSERT INTO nnn VALUES('KOWAL','JAN'); SELECT * FROM nnn; Zapytania tworzące tabelę Ograniczenia DROP TABLE nnn; CREATE TABLE nnn (nr integer PRIMARY KEY, Nazwisko varchar(15) NOT NULL, Imie varchar(15) DEFAULT 'Brak', m_v integer CHECK (m_v>10)); INSERT INTO nnn(nr, Nazwisko, Imie, m_v) VALUES(1,'KOWAL','JAN',20); INSERT INTO nnn(nr, Nazwisko, m_v) VALUES(2,'KOWAL',30); INSERT INTO nnn(nr, Nazwisko, Imie, m_v) VALUES(3,'KOWAL','JAN',4); SELECT * FROM nnn; 45
46 Zapytania tworzące tabelę Ograniczenia cd DROP TABLE nnn; CREATE TABLE nnn (nr integer PRIMARY KEY, Nazwisko varchar(15) NOT NULL, Imie varchar(15) DEFAULT 'Brak', m_v integer CHECK (m_v>10), mm_v integer CHECK (mm_v<300)); INSERT INTO nnn(nr, Nazwisko, Imie, m_v, mm_v) VALUES(1,'KOWAL','JAN',20,50); INSERT INTO nnn(nr, Nazwisko, m_v,mm_v) VALUES(2,'KOWAL',30,100); INSERT INTO nnn(nr, Nazwisko, Imie, m_v,mm_v) VALUES(3,'KOWAL','JAN',4,100); Zapytania tworzące tabelę Ograniczenia cd DROP TABLE nnn; CREATE TABLE nnn (nr integer PRIMARY KEY, Nazwisko varchar(15) NOT NULL, Imie varchar(15) DEFAULT 'Brak', m_v integer CHECK (m_v>10), mm_v integer CHECK (mm_v<300), CONSTRAINT spr CHECK(m_v <mm_v)); INSERT INTO nnn(nr, Nazwisko, Imie, m_v, mm_v) VALUES(1,'KOWAL','JAN',20,50); INSERT INTO nnn(nr, Nazwisko, m_v,mm_v) VALUES(2,'KOWAL',30,100); INSERT INTO nnn(nr, Nazwisko, Imie, m_v,mm_v) VALUES(3,'KOWAL','JAN',4,100); 46
47 Ustanowienie wartości domyślnej DROP TABLE tts CREATE TABLE tts (nr1 int, ddd datetime DEFAULT getdate(), oo varchar(10), pp varchar(10), CONSTRAINT sss CHECK (Left(pp,1)=Left(oo,1)) INSERT INTO tts DEFAULT VALUES; 47
48 Tworzenie tabeli z zastosowaniem ograniczeń dla daty DROP TABLE Nowa CREATE TABLE Nowa (nr1 int IDENTITY(1,1) PRIMARY KEY, d1 datetime DEFAULT getdate(), d2 datetime, CONSTRAINT spr CHECK(d2>getdate()) ); INSERT INTO Nowa VALUES(' ',' ') INSERT INTO Nowa (d2) VALUES(' ') SELECT * FROM Nowa Zapytania tworzące tabelę Klucz obcy referencyjny CREATE TABLE Nagrody ( IdNagrody int NOT NULL PRIMARY KEY, IdOsoby int NOT NULL FOREIGN KEY REFERENCES Osoby(IdOsoby) ON DELETE NO ACTION, Nagroda varchar(15) ) 48
49 Zapytania tworzące tabelę Klucz obcy referencyjny cd CREATE TABLE Nagrody ( IdNagrody int NOT NULL PRIMARY KEY, IdOsoby int NOT NULL FOREIGN KEY REFERENCES Osoby(IdOsoby) ON DELETE CASCADE ON UPDATE CASCADE, Nagroda varchar(15) ) Zapytania tworzące tabelę Tabela Tymczasowa lokalna DROP TABLE #MyTempTable CREATE TABLE #MyTempTable (nr INT PRIMARY KEY) INSERT INTO #MyTempTable VALUES (1) SELECT * FROM #MyTempTable 49
50 Zapytania tworzące tabelę Tabela Tymczasowa globalna DROP TABLE ##MyTempTable CREATE TABLE ##MyTempTable (nr INT PRIMARY KEY) INSERT INTO ##MyTempTable VALUES (1) SELECT * FROM ##MyTempTable Zapytania modyfikujące tabelę ALTER TABLE wys_tab ADD nr integer; ALTER SELECT * FROM wys_tab; ALTER TABLE wys_tab ALTER COLUMN nr varchar(3); INSERT INTO wys_tab(nr) VALUES('aaa'); SELECT * FROM wys_tab; 50
51 Zapytania modyfikujące tabelę ALTER cd DROP TABLE nnn; CREATE table nnn (nr integer, Nazwisko varchar(15) NULL, CONSTRAINT kl PRIMARY KEY(nr)); INSERT INTO nnn(nr,nazwisko) VALUES(1,'KOWAL'); INSERT INTO nnn(nr) values(2); ALTER TABLE nnn DROP COLUMN nr; SELECT * FROM nnn; Zapytania modyfikujące tabelę ALTER TABLE wys_tab DROP COLUMN nr; ALTER cd 1 SELECT * FROM wys_tab; ALTER TABLE nnn DROP CONSTRAINT spr; INSERT INTO nnn(nr, Nazwisko, m_v, mm_v) VALUES(2,'KOWAL',30,20); SELECT * FROM nnn; 51
52 Zapytania modyfikujące tabelę ALTER cd 1 ALTER TABLE Nowa ADD CONSTRAINT kl PRIMARY KEY (nr); INSERT INTO Nowa(nr, Nazwisko) VALUES(2,'KOWAL'); SELECT * FROM nnn; Zapytanie usuwające tabelę Bez zastosowania i z zastosowaniem EXISTS DROP TABLE Nowa; IF EXISTS (SELECT Table_Name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Rodzaj') DROP TABLE Rodzaj 52
53 Widok - perspektywa Tworzenie widoku CREATE VIEW Dane AS SELECT Nazwisko, Imie FROM Osoby CREATE VIEW Dane_check AS SELECT Nazwisko, Imie, Wzrost FROM Osoby WHERE wzrost > 1.80 WITH CHECK OPTION Nie zezwala na wprowadzenie danych niezgodnych z warunkiem w klauzuli WHERE Widok - perspektywa Zastosowanie EXISTS do usuwania widoku IF EXISTS (SELECT * FROM SYSOBJECTS WHERE Id = Object_Id(N'OsobyWiev') AND OBJECTPROPERTY(Id, N'IsView') = 1) DROP VIEW OsobyWiev CREATE VIEW OsobyWiev AS SELECT Nazwisko, Imie, Wzrost FROM Osoby 53
54 Widok - perspektywa Wstawianie danych do widoku INSERT INTO Dane VALUES ('Kowalski','Wiesław') INSERT INTO Sklad(Nazwisko, Imie) VALUES ('Kowalski','Wiesław') Procedura składowana Tworzenie procedury CREATE PROCEDURE varchar(20)='%' AS SELECT Nazwisko, Imie FROM Osoby WHERE Nazwisko + '%' AND Imie + '%' 54
55 Procedura składowana CREATE PROCEDURE real = int OUTPUT AS FROM Osoby WHERE Wzrost int EXEC licz OUTPUT Wykonanie zapytania danego zmienną AS Varchar(200) ' + ' FROM Osoby' EXEC (@zap) 55
56 Procedura składowana Procedury zagnieżdżone DROP PROCEDURE innerproc DROP PROCEDURE outerproc CREATE PROCEDURE innerproc AS SELECT AS 'Inner Level' EXEC outerproc CREATE PROCEDURE outerproc AS SELECT AS 'Outer Level' EXEC innerproc EXECUTE outerproc Poziom zagnieżdżenia Wartość maksymalna 32 Dynamiczny SQL DROP TABLE zarobki_prac CREATE TABLE zarobki_prac ( zrodlo varchar(11) NOT NULL, kto int NOT NULL, Nazwisko varchar(40) NOT NULL, ile money NOT NULL ); CREATE PROCEDURE spr_dochody AS SELECT 'PROCEDURE', Osoby.IdOsoby, Nazwisko, Brutto FROM Osoby INNER JOIN Zarobki ON Osoby.IdOsoby = Zarobki.IdOsoby WHERE Brutto>500 ORDER BY IdOsoby; 56
57 Dynamiczny SQL --INSERT...SELECT INSERT zarobki_prac SELECT 'SELECT', Osoby.IdOsoby, Nazwisko, Brutto FROM Osoby INNER JOIN Zarobki ON Osoby.IdOsoby = Zarobki.IdOsoby WHERE Brutto<300 ORDER BY IdOsoby; --INSERT...EXECUTE procedure INSERT zarobki_prac EXECUTE spr_dochody; Dynamiczny SQL --INSERT...EXECUTE('string') INSERT zarobki_prac EXECUTE (' SELECT ''EXEC STRING'', Osoby.IdOsoby, Nazwisko, Brutto FROM Osoby INNER JOIN Zarobki ON Osoby.IdOsoby = Zarobki.IdOsoby WHERE Brutto BETWEEN 300 AND 500 ORDER BY IdOsoby '); SELECT * FROM zarobki_prac; SELECT 1 Kowalski 122,10 SELECT 2 Nowak 111,00 SELECT 3 Kow 222,00 PROCEDURE 1 Kowalski 732,60 PROCEDURE 1 Kowalski 1098,90 PROCEDURE 2 Nowak 976,80 PROCEDURE 4 Janik 555,00 PROCEDURE 8 Adamczyk 777,00 EXEC STRING 1 Kowalski 366,30 EXEC STRING 2 Nowak 488,40 57
58 Funkcje Funkcja zwracająca wartość CREATE FUNCTION wysocy decimal (3,2) = 0) RETURNS int AS BEGIN int FROM Osoby WHERE Wzrost END WYWOŁANIE int Funkcja zwracająca rekordy (tabelę) stara postać CREATE FUNCTION wysocy_table (@mm decimal (3,2) = 0) TABLE (Nazwisko varchar(15), Wzrost decimal(3,2)) AS BEGIN INSERT SELECT Nazwisko, Wzrost FROM Osoby WHERE Wzrost ORDER BY Wzrost DESC RETURN END SELECT * FROM dbo.wysocy_table(1.5) 58
59 Funkcja zwracająca rekordy (tabelę) nowa postać CREATE FUNCTION wysocyt real) RETURNS TABLE AS RETURN ( SELECT Nazwisko,imie, wzrost FROM osoby WHERE wzrost >=@minimum ) SELECT * FROM wysocyt (1.5) Nie jest potrzebne w wywołaniu funkcji zwracającej tabelę stosowanie nazw kwalifikowanych (dbo.wysocyt) wystarczy podać nazwę ale w skalarnych pozostało nawet jeśli określono synonim (do takiego synonimu też nazwa kwalifikowana) Złączenie z funkcją zwracającą rekordy (tabelę) DROP FUNCTION pracownicy CREATE FUNCTION pracownicy (@dzial int) RETURNS TABLE AS RETURN (SELECT Nazwisko, Imie FROM Osoby WHERE IdDzialu SELECT Nazwa, Nazwisko FROM Dzialy CROSS APPLY dbo.pracownicy(iddzialu); SELECT Nazwa, Nazwisko FROM Dzialy OUTER APPLY dbo.pracownicy(iddzialu); Prefiks dbo opcjonalnie 59
60 Transakcje Tworzenie BEGIN TRANSACTION int SELECT Nazwisko FROM Osoby SET UPDATE Osoby SET Nazwisko = UPPER(Nazwisko) COMMIT TRAN > 0 BEGIN PRINT 'Transakcja musi być cofnięta ROLLBACK TRAN END Transakcje Hierarchiczne (zagnieżdżone) CREATE TABLE TestTran (Cola INT PRIMARY KEY, Colb CHAR(3)) BEGIN TRANSACTION OuterTran INSERT INTO TestTran VALUES (1, 'aaa') BEGIN TRANSACTION Inner1 INSERT INTO TestTran VALUES (2, 'bbb') BEGIN TRANSACTION Inner2 INSERT INTO TestTran VALUES (3, 'ccc') COMMIT TRANSACTION Inner2 COMMIT TRANSACTION Inner1 COMMIT TRANSACTION OuterTran 60
61 Transakcje SAVE punkt wycofania transakcji BEGIN TRANSACTION podwyzka SELECT Brutto FROM ZarobkiWHERE IdOsoby IN (2, 3) UPDATE zarobki SET Brutto = Brutto*1.1 WHERE IdOsoby = 2 SAVE TRANSACTION podwyzka UPDATE zarobki SET brutto = brutto*0.9 WHERE idosoby = 3 SELECT Brutto FROM ZarobkiWHERE IdOsoby= 3 ROLLBACK TRANSACTION podwyzka COMMIT TRANSACTION SELECT Brutto FROM ZarobkiWHERE IdOsoby IN (2, 3) Zastosowanie ustawienia błędu do wyświetlenia komunikatu INT; = DB_ID(); NVARCHAR(128); = DB_NAME(); RAISERROR (N Identyfikator bazy ID =%d, Nazwa bazy = %s.', 10, -- grupa błędów. 1, Pierwszy -- Drugi argument. 61
62 Tworzenie błędów użytkownika --Tworzenie błędu użytkownika sp_addmessage 50001, 15, 'Komunikat'; RAISERROR (50001,10,2) --Nadpisanie definicji błędu i uzupełnienie jej o parametry sp_addmessage 50001, 15, 'Komunikat %d, varchar(15) Zastosowanie ustawienia błędu do wyświetlenia komunikatu w bloku TRY CATCH BEGIN TRY -- RAISERROR z grup przeniesie wykonanie do bloku CATCH -- Niższe grupy nie powodują przeniesienia RAISERROR ('Błąd w bloku TRY.', 16, 1 ); END TRY BEGIN CATCH NVARCHAR(4000); INT; INT; = = = ERROR_STATE(); -- zastosowano RAISERROR w bloku CATCH aby zwrócić -- informacje o błędzie, który spowodował przeniesienie -- wykonywania skryptu do bloku CATCH. END CATCH; 62
63 Zastosowanie ustawienia błędu do wyświetlenia komunikatu w bloku TRY CATCH BEGIN TRY -- Dzielenie przez zero. SELECT 1/0; END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS NumerBłędu, ERROR_SEVERITY() AS SeverityBłęu, ERROR_STATE() AS StateBłędu, ERROR_PROCEDURE() AS ProceduraBłędu, ERROR_LINE() AS LiniaBłędu, ERROR_MESSAGE() AS KomunikatBłędu; END CATCH; Triggery procedury wyzwalane (wyzwalacze) Tworzenie triggerów CREATE TRIGGER selall ON Osoby FOR INSERT, UPDATE AS SELECT * FROM Osoby CREATE TRIGGER selall1 ON Osoby FOR DELETE AS SELECT Nazwisko FROM Osoby 63
64 Triggery procedury wyzwalane (wyzwalacze) CREATE TRIGGER up ON Osoby FOR INSERT, UPDATE AS UPDATE Osoby SET Nazwisko=UPPER(Nazwisko), Imie =UPPER(Imie) PRINT 'Wykonano' Wykonuje się dla wszystkich rekordów bez względu na liczbę modyfikowanych lub wstawianych rekordów UPDATE Osoby SET Nazwisko=LOWER(Nazwisko) WHERE IdOsoby >10 UPDATE Osoby Set RokUrodz=0 WHERE RokUrodz IS NULL INSERT INTO Osoby(Nazwisko) VALUES('Nowy') Triggery procedury wyzwalane (wyzwalacze) Z zastosowaniem systemowych tabel tymczasowych CREATE TRIGGER up ON Osoby FOR INSERT, UPDATE AS UPDATE Osoby SET Nazwisko=UPPER(Nazwisko), Imie =UPPER(Imie) WHERE IdOsoby IN (SELECT IdOsoby FROM INSERTED) PRINT 'Wykonano' Wykonuje się tylko dla modyfikowanych lub wstawianych rekordów UPDATE Osoby SET Nazwisko=LOWER(Nazwisko) WHERE IdOsoby >10 UPDATE Osoby Set RokUrodz=0 WHERE RokUrodz IS NULL INSERT INTO Osoby(Nazwisko) VALUES('Nowy') 64
65 Triggery procedury wyzwalane (wyzwalacze) Z zastosowaniem systemowych tabel tymczasowych CREATE TRIGGER up ON Osoby FOR INSERT, UPDATE AS IF UPDATE(Nazwisko) OR UPDATE(Imie) BEGIN UPDATE Osoby SET Nazwisko=UPPER(Nazwisko), Imie =UPPER(Imie) WHERE IdOsoby IN (SELECT IdOsoby FROM INSERTED) PRINT 'Wykonano PRINT COLUMNS_UPDATED ( ) END ELSE PRINT 'Ominięto PRINT COLUMNS_UPDATED ( ) Wykonuje się tylko wtedy gdy modyfikowana jest jedna z dwóch kolumn wykonuje się również dla INSERT gdy nie puste wartości 0x04 0x10 UPDATE Osoby SET Nazwisko=LOWER(Nazwisko) WHERE IdOsoby >10 UPDATE Osoby Set RokUrodz=0 WHERE RokUrodz IS NULL INSERT INTO Osoby(Nazwisko) VALUES('Nowy') Triggery procedury wyzwalane (wyzwalacze) Z zastosowaniem systemowych tabel tymczasowych DROP TRIGGER upd CREATE TRIGGER upd ON Osoby FOR INSERT, UPDATE AS tinyint = MAX(o.wiek) FROM Osoby o, INSERTED i WHERE o.idosoby <> i.idosoby = i.wiek FROM INSERTED i PRINT columns_updated() BEGIN RAISERROR(50001, 1, 2) WITH SETERROR END Nie zezwala na wprowadzenie osoby starszej niż najstarsza istniejąca w tabeli RAISERROR ('Wartość powinna być mniejsza równa %d a jest ROLLBACK TRANSACTION 65
66 Triggery procedury wyzwalane (wyzwalacze) Zamiast CREATE TRIGGER zamiast ON Osoby INSTEAD OF DELETE AS PRINT 'Zakaz kasowania' Nie zezwala na usuwanie wierszy z tabeli Triggery procedury wyzwalane (wyzwalacze) Zamiast CREATE TRIGGER zamiast ON Osoby INSTEAD OF DELETE AS int FROM Zarobki WHERE Idosoby IN (SELECT IdOsoby FROM DELETED) IF (@ile >0) Nie zezwala na usuwanie wierszy z tabeli PRINT 'Zakaz kasowania' dla osób, które mają jakiekolwiek zarobki ELSE DELETE FROM Osoby WHERE Idosoby IN (SELECT IdOsoby FROM DELETED) go 66
67 Triggery procedury wyzwalane (wyzwalacze) Triggery na bazie danych DROP TRIGGER Db_Table ON DATABASE CREATE TRIGGER Db_Table ON DATABASE FOR DROP_TABLE, ALTER_TABLE AS IF IS_MEMBER ('db_owner') = 0 BEGIN PRINT 'Musisz mieć uprawnienia DBA dla usuwania i modyfikowania tabel!' ROLLBACK TRANSACTION END Informacje o aktywnym użytkowniku SELECT CURRENT_USER, USER, SESSION_USER, SYSTEM_USER, USER_NAME(), HOST_ID(), HOST_NAME(), APP_NAME() 67
68 Tworzenie modyfikacja triggera CREATE TRIGGER schema_name.trigger_name ON ( table view ) ALTER [ TRIGGER WITH <dml_trigger_option> schema_name.trigger_name [,...n ] ] ON ( ( table FOR AFTER view ) INSTEAD OF ) [ WITH { [ <dml_trigger_option> DELETE ] [, ] [ INSERT [,...n ] [ ], ] [ UPDATE ] } ( FOR [ NOT AFTER FOR REPLICATION INSTEAD OF ]) { [ DELETE AS { sql_statement ] [, ] [ INSERT [ ; ] [...n, ] [] UPDATE EXTERNAL ] } NAME [ NOT <method FOR REPLICATION specifier> ] [ ; ] } AS { sql_statement [ ; ] [...n ] EXTERNAL NAME <method <dml_trigger_option> specifier> [ ; ] }::= [ ENCRYPTION ] <dml_trigger_option> [ <EXECUTE AS ::= Clause> ] [ ENCRYPTION ] [ <method_specifier> <EXECUTE AS Clause> ::=] assembly_name.class_name.method_name <method_specifier> ::= assembly_name.class_name.method_name Tworzenie modyfikacja triggera CREATE TRIGGER trigger_name ON { DATABASE ALL SERVER } [ WITH <ddl_trigger_option> [,...n ] ] { FOR AFTER } { event_type [,...n ] event_group } AS { sql_statement [ ; ] EXTERNAL NAME <method specifier> [ ; ] } ALTER TRIGGER trigger_name ON { DATABASE ALL SERVER } [ WITH <ddl_trigger_option> [,...n ] ] { FOR AFTER } { event_type [,...n ] event_group } AS { sql_statement [ ; ] EXTERNAL NAME <method specifier> [ ; ] } 68
69 Triggery procedury wyzwalane (wyzwalacze) Polecenia wyzwalające triggery na bazie danych CREATE_FUNCTION ALTER_FUNCTION DROP_FUNCTION CREATE_INDEX ALTER_INDEX DROP_INDEX CREATE_PROCEDURE ALTER_PROCEDURE DROP_PROCEDURE CREATE_ROLE ALTER_ROLE DROP_ROLE CREATE_SYNONYM DROP_SYNONYM CREATE_TABLE ALTER_TABLE DROP_TABLE CREATE_TRIGGER ALTER_TRIGGER DROP_TRIGGER CREATE_TYPE DROP_TYPE CREATE_USER ALTER_USER DROP_USER CREATE_VIEW ALTER_VIEW DROP_VIEW GRANT_DATABASE DENY_DATABASE REVOKE_DATABASE Polecenia wyzwalające triggery na bazie danych cd CREATE_APPLICATION_ROLE ALTER_APPLICATION_ROLE DROP_APPLICATION_ROLE CREATE_ASSEMBLY ALTER_ASSEMBLY DROP_ASSEMBLY ALTER_AUTHORIZATION_DATABASE CREATE_CERTIFICATE ALTER_CERTIFICATE DROP_CERTIFICATE CREATE_CONTRACT CREATE_EVENT_NOTIFICATION DROP_CONTRACT DROP_EVENT_NOTIFICATION CREATE_MESSAGE_TYPE ALTER_MESSAGE_TYPE DROP_MESSAGE_TYPE CREATE_PARTITION_FUNCTION ALTER_PARTITION_FUNCTION DROP_PARTITION_FUNCTION CREATE_PARTITION_SCHEME ALTER_PARTITION_SCHEME DROP_PARTITION_SCHEME CREATE_QUEUE ALTER_QUEUE DROP_QUEUE CREATE_REMOTE_SERVICE_BINDING ALTER_REMOTE_SERVICE_BINDING DROP_REMOTE_SERVICE_BINDING CREATE_ROUTE ALTER_ROUTE DROP_ROUTE CREATE_SCHEMA ALTER_SCHEMA DROP_SCHEMA CREATE_SERVICE ALTER_SERVICE DROP_SERVICE CREATE_STATISTICS DROP_STATISTICS UPDATE_STATISTICS CREATE_XML_SCHEMA_COLLECTION ALTER_XML_SCHEMA_COLLECTION DROP_XML_SCHEMA_COLLECTION 69
70 Struktura hierarchiczna zdarzeń DDL Struktura hierarchiczna zdarzeń DDL cd 70
71 Polecenia wyzwalające triggery na serwerze ALTER_AUTHORIZATION_SERVER CREATE_DATABASE ALTER_DATABASE DROP_DATABASE CREATE_ENDPOINT DROP_ENDPOINT CREATE_LOGIN ALTER_LOGIN DROP_LOGIN GRANT_SERVER DENY_SERVER REVOKE_SERVER Triggery na serwerze DROP TRIGGER dla_logowania ON ALL SERVER CREATE TRIGGER dla_logowania ON ALL SERVER FOR LON AS PRINT 'Nastąpiła zmiana uprawnień' SELECT EVENTDATA().value( '(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)') 71
72 Triggery na serwerze DROP TRIGGER dla_autoryzacji ON ALL SERVER CREATE TRIGGER dla_autoryzacji ON ALL SERVER FOR DDL_LOGIN_EVENTS AS PRINT 'Nastąpiła zmiana uprawnień' SELECT EVENTDATA().value( '(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)') struktura XML zwracana przez funkcję EVENT_INSTANCE <EVENT_INSTANCE> <EventType>type</EventType> <PostTime>date-time</PostTime> <SPID>spid</SPID> <ServerName>name</ServerName> <LoginName>name</LoginName> <UserName>name</UserName> <DatabaseName>name</DatabaseName> <SchemaName>name</SchemaName> <ObjectName>name</ObjectName> <ObjectType>type</ObjectType> <TSQLCommand>command</TSQLCommand> </EVENT_INSTANCE> 72
73 Tworzenie triggera dla potrzeb audytu CREATE TABLE ddl_log (PostTime datetime, DB_User nvarchar(100), Event nvarchar(100), TSQL nvarchar(2000)); CREATE TRIGGER log ON DATABASE FOR DDL_DATABASE_LEVEL_EVENTS AS XML = EVENTDATA() INSERT ddl_log (PostTime, DB_User, Event, TSQL) VALUES (GETDATE(), CONVERT(nvarchar(100), 'nvarchar(2000)') ) ; Wyłączanie i włączanie triggera DISABLE TRIGGER { [ schema. ] trigger_name [,...n ] ALL } ON { object_name DATABASE ALL SERVER } [ ; ] ENABLE TRIGGER { [ schema_name. ] trigger_name [,...n ] ALL } ON { object_name DATABASE ALL SERVER } [ ; ] 73
74 Wyłączanie i włączanie triggera DISABLE TRIGGER safety ON DATABASE DISABLE TRIGGER ALL ON ALL SERVER; ENABLE TRIGGER safety ON DATABASE; ENABLE Trigger ALL ON ALL SERVER; Kursory Tworzenie DECLARE osoby_c CURSOR FOR SELECT Nazwisko FROM Osoby OPEN osoby_c FETCH NEXT FROM osoby_c CLOSE osoby_c DEALLOCATE osoby_c 74
75 Kursory Tworzenie cd DECLARE osoby_c CURSOR FOR SELECT Nazwisko FROM Osoby OPEN osoby_c FETCH NEXT FROM osoby_c WHILE = 0 BEGIN FETCH NEXT FROM osoby_c END CLOSE osoby_c DEALLOCATE osoby_c Kursory Tworzenie cd varchar(20) DECLARE osoby_c CURSOR FOR FROM Osoby SELECT Nazwisko, Imie OPEN osoby_c FETCH NEXT FROM = 0 BEGIN PRINT "Kto to? To " + " " FETCH NEXT FROM END CLOSE osoby_c DEALLOCATE osoby_c 75
76 Procedura zwracająca kursor CREATE PROCEDURE CURSOR VARYING OUTPUT AS = CURSOR FOR SELECT nazwisko, imie FROM osoby -- wywołanie CURSOR EXEC OUTPUT WHILE (@@FETCH_STATUS = 0) BEGIN FETCH NEXT PRINT 'miejsce na kod' END Tworzenie synonimu (dla tabeli,perspektywy,procedury,funkcji) DROP SYNONYM syn CREATE SYNONYM syn FOR wysocyt SELECT * FROM syn(1.7) 76
77 Blok TRY_CATCH bez wywołania procedury nie przynosi skutku BEGIN TRY -- Tabela nie istnieje błąd nie jest przechwytywany SELECT * FROM NonexistentTable; END TRY BEGIN CATCH SELECT ERROR_NUMBER() as ErrorNumber, ERROR_MESSAGE() as ErrorMessage; END CATCH Skutek Msg 208, Level 16, State 1, Line 4 Invalid object name 'NonexistentTable'. Procedura i jej wywołanie z TRY_CATCH DROP PROCEDURE usp_exampleproc; CREATE PROCEDURE usp_exampleproc AS SELECT * FROM NonexistentTable; BEGIN TRY EXECUTE usp_exampleproc END TRY BEGIN CATCH SELECT ERROR_NUMBER() as ErrorNumber, Skutek ERROR_MESSAGE() as ErrorNumber ErrorMessage ErrorMessage; END CATCH; 208 Invalid object name 'NonexistentTable'. (1 row(s) affected) 77
78 Procedura i jej wywołanie z TRY_CATCH DROP PROCEDURE usp_exampleproc; CREATE PROCEDURE usp_exampleproc AS SELECT * FROM NonexistentTable; Wywołanie proc bez try_catch kończy się błędem EXEC usp_exampleproc; Skutek Msg 208, Level 16, State 1, Procedure usp_exampleproc, Line 3 Invalid object name 'NonexistentTable'. TRY_CATCH przykład dla dzielenia przez zero BEGIN TRY SELECT 1/0; END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE() AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage; END CATCH; Skutek (0 row(s) affected) ErrorNumber ErrorSeverity ErrorState ErrorProcedure ErrorLine ErrorMessage NULL 3 Divide by zero error encountered. (1 row(s) affected) 78
79 próba usunięcia powiązanych rekordów klucz obcy, w obrębie transakcji z zaastosowaniem Try_catch BEGIN TRANSACTION; BEGIN TRY -- Osoba o idosoby =2 ma zarobki delete from osoby WHERE IDosoby=2; END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() as ErrorState, ERROR_PROCEDURE() as ErrorProcedure, ERROR_LINE() as ErrorLine, ERROR_MESSAGE() as ErrorMessage; > 0 Skutek ROLLBACK TRANSACTION; END CATCH; > 0 COMMIT TRANSACTION; ErrorNumber ErrorSeverity ErrorState ErrorProcedure ErrorLine ErrorMessage NULL 5 The DELETE statement conflicted with the REFERENCE constraint "FK_Zarobki_Osoby". The conflict occurred in databa "ap", table "dbo.zarobki", column 'IdOsoby'. (1 row(s) affected) Próba usunięcia niejstniejącej kolumny kod z tabeli Dzialy BEGIN TRY BEGIN TRANSACTION; BEGIN TRY -- Generowany jest bład z powodu nieistnienia usuwanej kolumny ALTER TABLE dzialy DROP COLUMN kod; -- Jeśli polecenie powiedzie się zatwierdź transakcje. COMMIT TRANSACTION; END TRY BEGIN CATCH SELECT ERROR_NUMBER() as ErrorNumber, ERROR_MESSAGE() as ErrorMessage; -- Test XACT_STATE for 1 or XACT_STATE = 0 nie jest otwarta żadna transakcja -- COMMIT lub ROLLBACK będą generowały błąd. -- sprawdź czy transakcja jest niecommitowalna (is uncommittable). IF (XACT_STATE()) = -1 79
80 Próba usunięcia niejstniejącej kolumny kod z tabeli Dzialy cd BEGIN PRINT N'Transakcja jest w stanie uncommittabl. ' + 'Wycofywanie transakcji.' ROLLBACK TRANSACTION; END; -- sprawdź czy transakcja jest aktywna i w stanie valid (dostępna). IF (XACT_STATE()) = 1 BEGIN PRINT N' Transakcja jest w stanie committable. ' + 'Zatwierdzenie transakcji.' COMMIT TRANSACTION; END; END CATCH; Skutek ErrorNumber ErrorMessage ALTER TABLE DROP COLUMN failed because column 'kod' does not exist in table 'dzialy'. (1 row(s) affected) Transakcja jest w stanie uncommittabl. Wycofywanie transakcji. Indeksy Tworzenie DROP INDEX osoby.ix_imie CREATE CLUSTERED INDEX Ix_name ON Osoby (nazwisko) DROP INDEX osoby.ix_name CREATE CLUSTERED INDEX Ix_imie ON Osoby (imie) DROP INDEX osoby.ix_imie CREATE CLUSTERED INDEX Ix_imienazwisko ON Osoby imie, nazwisko) 80
81 Wszystko z WORDA Wyszukiwanie pełnotekstowe SELECT opis FROM Osoby WHERE CONTAINS(Opis,'Glupi') SELECT opis FROM Osoby WHERE CONTAINS(Opis,'Du*') SELECT opis FROM Osoby WHERE CONTAINS(Opis,' "Du*" ') SELECT opis FROM Osoby WHERE CONTAINS(Opis,'Duzy Near Glupi') DO poprawy Ograniczenia, rules, default etc Wprowadzenie do tabeli dzialy nowej kolumny opartej o typ użytkownika ALTER TABLE dzialy ADD kod litera Tworzenie reguły Create rule IsNotZero <> 0 CREATE RULE lit AS 81
82 Użytkownicy, role etc.. Tworzenie logina EXEC sp_addlogin 'Adam', 'ewa', 'sr8' Tworzenie użytkownika EXEC sp_adduser 'Adam', 'Ktos', 'public' Sprawdzanie użytkowników na serverze sp_helplogins sp_helprole sp_helpsrvrole sp_helpsrvrolemember 'sysadmin' Tworzenie użytkownika nowa postać USE ap; DROP USER ktos; DROP LOGIN ktos; CREATE LOGIN ktos WITH PASSWORD = 'kajak'; USE ap; CREATE USER ktos; GRANT SELECT ON Osoby to Ktos; 82
83 Tworzenie logina różne warianty CREATE LOGIN [LR\apelikan] FROM WINDOWS; Tworzenie LOGINA CREATE LOGIN login_name { WITH <option_list1> FROM <sources> } <sources> ::= WINDOWS [ WITH <windows_options> [,... ] ] CERTIFICATE certname ASYMMETRIC KEY asym_key_name <option_list1> ::= PASSWORD = 'password' [ HASHED ] [ MUST_CHANGE ] [, <option_list2> [,... ] ] <option_list2> ::= SID = sid DEFAULT_DATABASE = database DEFAULT_LANGUAGE = language CHECK_EXPIRATION = { ON OFF} CHECK_POLICY = { ON OFF} [ CREDENTIAL = credential_name ] <windows_options> ::= DEFAULT_DATABASE = database DEFAULT_LANGUAGE = language 83
84 Tworzenie LOGINA CREATE LOGIN test WITH PASSWORD = 'abcd' MUST_CHANGE; Msg 15195, Level 16, State 1, Line 1 The MUST_CHANGE option is not supported by this version of Microsoft Windows. CREATE LOGIN [LR\apelikan] FROM WINDOWS; USE ap; CREATE user [LR\apelikan] CREATE CREDENTIAL AlterEgo WITH IDENTITY = 'kto', SECRET = 'abcd'; CREATE LOGIN ktos WITH PASSWORD = 'xzy', CREDENTIAL = AlterEgo; USE MASTER; CREATE CERTIFICATE KtosCert ENCRYPTION BY PASSWORD = 'pgfd4bb925dgvbd y' WITH SUBJECT = 'Opis certyfikatu', EXPIRY_DATE = '02/02/2009'; CREATE LOGIN KtosC FROM CERTIFICATE KtosCert; Tworzenie LOGINA ALTER LOGIN ktos DISABLE; ALTER LOGIN ktos ENABLE; ALTER LOGIN ktos WITH PASSWORD = 'qwerty'; ALTER LOGIN ktos WITH NAME = KtosL; CREATE CREDENTIAL AlterEgo1 WITH IDENTITY = 'inny', SECRET = 'abcd'; ALTER LOGIN ktosc WITH CREDENTIAL = AlterEgo1; DROP LOGIN ktosc; 84
85 Dynamiczne tworzenie LOGINA DROP TABLE osoby CREATE TABLE osoby (id int IDENTITY(1,1) PRIMARY KEY, kto varchar(50) ); DROP TRIGGER dd; CREATE TRIGGER dd ON osoby AFTER INSERT AS BEGIN varchar(222); varchar(222); FROM inserted; ='use master; CREATE login +' with PASSWORD = '+''''+'kajak' +''''; EXEC (@zm); END; USE ap; INSERT INTO osoby VALUES ('nowy'); Tworzenie użytkownika CREATE USER user_name [ { { FOR FROM } { LOGIN login_name CERTIFICATE cert_name ASYMMETRIC KEY asym_key_name } WITHOUT LOGIN ] [ WITH DEFAULT_SCHEMA = schema_name ] 85
86 Tworzenie użytkownika CREATE USER ktos; GRANT CONNECT TO ktos; CREATE USER KtosU FOR LOGIN ktos WITH DEFAULT_SCHEMA = ap; CREATE USER UserC FOR CERTIFICATE KtosCert; ALTER USER ktosu WITH NAME = nowy; ALTER USER nowy WITH DEFAULT_SCHEMA = hurtownia; DROP USER nowy; Tworzenie roli CREATE ROLE rola GRANT SELECT ON Osoby TO rola REVOKE SELECT ON Osoby TO rola DROP ROLE rola1 CREATE ROLE rola1 AUTHORIZATION rola; ALTER ROLE rola WITH NAME = nowa_rola 86
87 DROP TABLE mylogintable go CREATE TABLE mylogintable (id int, klucz uniqueidentifier default newid(), user_id int default user_id(), date_in datetime default getdate(), myuser_name AS USER_NAME(), kto as user, os_user as system_user, c_user as current_user, s_user as session_user, gdzie as host_name(), gdzie_nr as host_id(), aplikacja as APP_NAME() ); go insert into mylogintable(id) values(1) select * from mylogintable; Informacje o połączonym użytkowniku F-7AED-46F C5E9CB97D6F :21: dbo dbo PC214-31\Administrator dbo dbo PC Microsoft SQL Server Management Studio - Query Użytkownicy, role etc.. Przypisywanie praw użytkownikowi GRANT SELECT, insert ON osoby TO Ktos Sprawdzenie elementów bazy select* from sysobjects where status>=32 select * from information_schema.tables select * from information_schema.views select * from information_schema.columns sp_help systypes 87
88 Informacje o loginach i uprawnieniach SELECT * FROM SYS.SQL_LOGINS SELECT * FROM SYS.DATABASE_ROLE_MEMBERS SELECT * FROM SYS.DATABASE_PERMISSIONS SELECT * FROM SYS.USER_TOKEN SELECT * FROM SYS.DATABASE_PRINCIPALS Podszycie się pod użytkownika USE ap; --Create two temporary principals CREATE LOGIN login1 WITH PASSWORD = 'J345#$)thb'; CREATE LOGIN login2 WITH PASSWORD = 'Uor80$23b'; CREATE USER user1 FOR LOGIN login1; CREATE USER user2 FOR LOGIN login2; --Give IMPERSONATE permissions on user2 to user1 --so that user1 can successfully set the execution context to user2. GRANT IMPERSONATE ON USER:: user2 TO user1; --Display current execution context. SELECT SUSER_NAME(), USER_NAME(); -- Set the execution context to login1. EXECUTE AS LOGIN = 'login1'; --Verify the execution context is now login1. SELECT SUSER_NAME(), USER_NAME(); --Login1 sets the execution context to login2. EXECUTE AS USER = 'user2'; --Display current execution context. SELECT SUSER NAME() USER NAME() 88
89 DO poprawy Błędy, elementy bazy Wykaz elementów bazy SELECT o.id,o.type, c.text FROM sysobjects o INNER JOIN syscomments c ON o.id = c.id SELECT o.id, c.text FROM sysobjects o INNER JOIN syscomments c ON o.id = c.id WHERE o.type = 'TR' /*and o.name = 'trig2'*/ DO poprawy Zadanie magazynowe z wykorzystaniem kursorów drop procedure sprawdz go create procedure int,@sztu int as int,@ile int varchar(3),@nile varchar(3) set nocount on DECLARE sprzed CURSOR FOR SELECT idtowaru,szt from magazyn OPEN sprzed FETCH next FROM 89
90 Dynamiczny SQL Wykonanie polecenia w każdej z baz serwera. varchar(55) declare cur cursor for select name from sys.databases varchar(255) open cur fetch next from cur Begin ='use ' + '; create table aa(a int);' execute(@sql); fetch next from cur end close cur deallocate cur Tworzenie bazy danych CREATE DATABASE nowa; DROP DATABASE nowa; 90
91 Tworzenie bazy danych USE master; IF DB_ID (N'Nowa') IS NOT NULL DROP DATABASE Nowa; -- Pobierz ścieżkę do danych SQL Server nvarchar(256); = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1) FROM master.sys.master_files WHERE database_id = 1 AND file_id = 1); -- Utwórz bazę danych EXECUTE ('CREATE DATABASE nowa ON ( NAME = Nowa_dat, FILENAME = + 'nowa.mdf'', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = Nowa_log, FILENAME = + 'nowa.ldf'', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB )' ); Odłączenie bazy danych i utworzenie z istniejącego pliku USE master; sp_detach_db nowa; nvarchar(256); = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1) FROM master.sys.master_files WHERE database_id = 1 AND file_id = 1); EXEC ('CREATE DATABASE nowa ON (FILENAME = + 'nowa.mdf'') FOR ATTACH'); 91
92 Zastosowanie sqlcmd do wykonania skryptu oraz xp_cmdshell do wykonania polecenia systemu EXEC xp_cmdshell 'sqlcmd -i C:\pol.sql -o C:\skut.txt' xp_cmdshell wymaga odblokowania Backup typu pełnego -- Tworzenie logicznego urządzenia dla backupu bazy Nowa. USE master EXEC sp_addumpdevice 'disk', 'Nowa', 'C:\temp\backup\nowa.bak' -- Full Back up bazy nowa. BACKUP DATABASE nowa TO nowa 92
SQL Server SQL & Transact SQL. Database schema
SQL Server SQL & Transact SQL Database schema 1 Database schema SELECT queries syntax SELECT [predykat] { * tabela.* [tabela.]pole1 [AS alias1] [, [tabela.]pole2 [AS alias2] [,...]]} FROM krotka [,...]
Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik
Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik Technologia Przykłady praktycznych zastosowań wyzwalaczy będą omawiane na bazie systemu MS SQL Server 2005 Wprowadzenie
Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika
Programowanie w SQL procedury i funkcje UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika 1. Funkcje o wartościach skalarnych ang. scalar valued
Systemowe aspekty baz
Systemowe aspekty baz danych Deklaracja zmiennej Zmienne mogą być wejściowe i wyjściowe Zmienne w T-SQL można deklarować za pomocą @: declare @nazwisko varchar(20) Zapytanie z użyciem zmiennej: select
050 SQL ELEMENTY ZAAWANSOWANE. Prof. dr hab. Marek Wisła
050 SQL ELEMENTY ZAAWANSOWANE Prof. dr hab. Marek Wisła Deklarowanie zmiennych DECLARE @nazwa-zmiennej typ-danych {, @nazwazmiennej typ-danych}; deklaruje nazwy zmiennych lokalnych (definiowanych przez
Relacyjne bazy danych. Podstawy SQL
Relacyjne bazy danych Podstawy SQL Język SQL SQL (Structured Query Language) język umożliwiający dostęp i przetwarzanie danych w bazie danych na poziomie obiektów modelu relacyjnego tj. tabel i perspektyw.
Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia
Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia Składowe wyzwalacza ( ECA ): określenie zdarzenia ( Event ) określenie
Systemowe aspekty baz danych
Systemowe aspekty baz danych Deklaracja zmiennej Zmienne mogą być wejściowe i wyjściowe Zmienne w T-SQL można deklarować za pomocą @: declare @nazwisko varchar(20) Zapytanie z użyciem zmiennej: select
LAB 6 BEGIN TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL,
Informatyka sem. III studia inżynierskie Transport 2018/19 Lab 6 LAB 6 TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL, UPDATE, INSERT INTO, ALTER TABLE, CREATE VIEW, CREATE TRIGGER, FUNCTION,
Struktura bazy danych
Procedury składowane, funkcje i wyzwalacze Struktura bazy danych Tabela Oddziały ID Nazwa Adres 10 POZNAN Kwiatowa 3 20 WARSZAWA al. Jerozolimskie 22 30 KRAKOW Planty 14 40 WROCLAW Nad Odra 16 50 GDANSK
Relacyjne bazy danych. Podstawy SQL
Relacyjne bazy danych Podstawy SQL Język SQL SQL (Structured Query Language) język umoŝliwiający dostęp i przetwarzanie danych w bazie danych na poziomie obiektów modelu relacyjnego tj. tabel i perspektyw.
SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści
SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, 2017 Spis treści O autorze 9 Wprowadzenie 11 Lekcja 1. Zrozumieć SQL 15 Podstawy baz danych 15 Język SQL
Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1
Tworzenie tabel Tabela podstawowa struktura, na której zbudowana jest relacyjna baza danych. Jest to zbiór kolumn (atrybutów) o ustalonych właściwościach, w których przechowuje się dane. Dane te są reprezentowane
Wykład 5. SQL praca z tabelami 2
Wykład 5 SQL praca z tabelami 2 Wypełnianie tabel danymi Tabele można wypełniać poprzez standardową instrukcję INSERT INTO: INSERT [INTO] nazwa_tabeli [(kolumna1, kolumna2,, kolumnan)] VALUES (wartosc1,
Administracja i programowanie pod Microsoft SQL Server 2000
Administracja i programowanie pod Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 6 Wyzwalacze Wprowadzenie Tworzenie wyzwalacza Wyzwalacze typu,,po'' Wyzwalacze typu,,zamiast''
Paweł Rajba pawel@ii.uni.wroc.pl http://www.itcourses.eu/
Paweł Rajba pawel@ii.uni.wroc.pl http://www.itcourses.eu/ Wprowadzenie Historia i standardy Podstawy relacyjności Typy danych DDL tabele, widoki, sekwencje zmiana struktury DML DQL Podstawy, złączenia,
Przestrzenne bazy danych Podstawy języka SQL
Przestrzenne bazy danych Podstawy języka SQL Stanisława Porzycka-Strzelczyk porzycka@agh.edu.pl home.agh.edu.pl/~porzycka Konsultacje: wtorek godzina 16-17, p. 350 A (budynek A0) 1 SQL Język SQL (ang.structured
Informatyka (5) SQL. dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro
Informatyka (5) SQL dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro katpalik@pg.gda.pl katarzyna.palikowska@wilis.pg.gda.pl Język zapytań SQL Język deklaratywny (regułowy) - SQL, ProLog,
Microsoft SQL Server Podstawy T-SQL
Itzik Ben-Gan Microsoft SQL Server Podstawy T-SQL 2012 przełożył Leszek Biolik APN Promise, Warszawa 2012 Spis treści Przedmowa.... xiii Wprowadzenie... xv Podziękowania... xix 1 Podstawy zapytań i programowania
Język SQL, zajęcia nr 1
Język SQL, zajęcia nr 1 SQL - Structured Query Language Strukturalny język zapytań Login: student Hasło: stmeil14 Baza danych: st https://194.29.155.15/phpmyadmin/index.php Andrzej Grzebielec Najpopularniejsze
Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści
Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, 2016 Spis treści Wprowadzenie Podziękowania xiii xvii 1 Podstawy zapytań i programowania T-SQL 1 Podstawy
Wykład 8. SQL praca z tabelami 5
Wykład 8 SQL praca z tabelami 5 Podzapytania to mechanizm pozwalający wykorzystywać wyniki jednego zapytania w innym zapytaniu. Nazywane często zapytaniami zagnieżdżonymi. Są stosowane z zapytaniami typu
DECLARE VARIABLE zmienna1 typ danych; BEGIN
Procedury zapamiętane w Interbase - samodzielne programy napisane w specjalnym języku (właściwym dla serwera baz danych Interbase), który umożliwia tworzenie zapytań, pętli, instrukcji warunkowych itp.;
Podstawy języka SQL. SQL Structured Query Languagestrukturalny
Podstawy języka SQL SQL Structured Query Languagestrukturalny język zapytań DDL Język definicji danych (np. tworzenie tabel) DML Język manipulacji danych (np. tworzenie zapytań) DCL Język kontroli danych
SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek
SELECT SELECT kolumna1, kolumna2,, kolumnan FROM tabela wybrane kolumny SELECT * FROM tabela wszystkie kolumny select * from Orders select CustomerID, CompanyName, Country from Customers WHERE SELECT *
T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15
T-SQL dla każdego / Alison Balter. Gliwice, cop. 2016 Spis treści O autorce 11 Dedykacja 12 Podziękowania 12 Wstęp 15 Godzina 1. Bazy danych podstawowe informacje 17 Czym jest baza danych? 17 Czym jest
SQL (ang. Structured Query Language)
SQL (ang. Structured Query Language) SELECT pobranie danych z bazy, INSERT umieszczenie danych w bazie, UPDATE zmiana danych, DELETE usunięcie danych z bazy. Rozkaz INSERT Rozkaz insert dodaje nowe wiersze
Informatyka sem. III studia inżynierskie Transport 2018/19 LAB 2. Lab Backup bazy danych. Tworzenie kopii (backup) bazy danych
Informatyka sem. III studia inżynierskie Transport 2018/19 Lab 2 LAB 2 1. Backup bazy danych Tworzenie kopii (backup) bazy danych Odtwarzanie bazy z kopii (z backup u) 1. Pobieramy skrypt Restore 2. Pobieramy
Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):
Utwórz bazę danych Cw: CREATE DATABASE Cw Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu): DBCC USEROPTIONS Przykład z zapisem do tabeli tymczasowej: --Jeśli istnieje tabela tymczasowa
SQL 4 Structured Query Lenguage
Wykład 5 SQL 4 Structured Query Lenguage Instrukcje sterowania danymi Bazy Danych - A. Dawid 2011 1 CREATE USER Tworzy nowego użytkownika Składnia CREATE USER specyfikacja użytkownika [, specyfikacja użytkownika]...
Wykład 6. SQL praca z tabelami 3
Wykład 6 SQL praca z tabelami 3 Łączenie wyników zapytań Język SQL zawiera mechanizmy pozwalające na łączenie wyników kilku pytań. Pozwalają na to instrukcje UNION, INTERSECT, EXCEPT o postaci: zapytanie1
BAZY DANYCH Cz III. Transakcje, Triggery
BAZY DANYCH Cz III Transakcje, Triggery Transakcje Definicja: Zbiór operacji (modyfikacja danych, usuwanie, wstawianie, tworzenie obiektów bazodanowych), które albo wszystkie kończone są sukcesem, albo
LAB 3 (część 1 Projektu)
Informatyka sem. III studia inżynierskie Transport 2018/19 LAB 3 (część 1 Projektu) Na zajęciach należy zaprojektować schemat bazy danych oraz przygotować dokument zawierający: Temat: Autor: 1. Opis 2.
PODSTAWY BAZ DANYCH 13. PL/SQL
PODSTAWY BAZ DANYCH 13. PL/SQL 1 Wprowadzenie do języka PL/SQL Język PL/SQL - rozszerzenie SQL o elementy programowania proceduralnego. Możliwość wykorzystywania: zmiennych i stałych, instrukcji sterujących
Aspekty aktywne baz danych
Aspekty aktywne baz danych Aktywne aspekty baz danych Baza danych powinna zapewniać pewne własności i niezmienniki; Własności te powinny mogą być zapisane do bazy danych, a baza danych powinna zapewniać
ACESS- zadania z wykorzystaniem poleceń SQL
ACESS- zadania z wykorzystaniem poleceń SQL Dane są relacje o schematach: Pracownik ( (nr integer, nazwisko text(12), etat text(10), szef integer, pracuje_od date, placa_pod Currency, placa_dod Currency,
Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.
Bazy Danych i Systemy informacyjne Wykład 2 Piotr Syga 16.10.2017 Dodawanie, usuwanie i zmienianie rekordów Wstawianie rekordu wstawianie do tabeli INSERT INTO A VALUES ( fioletowy, okrągły, słodko-kwaśny
Bazy danych SQL Server 2005
Bazy danych SQL Server 2005 TSQL Michał Kuciapski Typ zadania: Podstawowe zapytania Select Zadanie 1: Wyświetl następujące informacje z bazy: A. 1. Wyświetl informacje o klientach: nazwa firmy, imie, nazwisko,
Systemy GIS Tworzenie zapytań w bazach danych
Systemy GIS Tworzenie zapytań w bazach danych Wykład nr 6 Analizy danych w systemach GIS Jak pytać bazę danych, żeby otrzymać sensowną odpowiedź......czyli podstawy języka SQL INSERT, SELECT, DROP, UPDATE
Bazy danych. dr inż. Arkadiusz Mirakowski
Bazy danych dr inż. Arkadiusz Mirakowski Początek pracy z Transact SQL (T-SQL) 153.19.7.13,1401 jkowalski nr indeksu 2 Perspektywa - tabela tymczasowa - grupowanie Perspektywa (widok) Perspektywa (widok)
Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska
Instytut Mechaniki i Inżynierii Obliczeniowej www.imio.polsl.pl fb.com/imiopolsl @imiopolsl Wydział Mechaniczny Technologiczny Politechnika Śląska Laboratorium 1 Wprowadzenie, podstawowe informacje o obsłudze
Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1
Procedury wyzwalane procedury wyzwalane, cel stosowania, typy wyzwalaczy, wyzwalacze na poleceniach DML i DDL, wyzwalacze typu INSTEAD OF, przykłady zastosowania, zarządzanie wyzwalaczami 1 Procedury wyzwalane
strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych
SQL SQL (ang. Structured Query Language): strukturalny język zapytań używany do tworzenia strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych
Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze
Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze 1 Funkcje i procedury pamiętane Następujące polecenie tworzy zestawienie zawierające informację o tym ilu jest na naszej hipotetycznej
Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,
Mój projekt przedstawia bazę danych noclegów składającą się z 10 tabel. W projekcie wykorzystuje program LibreOffice Base do połączenia psql z graficznym interfejsem ( kilka formularzy przedstawiających
BAZA DANYCH SIECI HOTELI
Paulina Gogół s241906 BAZA DANYCH SIECI HOTELI Baza jest częścią systemu zarządzającego pewną siecią hoteli. Składa się z tabeli powiązanych ze sobą różnymi relacjami. Służy ona lepszemu zorganizowaniu
Hurtownia Świętego Mikołaja projekt bazy danych
Aleksandra Kobusińska nr indeksu: 218366 Hurtownia Świętego Mikołaja projekt bazy danych Zaprezentowana poniżej baza jest częścią większego projektu bazy danych wykorzystywanej w krajowych oddziałach wiosek
Microsoft SQL Server. Tradycyjna architektura klientserwer. Przeniesienie części logiki na serwer. Programowanie Transact SQL
Microsoft SQL Server Programowanie Transact SQL Tradycyjna architektura klientserwer Klient: cała logika aplikacji wysyła do serwera zapytania SQL odbiera i przetwarza rezultaty Serwer oczekuje na zapytania
Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.
Plan wykładu Spis treści 1 Dynamiczny SQL 1 2 Wyzwalacze 2 3 Podsumowanie 9 4 Źródła 9 1 Dynamiczny SQL Dynamiczny SQL Dynamiczny SQL - technika programowania umożliwiająca generowanie instrukcji SQL dynamicznie
Bazy danych 10. SQL Widoki
Bazy danych 10. SQL Widoki P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ semestr letni 2005/06 Widoki, AKA Perspektywy W SQL tabela, która utworzono za pomoca zapytania CREATE TABLE, nazywa się tabela
Wprowadzenie do projektowania i wykorzystania baz danych Relacje
Wprowadzenie do projektowania i wykorzystania baz danych Relacje Katarzyna Klessa Dygresja nt. operatorów SELECT 2^2 SELECT 2^30 SELECT 50^50 2 Dygresja nt. operatorów SELECT 2^30 --Bitwise exclusive OR
Zbiór zadań z SQLa z elementami T-SQLa. (Wersja robocza z dnia 12.05.2015 r.) (Zgłaszanie usterek Robert.Fidytek@inf.ug.edu.pl)
Zbiór zadań z SQLa z elementami T-SQLa (Wersja robocza z dnia 12.05.2015 r.) (Zgłaszanie usterek Robert.Fidytek@inf.ug.edu.pl) opracował dr Robert Fidytek SPIS TREŚCI Zadania poziom 1 (Prosty DQL i DML)...
Zadania z SQLa (MS SQL Server)
Zadania z SQLa (MS SQL Server) Struktura testowej bazy danych (diagram ERD): opracował dr Robert Fidytek SPIS TYPÓW ZADAŃ 1 Projekcja wyników zapytań (SELECT FROM )... 3 2 Sortowanie wyników zapytań (ORDER
3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota
Laboratorium nr 3 1 Bazy Danych Instrukcja laboratoryjna Temat: Wprowadzenie do języka SQL, tworzenie, modyfikacja, wypełnianie tabel 3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota 1)
Pawel@Kasprowski.pl Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl
Bazy danych Zapytania SELECT Dr inż. Paweł Kasprowski pawel@kasprowski.pl Przykład HAVING Podaj liczebność zespołów dla których najstarszy pracownik urodził się po 1940 select idz, count(*) from prac p
Tworzenie zapytań do Microsoft SQL Server
MS 20461 Tworzenie zapytań do Microsoft SQL Server Czas trwania: 5 dni (40 h) Poziom trudności: Średnio Zaawansowany Autoryzacja: Microsoft Opis: Szkolenie administratorów baz danych oraz programistów
Administracja i programowanie pod Microsoft SQL Server 2000
Administracja i programowanie pod Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 3 Podstawy programowania w T-SQL Zmienne i operatory Instrukcje sterujące Komunikaty Format daty
Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.
Marek Robak Wprowadzenie do języka SQL na przykładzie baz SQLite Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi. Tworzenie tabeli Pierwsza tabela W relacyjnych bazach danych jedna
040 STRUCTURED QUERY LANGUAGE. Prof. dr hab. Marek Wisła
040 STRUCTURED QUERY LANGUAGE Prof. dr hab. Marek Wisła SQL strukturalny język zapytań SQL (Structured Query Language) strukturalny język zapytań używany do tworzenia, modyfikowania relacyjnych baz danych
Szkolenie Oracle SQL podstawy. Terminy. 15 17 lutego 2010 First Minute! 1100zł!
Szkolenie Oracle SQL podstawy Terminy 15 17 lutego 2010 First Minute! 1100zł! Opis szkolenia Baza danych Oracle od dawna cieszy się zasłużona sławą wśród informatyków. Jej wydajność, szybkość działania
Pawel@Kasprowski.pl Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl
Bazy danych Podstawy języka SQL Dr inż. Paweł Kasprowski pawel@kasprowski.pl Plan wykładu Relacyjne bazy danych Język SQL Zapytania SQL (polecenie select) Bezpieczeństwo danych Integralność danych Współbieżność
Transakcje inf. podstawowe
Transakcje inf. podstawowe! Rozpoczęcie transakcji " Explicit " Autocommit! Zakończenie transakcji " COMMIT " ROLLBACK " Implicit BEGIN TRANSACTION UPDATE savings... UPDATE checking... COMMIT TRANSACTION
PROJEKTOWANIE BAZ DANYCH
Uniwersytet Przyrodniczy w Poznaniu - Instytut Inżynierii Biosystemów - Zakład Informatyki Stosowanej PROJEKTOWANIE BAZ DANYCH Ćwiczenia T-SQL - SQL Server 2008 / 2012 Prowadzący: dr inż. Radosław J. Kozłowski
na MS SQLServer 2005 i 2008
Wprowadzenie do programowania na MS SQLServer 2005 i 2008 Kalen Delaney, Inside MS SQL Server 2000, Wydawnictwo RM, 2001 Kalen Delaney, Inside MS SQL Server 2005, The storage engine, Microsoft Press, 2007
Wyzwalacze (triggery) Przykład
Wyzwalacze (triggery) Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie. W poniższym przykładzie definiujemy tablicę, a następnie trigger związany
Obowiązuje od wersji
Obowiązuje od wersji 8.30.0 1. Wstęp czym są gniazda rozszerzeń?... 2 2. Edytor gniazd rozszerzeń - informacje podstawowe... 3 3. Dostępne rodzaje funkcji w gniazdach rozszerzeń... 6 3.1 Procedura SQL...
Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.
Rodzaje triggerów Triggery DML na tabelach INSERT, UPDATE, DELETE Triggery na widokach INSTEAD OF Triggery DDL CREATE, ALTER, DROP Triggery na bazie danych SERVERERROR, LOGON, LOGOFF, STARTUP, SHUTDOWN
DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];
Braki w SQL obsługi zdarzeń i sytuacji wyjątkowych funkcji i procedur użytkownika definiowania złożonych ograniczeń integralnościowych Proceduralny SQL Transact- SQL używany przez Microsoft SQL Server
SQL :: Data Definition Language
SQL :: Data Definition Language 1. Zaproponuj wydajną strukturę danych tabela) do przechowywania macierzy o dowolnych wymiarach w bazie danych. Propozycja struktury powinna zostać zapisana z wykorzystaniem
Podstawy języka SQL. standardy SQL formułowanie zapytań operacje na strukturach danych manipulowanie danymi. Bazy danych s.5-1
Podstawy języka SQL standardy SQL formułowanie zapytań operacje na strukturach danych manipulowanie danymi Bazy danych s.5-1 Język SQL SQL (ang. Structured Query Language, strukturalny język zapytań) język
Autor: Joanna Karwowska
Autor: Joanna Karwowska Klucz podstawowy PRIMARY KEY Klucz kandydujący UNIQUE Klucz alternatywny - klucze kandydujące, które nie zostały wybrane na klucz podstawowy Klucz obcy - REFERENCES Tworząc tabelę,
Obsługa błędów w SQL i transakcje. Obsługa błędów w SQL
Obsługa błędów w SQL i transakcje Zacznijmy od najprostszego przykładu: CREATE PROCEDURE podziel1 Obsługa błędów w SQL Powyższa procedura w większości przypadków zadziała prawidłowo, lecz na przykład poniższe
Język SQL, zajęcia nr 2
Język SQL, zajęcia nr 2 SQL - Structured Query Language Strukturalny język zapytań Login: student Hasło: stmeil14 Baza danych: st https://194.29.155.15/phpmyadmin/index.php Andrzej Grzebielec Funkcja agregująca
UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');
polecenie UPDATE służy do aktualizacji zawartości wierszy tabel lub perspektyw składnia: UPDATE { } SET { { = DEFAULT NULL}, {
Język SQL podstawy zapytań
Język SQL podstawy zapytań 1 Plan prezentacji 1. Krótka historia języka SQL 2. Cechy języka SQL 3. Przykładowa baza danych 4. Podstawy zapytań - operacje na modelu relacyjnym 5. Polecenie SELECT zapytania
1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3
cur.executescript(""" DROP TABLE IF EXISTS uczen; CREATE TABLE IF NOT EXISTS uczen ( Uniwersytet Technologiczno-Przyrodniczy im. J.J. Śniadeckich w Bydgoszczy Instrukcja do ćwiczeń laboratoryjnych Przedmiot
Ref. 7 - Język SQL - polecenia DDL i DML
Ref. 7 - Język SQL - polecenia DDL i DML Wprowadzenie do języka SQL. Polecenia generujące strukturę bazy danych: CREATE, ALTER i DROP. Polecenia: wprowadzające dane do bazy - INSERT, modyfikujące zawartość
Grupowanie i funkcje agregujące
Grupowanie i funkcje agregujące Zadanie 1. Stwórz odpowiednią tabelę Test_agr i wprowadź odpowiednie rekordy tak, aby wynik zapytania SELECT AVG(kol) avg_all, AVG(DISTINCT kol) avg_dist, COUNT(*) count_gw,
Elementy. języka SQL
Elementy języka SQL SQL SQL - Structured Query Language język czwartej generacji (4GL), opracowany w latach 70-tych przez IBM strukturalny język zapytań, przeznaczony do definiowania, wyszukiwania i administrowania
Programowanie po stronie serwera w SZBD. Robert A. Kłopotek Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW
Programowanie po stronie serwera w SZBD Robert A. Kłopotek r.klopotek@uksw.edu.pl Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW Programowanie SZBD (DBMS) Procedury serwera Procedury składowane
SQL w praktyce. Miłej i owocnej nauki!!!
SQL w praktyce Niniejsza praca objęta jest prawami autorskimi. Nielegalne jest kopiowanie żadnej częsci tej pracy w żadnej postaci. Niezgodne z prawem tym bardziej jest udostępnianie innym tej pracy odpłatnie
77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.
77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego. Przy modelowaniu bazy danych możemy wyróżnić następujące typy połączeń relacyjnych: jeden do wielu, jeden do jednego, wiele
Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8
Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8 Bazowy skrypt PHP do ćwiczeń z bazą MySQL: Utwórz skrypt o nazwie cw7.php zawierający następującą treść (uzupełniając go o właściwą nazwę uŝytkownika
1 DML - zapytania, część II Grupowanie Operatory zbiorowe DML - modyfikacja 7. 3 DCL - sterowanie danymi 9.
Plan wykładu Spis treści 1 DML - zapytania, część II 1 1.1 Grupowanie................................... 1 1.2 Operatory zbiorowe............................... 5 2 DML - modyfikacja 7 3 DCL - sterowanie
Wstęp do SQL. copyright: KGiIS WGGiOŚ AGH
Wstęp do SQL SQL (Structured Query Language) strukturalny język zapytań używany do tworzenia, modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych. Język SQL jest językiem deklaratywnym.
Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT
Studia podyplomowe Inżynieria oprogramowania współfinansowane przez Unię Europejska w ramach Europejskiego Funduszu Społecznego Projekt Studia podyplomowe z zakresu wytwarzania oprogramowania oraz zarządzania
P o d s t a w y j ę z y k a S Q L
P o d s t a w y j ę z y k a S Q L Adam Cakudis IFP UAM Użytkownicy System informatyczny Aplikacja Aplikacja Aplikacja System bazy danych System zarządzania baz ą danych Schemat Baza danych K o n c e p
Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.
Prezentacja Danych i Multimedia II r Socjologia Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL. Celem ćwiczeń jest poznanie zasad tworzenia baz danych i zastosowania komend SQL. Ćwiczenie I. Logowanie
I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE
Wykład 9 Implementacja języka SQL w systemach baz danych Oracle manipulowanie danymi (DML), tworzenie, modyfikowanie i usuwanie obiektów bazy danych: tabel i perspektyw, więzów integralności, komentarzy
Język PL/SQL Procedury i funkcje składowane
Język PL/SQL Procedury i funkcje składowane Podprogramy, procedury i funkcje składowane, typy argumentów, wywoływanie procedur i funkcji, poziomy czystości funkcji 1 Podprogramy Procedury (wykonują określone
Widok Connections po utworzeniu połączenia. Obszar roboczy
Środowisko pracy 1. Baza danych: Oracle 12c - Serwer ELARA - Konta studenckie, dostęp także spoza uczelni - Konfiguracja: https://e.piotrowska.po.opole.pl/index.php?option=conf 2. Środowisko: SQL Developer
Bazy danych Język SQL część 2 Wykład dla studentów matem
Bazy danych Język SQL część 2 Wykład dla studentów matematyki 21 marca 2015 Zapytania na kilku tabelach Czasem poszukiwana informacja znajduje się w kilku tabelach. Aby zapytanie dotyczyło kilku tabel,
Bazy Danych i Usługi Sieciowe
Bazy Danych i Usługi Sieciowe Ćwiczenia I Paweł Daniluk Wydział Fizyki Jesień 2011 P. Daniluk (Wydział Fizyki) BDiUS ćw. I Jesień 2011 1 / 15 Strona wykładu http://bioexploratorium.pl/wiki/ Bazy_Danych_i_Usługi_Sieciowe_-_2011z
W SQL Serwerze 2008 wprowadzono parametry tablicowe (Table Valued Parameters - TVP).
Procedury składowane c.d. Parametry tablicowe w Transact-SQL. W SQL Serwerze 2008 wprowadzono parametry tablicowe (Table Valued Parameters - TVP). Zadanie 1. Proszę napisad procedurę składowaną, która
E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze
Funkcje użytkownika Tworzenie funkcji Usuwanie funkcji Procedury składowane Tworzenie procedur składowanych Usuwanie procedur składowanych Wyzwalacze Wyzwalacze a ograniczenia i procedury składowane Tworzenie
Bazy danych 7. SQL podstawy
Bazy danych 7. SQL podstawy P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ semestr letni 2005/06 Structured Query Language Używane standardy: SQL92 SQL99 SQL:2003 Żaden dostawca nie jest w pełni zgodny
Bazy danych Ćwiczenia projektowe
Bazy danych Ćwiczenia projektowe Przygotował: Piotr Hajder Katedra Informatyki Stosowanej i Modelowania Wydział Inżynierii Metali i Informatyki Przemysłowej, AGH Agenda 01. Powtórka 02. Interfejs CRUD
Bazy danych i usługi sieciowe
Bazy danych i usługi sieciowe Ćwiczenia I Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk (Wydział Fizyki) BDiUS ćw. I Jesień 2014 1 / 16 Strona wykładu http://bioexploratorium.pl/wiki/ Bazy_danych_i_usługi_sieciowe_-_2014z
w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze
w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze Cechy bloków nazwanych: w postaci skompilowanej trwale przechowywane na serwerze wraz z danymi wykonywane na żądanie użytkownika lub w