PROJEKTOWANIE BAZ DANYCH
|
|
- Piotr Rutkowski
- 9 lat temu
- Przeglądów:
Transkrypt
1 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 rjk@up.poznan.pl www:
2 Logowanie do serwera baz danych SQL Server 2008/ Otwieramy aplikację SQL Management Studio. 2. Wybieramy typ serwera: Database Engine 3. Wpisujemy adres serwera: XXX 4. Wybieramy typ uwierzytelniania: SQL Server Authentication 5. Wpisujemy nazwę użytkownika oraz hasło: student/student 2
3 Tworzenie i usuwanie bazy danych (niezbędne prawa administratora) Polecenie CREATE DATABASE służy do utworzenie nowej bazy danych. CREATE DATABASE student; Bazę danych możemy usunąć wydając polecenie: DROP DATABASE student; Bazę można też utworzyć podając parametry dotyczące pliku bazy: CREATE DATABASE Studenci ON ( NAME = Studenci_dat, FILENAME = 'c:\studenci.mdf', SIZE = 10MB, MAXSIZE = 50MB, FILEGROWTH = 5MB ) LOG ON ( NAME = 'studenci_log', FILENAME = 'c:\studenci.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) 3
4 Wyświetlanie dostępnych dla danego użytkownika baz danych SELECT * FROM sys.databases; EXEC sp_msforeachdb 'PRINT ''?'''; 4
5 Podłączenie do istniejącej bazy Aby możliwe było zarządzanie tabelami (tworzenie, edycja, aktualizacja danych itp.) musimy najpierw podłączyć się do wybranej (z dostępnych dla danego użytkownika) bazy danych. USE student; 5
6 Przeglądanie dostępnych tabel SELECT * FROM student.information_schema.tables; SELECT * FROM master.information_schema.tables; SELECT * FROM student..sysobjects WHERE xtype = 'U'; 6
7 Tworzenie tabel CREATE TABLE CREATE TABLE table_name ( column_name data_type [ ( size ) ] [ NULL NOT NULL ] [, column2_name data_type [ ( size ) ] [ NULL NOT NULL ] [,... ] ] [, CONSTRAINT multifieldindex [,... ] ] ) table_name: Parametr definiujący nazwę tworzonej tabeli. column_name: Parametry definiujące nazwy dodawanych kolumn. data_type: Parametr defiuniujący typ danych dla danej kolumny NULL NOT NULL Ograniczenie określające czy dane pole musi bądź nie zawierać jakąś wartość CONSTRAINT multifieldindex Definiuje dalsze ograniczenia związane z danymi umieszczonymi w tabeli. 7
8 Tworzenie tabel CREATE TABLE Projektowanie baz danych CREATE TABLE klient ( imie VARCHAR(35), nazwisko VARCHAR(35), telefon DECIMAL(10,0), CHAR(30), kid INT NOT NULL IDENTITY(1,1), PRIMARY KEY (kid) ); Proszę nadać tabeli nazwę składającą się z dwóch członów - słowa klient i po 'podkreślniku' inicjałów autora, autorów np. dla Jana Kowalskiego klient_jk parametr definiujący autonumerację Usuwanie tabel - DROP TABLE DROP TABLE klient; klauzulę dla klucza podstawowego można umieścić także bezpośrednio za nazwą kolumny. 8
9 Tworzenie tabel tymczasowych #nazwa_tabeli Bardzo przydatna funkcja do tworzenia tablic aktywnych tylko w czasie aktualnej sesji. Po zakończeniu sesji tablica zostaje usunięta. CREATE TABLE #klient_tymczasowy ( kid INT, nazwisko VARCHAR(35), imie VARCHAR(35) ); 9
10 Tworzenie kopii tabel SELECT... INTO Można do nowej tablicy przekopiować wszystkie kolumny: SELECT * INTO nowa_tablica [IN baza_zewnetrzna] FROM stara_tablica lub tylko wybrane kolumny: SELECT kolumna1, kolumna2 INTO nowa_tablica [IN baza_zwenętrzna] FROM stara_tablica Przykład: SELECT * INTO klient_staly FROM klient; 10
11 Podgląd struktury tabel SELECT * FROM student.information_schema.columns WHERE TABLE_NAME = 'klient'; exec sp_columns 'klient' Pozyskanie nazwa kolumny - klucza podstawowego: SELECT column_name FROM information_schema.key_column_usage WHERE TABLE_NAME = 'klient' 11
12 Modyfikacja tabel - ALTER TABLE, procedury Strukturę tabel już istniejących (i wypełnionych danymi) można modyfikować. Możemy dodawać lub usuwać kolumny, zmienić ich definicję, zmienić nazwę tabeli itp. ALTER TABLE table { ADD { column_name data_type [ ( size ) ] [ DEFAULT value ] { [ NULL NOT NULL ] [ { PRIMARY KEY UNIQUE } ] } { [ CONSTRAINT constraint_name ] } } ALTER COLUMN column_name { data_type [ ( size ) ] [ ( precision [, scale ] ) ] [ NULL NOT NULL ] } DROP { COLUMN column_name [ CONSTRAINT ] constraint_name } } 12
13 Modyfikacja tabel - ALTER TABLE, procedury Dodanie 1 kolumny ALTER TABLE klient ADD wiek INT; Dodanie kilku kolumn ALTER TABLE klient ADD wysokosc INT, koczu VARCHAR(35); Modyfikacja parametrów istniejącej kolumny / kolumn ALTER TABLE klient ALTER COLUMN koczu INT; zmiana typu danych dla kolumny koczu z VARCHAR na INT 13
14 Modyfikacja tabel - ALTER TABLE, procedury Usunięcie kolumny ALTER TABLE klienci DROP COLUMN wiek, COLUMN wzrost, COLUMN waga, COLUMN koczu; Zmiana nazwy kolumny EXEC sp_rename 'klient.wysokosc', 'wzrost', 'COLUMN'; Zmiana nazwy tabeli EXEC sp_rename 'klient', 'klienci'; Brak możliwości zmiany pozycji kolumny zmieniamy pozostawiając swoje inicjały np. klienci_jk 14
15 Ograniczenia/właściwości kolumn - klauzula CONSTRAINT CONSTRAINT można używać w połączeniu z ALTER TABLE (lub CREATE TABLE) do dodawania, wyrzucania, nakładania oraz obchodzenia ograniczeń dotyczących istniejącej tabeli. CONSTRAINT constraint_name { PRIMARY KEY UNIQUE NOT NULL REFERENCES foreign_table [ ( foreign_field1, foreign_field2 ) ] } CONSTRAINT constraint_name { PRIMARY KEY ( primary1 [, primary2 [,... ] ] ) UNIQUE ( unique1 [, unique2 [,... ] ] ) NOT NULL ( notnull1 [, notnull2 [,... ] ] ) FOREIGN KEY ( ref1 [, ref2 [,... ] ] ) REFERENCES foreign_table [ ( foreign_field1 [, foreign_field2 [,... ] ] ) ] } 15
16 Ograniczenia/właściwości kolumn - klauzula CONSTRAINT W poniższym przykładzie unikalne ograniczenie CONSTRAINT jest dodane do kolumny 'nazwisko' z tabeli 'klienci': ALTER TABLE klienci ADD CONSTRAINT nazwisko_unikalne UNIQUE (nazwisko) Można łatwo wyrzucać ograniczenia z tabeli, używając wyrażenia: DROP CONSTRAINT. ALTER TABLE klienci DROP CONSTRAINT nazwisko_unikalne; 16
17 ZADANIA (1) 1. Utwórz następujące tabele (sam zdecyduj o typach kolumn i nazwach itp.): Tabela PRACOWNICY (dodaj na końcu nazwy tabeli swoje inicjały) z następującymi kolumnami: numer pracownika, nazwisko, imię, tytuł/stopień naukowy, telefon, , płaca, data_zatrudnienia, numer etatu, numer zakładu. Tabela ETATY (dodaj na końcu nazwy tabeli swoje inicjały) z następującymi kolumnami: numer etatu, nazwa etatu, pensum. Tabela ZAKŁADY (dodaj na końcu nazwy tabeli swoje inicjały) z następującymi kolumnami: numer zakładu, nazwa, adres, numer kierownika (odpowiada numerowi pracownika z tabeli PRACOWNICY). 2. Wprowadź ograniczenie pozwalające na zachowanie unikalnych wartości po połączeniu kolumn nazwisko i imię z tabeli PRACOWNICY.
18 Dodawanie rekordów - INSERT INTO Pojedynczy rekord: INSERT INTO target [(field1[, field2[,...]])] VALUES (value1[, value2 [,...]) Kilka rekordów: INSERT INTO target [IN externaldatabase] [(field1[, field2[,...]] SELECT [source.] field1[, field2[,...] FROM tableexpression INSERT INTO klienci VALUES ( 'Jan', 'Kowalski', , 'jkowal@o2.pl'); 18
19 Dodawanie rekordów - INSERT INTO Przy wstawianiu nowych rekordów należy pamiętać o tym, aby podać liczbę danych równą liczbie pól w tabeli. W przeciwnym wypadku otrzymamy komunikat o błędzie: INSERT INTO klienci VALUES ('Jan'); Column name or number of supplied values does not match table definition. Podobnie stanie się, jeśli będziemy próbowali wstawić więcej wartości niż jest pól w tabeli. Dodatkowo należy pamiętać o kolejności podawania danych - wartości należy wprowadzać zgodnie z kolejnością pól. Jeśli chcemy wypełnić tylko niektóre z kolumn, możemy zadeklarować pola, które mają być wypełnione wartościami. Robimy to tak jak poniżej: INSERT INTO klienci (imie, nazwisko) VALUES ('Marek', 'Nowak'); (1 row(s) affected) 19
20 Wstawianie rekordów - REPLACE INTO W mysql instrukcja ta zachowywała się podobnie jak INSERT z tą różnicą, że pozwalała podmienić rekord z unikalnym kluczem podstawowym na nowy. W T-SQL brak instrukcji REPLACE INTO. Można ją zastąpić stosując UPDATE po wcześniejszym sprawdzeniu czy w bazie istnieje rekord z unikalnym kluczem prywatnym, którego dane chcemy zmienić. Przykładowy kod: IF EXISTS (SELECT * FROM [tabela] WHERE Id = X) UPDATE [tabela] SET... ELSE INSERT INTO [tabela] 20
21 ZADANIA (2) 1. Wypełnij utworzone na poprzednich zajęciach tabele PRACOWNICY, ETATY, ZAKŁADY następującymi danymi: Tabela PRACOWNICY pid nazwisko imie tytul/stopien telefon płaca zatrudniony eid zid 1 Wazny Feliks prof. dr hab brak danych Janke Anna dr inz ajanke@wz.pl Wolny Marian prof. dr hab mwolny@wz.pl Tylman Jan mgr inz jtylman@wz.pl Kopytko Witold prof. dr hab wkopytko@wz.pl Malwa Ryszard prof. dr hab rmalwa@wz.pl Remis Jolanta prof. dr hab jremis@wz.pl Mikrus Witold mgr inz mwitold@wz.pl Nowy Marian dr inz mnowy@wz.pl Sytke Adrian mgr inz asytke@wz.pl Rym Agnieszka dr inż arym@wz.pl Tom Marcin prof. dr hab mtom@wz.pl Tabela ZAKŁADY zid nazwa adres kierownik 1 Informatyki Stosowanej ul. Prosta Cybernetyki ul. Prosta Maszynoznawstwa ul. Polna Maszyn i Urzadzen Rolniczych ul. Warstwowa Obslugi Technicznej ul. Polna Roslin Straczkowych ul. Warstwowa Tabela ETATY eid nazwa pensum 1 PROFESOR ADIUNKT ASYSTENT DOKTORANT 90
22 Wybieranie rekordów - SELECT Wszystkich rekordów z tablicy: SELECT * FROM klienci; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Jacek Nowak (2 row(s) affected) 22
23 Wybieranie rekordów - SELECT Wszystkich rekordów z wybranych kolumn: SELECT imie, FROM klienci; imie Jan jkowal@o2.pl Jacek (2 row(s) affected) 23
24 Wybieranie rekordów - operator WHERE Wszystkich rekordów z tablicy dla których pole imię ma wartość 'Jan': SELECT * FROM klienci WHERE imie = 'Jan'; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl (1 row(s) affected) Wszystkich rekordów z wybranych kolumn dla których pole imię ma wartość 'Jan': SELECT imie, nazwisko FROM klienci WHERE imie = 'Jan'; imie nazwisko Jan Kowalski (1 row(s) affected) 24
25 Wybieranie rekordów - operator WHERE - ograniczenia = równe <>,!= różne < mniejsze > większe <= mniejsze lub równe >= większe lub równe SELECT * FROM klienci WHERE kid < 2; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl (1 row(s) affected) 25
26 Wybieranie rekordów - operator WHERE + LIKE SELECT * FROM klienci WHERE imie LIKE '%Ja%'; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Jacek Nowak (2 row(s) affected) Znak % oznacza dowolny ciąg znaków SELECT * FROM klienci WHERE nazwisko LIKE '%wal%'; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl (1 row(s) affected) 26
27 Wybieranie rekordów - operator WHERE + LIKE SELECT * FROM klienci WHERE imie LIKE '_an'; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl (1 row(s) affected) Znak _ oznacza dokładnie jeden znak SELECT * FROM klienci WHERE nazwisko LIKE '_owa%'; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Jacek Nowak (2 row(s) affected) 27
28 Indeksy - mechanizm wspomagający wyszukiwanie Jedynym powodem tworzenia indeksów jest poprawa wydajności bazy danych. Indeksy w bazie danych pełnią funkcję zbliżoną do skorowidzów w książce. Zamiast szukać jakiegoś terminu w całej książce, znacznie szybciej i łatwiej jest znaleźć go w posortowanym alfabetycznie skorowidzu. Składnia instrukcji tworzącej indeks jest bardzo prosta: CREATE INDEX klienci_indeks ON klienci (nazwisko); Indeks można także utworzyć przy tworzeniu tablicy podając słowo kluczowe INDEX pod koniec definicji CREATE TABLE. Tak utworzony indeks możemy wykorzystać w zapytaniu: SELECT * FROM klienci WHERE nazwisko = 'Kowalski'; 28
29 ZADANIA (3) Wszystkie zadania należy wykonać na własnych tabelach Pracownicy, Zakłady i Etaty 1. Wyświetl wszystkie dane z tabeli pracownicy. 2. Wyświetl tylko imię, nazwisko oraz tytuł naukowy wszystkich pracowników. 3. Wyświetl pracowników począwszy od pracownika z numerem Pokaż wszystkich pracowników którzy mają imię rozpoczynające się od litery J. 5. Pokaż zakłady, które swoją siedzibę mają na ulicy Prostej. 6. Pokaż pracowników, których płaca przekracza 2 tyś złotych. 7. Pokaż pracowników, którzy mają numer telefonu zawierający liczbę Pokaż wszystkich pracowników na stanowisku adiunkta. 9. Wyświetl etaty których pensum jest różne od 240 godzin.
30 Wybieranie rekordów - operator konkatenacji + Operator konkatenacji + pozwala na połączenie ze sobą danych z kilku kolumn w jeden ciąg. Jest to szczególnie przydatne w tabelach, które przechowują dane personalne. SELECT imie + ' ' + nazwisko AS klient, FROM klienci; klient Jan Kowalski jkowal@o2.pl Jacek Nowak (2 row(s) affected) 30
31 Usuwanie rekordów - DELETE Wszystkich rekordów z tablicy: DELETE FROM klienci; Wybranych rekordów z tablicy dla których pole imię ma wartość 'Jacek': DELETE FROM klienci WHERE imie = 'Jacek'; (1 row(s) affected) 31
32 Modyfikacje danych - UPDATE UPDATE klienci SET telefon = WHERE imie = 'Jan'; (1 row(s) affected) UPDATE klienci SET telefon = , = 'jkowal@o2.pl' WHERE imie = 'Jan'; (1 row(s) affected) UPDATE klienci SET telefon = , = 'jkowal@o2.pl' WHERE imie = 'Jan' AND nazwisko='kowalski'; (1 row(s) affected) 32
33 Selekcja rekordów - wyrażenia logiczne AND, OR, NOT Przygotowanie tabeli - wprowadzany klika dodatkowych rekordów INSERT INTO klienci VALUES ('Jacek', 'Nowak', , 'jnowak@o2.pl'); INSERT INTO klienci VALUES ( 'Marek', 'Wielki', , 'mwielki@o2.pl'); Tabela klienci zawiera teraz następujące rekordy: imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Jacek Nowak jnowak@o2.pl 3 Marek Wielki mwielki@o2.pl
34 Selekcja rekordów - wyrażenia logiczne AND, OR, NOT AND SELECT * FROM klienci WHERE imie = 'Marek' AND nazwisko = 'Wielki'; imie nazwisko telefon kid Marek Wielki mwielki@o2.pl (1 row(s) affected) Operacja ta wyświetli wszystkie rekordy zawierające w polu imie wartość "Marek" i (AND) w polu nazwisko wartość "Wielki". 34
35 Selekcja rekordów - wyrażenia logiczne AND, OR, NOT OR SELECT * FROM klienci WHERE imie = 'Marek' OR imie = 'Jacek'; imie nazwisko telefon kid Jacek Nowak jnowak@o2.pl 3 Marek Wielki mwielki@o2.pl (2 row(s) affected) 35
36 Selekcja rekordów - wyrażenia logiczne AND, OR, NOT NOT SELECT * FROM klienci WHERE NOT telefon = ; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Marek Wielki mwielki@o2.pl (2 row(s) affected) 36
37 ZADANIA (4) Wszystkie zadania należy wykonać na własnych tabelach Pracownicy, Zakłady i Etaty 1. Połącz imiona i nazwiska pracowników w jeden łańcuch oraz wyświetl pracowników, numer telefonu oraz Uaktualnij dla pracownika Ważny Feliks - fwazny@wz.pl. 3. Wyświetl pracowników, którzy mają na imię Witold i nazwisko Mikrus. 4. Wyświetl pracowników, którzy mają na imię Witold lub nazwisko Mikrus. 5. Wyświetl pracowników z imieniem Witold oraz Ryszard. 6. Wyświetl zakłady, które swoją siedzibę mają na ulicy Prostej oraz Polnej. 7. Wyświetl pracowników, którzy nie są profesorami. 8. Wyświetl pracowników zakładu Informatyki Stosowanej lub Obsługi Technicznej. 9. Wyświetl pracowników których pensja nie jest równa 2250 i pracują w zakładzie Maszynoznawstwa.
38 Selekcja rekordów - grupowanie tych samych wyrażeń logicznych - IN Zamiast podawać kilku wyrażeń logicznych: SELECT * FROM klienci WHERE kid=1 OR kid=2 OR kid=3; Można posłużyć się słowem kluczowym IN: SELECT * FROM klienci WHERE kid IN (1,2,3); imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Jacek Nowak jnowak@o2.pl
39 Selekcja rekordów - określenie zakresu - BETWEEN Zamiast stosowania operatorów : SELECT * FROM klienci WHERE kid >= 2 AND kid <= 4; Można wykorzystać możliwości BETWEEN: SELECT * FROM klienci WHERE kid BETWEEN 2 AND 4; imie nazwisko telefon kid Jacek Nowak jnowak@o2.pl 3 Marek Wielki mwielki@o2.pl
40 Selekcja rekordów - pomijanie duplikatów - DISTINCT Dodamy sobie do bazy drugą osobę z imieniem Jan. INSERT INTO klienci VALUES ('Jan', 'Malwa', , 'jmalwa@o2.pl'); SELECT imie FROM klienci; SELECT DISTINCT imie FROM klienci; imie Jan Jacek Marek Pokazuje tylko unikalne rekordy imie Jan Jacek Marek Jan
41 Sortowanie rekordów ORDER BY SELECT * FROM klienci ORDER BY imie; imie nazwisko telefon kid Jacek Nowak jnowak@o2.pl 3 Jan Kowalski jkowal@o2.pl 1 Jan Malwa jmalwa@o2.pl 5 Marek Wielki mwielki@o2.pl SELECT * FROM klienci ORDER BY imie, telefon; imie nazwisko telefon kid Jacek Nowak jnowak@o2.pl 3 Jan Kowalski jkowal@o2.pl 1 Jan Malwa jmalwa@o2.pl 5 Marek Wielki mwielki@o2.pl
42 Sortowanie danych ORDER BY - ASC A->Z sortowanie rosnące SELECT * FROM klienci ORDER BY nazwisko ASC; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Jan Malwa jmalwa@o2.pl 5 Jacek Nowak jnowak@o2.pl 3 Marek Wielki mwielki@o2.pl
43 Sortowanie danych ORDER BY - DESC Z->A sortowanie malejące SELECT * FROM klienci ORDER BY nazwisko DESC; imie nazwisko telefon kid Marek Wielki mwielki@o2.pl 4 Jacek Nowak jnowak@o2.pl 3 Jan Malwa jmalwa@o2.pl 5 Jan Kowalski jkowal@o2.pl
44 Ograniczanie liczy rekordów zwróconych przez zapytanie - TOP W mysql do wykonania tego zadania wystarczyło wykorzystać komendę LIMIT. Niestety brak jej na platformie SQL Server. Istnieje jednak możliwość uzyskania podobnych jednak ograniczonych efektów z wykorzystaniem słowa kluczowego TOP. Poniższe zapytanie zwraca dokładnie dwa pierwsze rekordy: SELECT TOP 2 * FROM klienci; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Jacek Nowak jnowak@o2.pl Niestety brak możliwości określenia innego rekordu startowego, od którego chcemy rozpocząć ograniczanie liczby wierszy. 44
45 Ograniczanie liczy rekordów zwróconych przez zapytanie - TOP Jeżeli chcemy pobrać dwa rekordy rozpoczynając od drugiego rekordu możemy posłużyć dość złożoną sztuczką: mysql> SELECT * FROM klienci LIMIT (1,2) select * from ( select top 2 * from ( select top 3 * from klienci order by kid asc ) as A order by kid desc ) as B order by kid asc WITH temp AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY kid) AS wiersz FROM klienci) SELECT * FROM temp WHERE wiersz BETWEEN 2 AND 3 45
46 Połączenie funkcji - Sortowanie + limitowanie SELECT TOP 2 * FROM klienci ORDER BY nazwisko ASC; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Jan Malwa jmalwa@o2.pl
47 Funkcje obsługi łańcuchów Określenie liczby znaków w komórce - LEN() SELECT LEN(nazwisko) FROM klienci; No column name
48 ZADANIA (5) Wszystkie zadania należy wykonać na własnych tabelach Pracownicy, Zakłady i Etaty 1. Wykorzystując funkcję grupującą wyświetl pracowników z zakładu 2,4 i Wyświetl pracowników, których płaca mieści się w przedziale od 1 do 2 tyś złotych. 3. Wyświetl listę adresową zakładów, pomiń powtarzające się dane. 4. Posortuj pracowników rosnąco i malejąco względem płacy. 5. Wyświetl tylko 3 pierwsze zakłady. 6. Wyświetl 2 pracowników począwszy od pracownika z numerem Oblicz liczbę znaków dla danych o pracownikach zapisanych w kolumnie nazwisko. 8. Wyświetl listę pracowników (posortowaną rosnąco wg nazwiska) wprowadzając następujące ograniczenia: - maksymalna liczba rekordów 4, - maksymalna płaca pracownika 2 tyś złotych, - miejsce pracy: zakład mieszczący się na ulicy Prostej, - zatrudniony po 1980 roku.
49 Filtrowanie, wyszukiwanie danych spełniających kryteria zadanego wzorca Język T-SQL nie oferuje natywnej obsługi wyrażeń regularnych. Jedynie możemy symulować ich możliwości poprzez zastosowanie LIKE lub PATINDEX. Niestety możliwości ich są bardzo ograniczone. SELECT nazwisko FROM klienci WHERE nazwisko LIKE '%owa%'; nazwisko Kowalski Nowak rows in set SELECT nazwisko FROM klienci WHERE PATINDEX('%owa%', nazwisko) > 0; 49
50 Filtrowanie, wyszukiwanie danych spełniających kryteria zadanego wzorca Łańcuch zawiera dwa różne znaki: SELECT nazwisko FROM klienci WHERE nazwisko LIKE '%[ok]%'; nazwisko Kowalski Nowak Wielki
51 Filtrowanie, wyszukiwanie danych spełniających kryteria zadanego wzorca Łańcuch rozpoczyna się od wybranego znaku: SELECT imie FROM klienci WHERE imie LIKE 'J%' Collate Polish_CS_AS; imie Jan Jacek Jan
52 Filtrowanie, wyszukiwanie danych spełniających kryteria zadanego wzorca Łańcuch zaczyna się od wskazanego znaku następnie zawiera dokładnie jeden znak i kończy się wskazanym znakiem: SELECT imie FROM klienci WHERE imie LIKE 'J_n' Collate Polish_CS_AS; imie Jan Jan
53 Filtrowanie, wyszukiwanie danych spełniających kryteria zadanego wzorca Łańcuch nie zawiera wskazanego znaku: SELECT imie FROM klienci WHERE imie NOT LIKE '%j%'; imie Marek
54 ZADANIA (6) Wszystkie zadania należy wykonać na własnych tabelach Pracownicy, Zakłady i Etaty 1. Wyświetl pracowników, których nazwisko zawiera znaki 'a' lub 'i'. 2. Pokaż wszystkich pracowników których imię rozpoczynające się od litery 'M' a kończy na 'n'. 3. Wyświetl pracowników których numer telefony ma przynajmniej dwie cyfry '5'. 4. Wyświetl zakłady których nazwa ma więcej niż jedną spację. 5. Sprawdź jakie zakłady spełniają wymagania filtra, który dopuszcza wykorzystanie tylko znaków (małych i dużych) oraz cyfr. 6. Zaproponuj wyrażenie regularne sprawdzające poprawność wprowadzenia daty w tabeli z pracownikami, zakładając że elementami oddzielającymi mogą być tylko myślnik, kropka lub dwukropek. 7. Zaproponuj filtr dla kolumny z płacami pracowników. 8. Korzystając z przykładu praktycznego do sprawdzania poprawności maili sprawdź czy w tabeli pracownicy wszystkie maile wprowadzone są poprawnie.
55 Łączenie tabel (relacje) Na zajęciach z łączenia tabel (tworzenia relacji) wykorzystamy następujące tablice: wcześniej utworzoną tabelę z klientami np. klienci_jk, imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Jacek Nowak jnowak@o2.pl 3 Marek Wielki mwielki@o2.pl 4 Jan Malwa jmalwa@o2.pl utworzymy nową tabelę zamówień np. zamowienia_jk, nową tabelę produktów np. produkty_jk, oraz tablicę pośrednią pomiędzy zamówieniami i produktami np. zam_prod_jk. 57
56 Łączenie tabel (relacje) 58
57 Łączenie tabel (relacje) - utworzenie tabel roboczych CREATE TABLE zamowienia ( zid INT NOT NULL IDENTITY(1,1), kid INT, koszt DECIMAL(6,2), data DATE, PRIMARY KEY (zid) ); INSERT INTO zamowienia VALUES (5, 64.98, ' '); INSERT INTO zamowienia VALUES (5, 34.98, ' '); INSERT INTO zamowienia VALUES (1, 39.99, ' '); INSERT INTO zamowienia VALUES (3, 14.97, ' '); INSERT INTO zamowienia VALUES (5, 24.99, ' '); INSERT INTO zamowienia VALUES (4, 79.98, ' '); INSERT INTO zamowienia VALUES (1, 24.95, ' '); 59
58 Łączenie tabel (relacje) - utworzenie tabel roboczych CREATE TABLE produkty ( pid INT NOT NULL, cena DECIMAL(6,2), nazwa CHAR(20), PRIMARY KEY (pid) ); INSERT INTO produkty VALUES (1, 70.50, 'myszka'); INSERT INTO produkty VALUES (2, 2.90, 'szmatka'); INSERT INTO produkty VALUES (3, 11.15, 'podkladka'); INSERT INTO produkty VALUES (4, 35.60, 'klawiatura'); INSERT INTO produkty VALUES (5, 5.90, 'slizgacze'); INSERT INTO produkty VALUES (6, 8.90, 'kabel'); 60
59 Łączenie tabel (relacje) - utworzenie tabel roboczych CREATE TABLE zam_prod ( zid INT, pid INT, ilosc TINYINT ); INSERT INTO zam_prod VALUES (1, 3, 2); INSERT INTO zam_prod VALUES (2, 2, 1); INSERT INTO zam_prod VALUES (3, 1, 3); INSERT INTO zam_prod VALUES (4, 4, 1); INSERT INTO zam_prod VALUES (5, 1, 5); INSERT INTO zam_prod VALUES (6, 2, 2); INSERT INTO zam_prod VALUES (7, 3, 1); 61
60 Łączenie tabel (relacje) - podstawy W pewnych sytuacjach konieczne jest połączenie danych, zawartych w kilku tabelach, w celu uzyskania tabeli wynikowej. Proces taki nazywamy złączeniem (ang. join), ze względu na sposób łączenia dzieli się operacje złączeń na: złączenia krzyżowe, złączenia wewnętrzne, złączenia zewnętrzne, samozłączenia. Operacje łączenia tabel zawierają w trakcie ich realizacji wstępny etap utworzenia nowej tabeli, będącej iloczynem kartezjańskim wierszy z łączonych tabel. Najprostsze zapytanie, pozwalające się o tym przekonać, ma postać: SELECT * FROM tab1, tab2; 62
61 Łączenie tabel (relacje) - podstawy - złączenie krzyżowe W naszym przypadku najprostsze złączenie tabel dające w efekcie jedną dużą tabelę ma postać: SELECT * FROM klienci CROSS JOIN produkty; Powstała tabela będąca iloczynem kartezjańskim ma liczbę kolumn równą sumie liczby kolumn tabel źródłowych, a liczbę wierszy równą iloczynowi liczby wierszy tabel źródłowych. 63
62 Łączenie tabel (relacje) - podstawy Złączenie wewnętrzne Podstawowe, jak również najczęściej spotykane są złączenia wewnętrzne. Opierają się one na ograniczeniu iloczynu kartezjańskiego dwóch tabel źródłowych w oparciu o pewne relacje kolumn z tych tabel. Najczęściej pojawia się tu ograniczenie, oparte o relację pomiędzy kluczem głównym jednej z tabel, a odpowiednim kluczem obcym z drugiej tabeli. 64
63 Złączenie wewnętrzne cel zapytania: Pokaż datę i koszt wszystkich zamówień. SELECT klienci.nazwisko, zamowienia.data, zamowienia.koszt FROM klienci, zamowienia WHERE zamowienia.kid = klienci.kid; 65
64 Złączenie wewnętrzne - aliasy tabel cel zapytania: Pokaż datę i koszt wszystkich zamówień. SELECT k.nazwisko, z.data, z.koszt FROM klienci k, zamowienia z WHERE k.kid = z.kid; 66
65 Złączenie wewnętrzne cel zapytania: Pokaż poszczególne zamówienia, produkt oraz liczbę produktów. SELECT klienci.nazwisko, produkty.nazwa, zam_prod.ilosc FROM klienci, zamowienia, zam_prod, produkty WHERE zamowienia.kid = klienci.kid AND zam_prod.zid = zamowienia.zid AND produkty.pid = zam_prod.pid; 67
66 Złączenie wewnętrzne - klauzula NATURAL JOIN Złączenie wewnętrzne - klauzula USING 68
67 Złączenie wewnętrzne - klauzula ON cel zapytania: Pokaż datę i koszt wszystkich zamówień. SELECT klienci.nazwisko, zamowienia.data, zamowienia.koszt FROM klienci JOIN zamowienia ON klienci.kid = zamowienia.kid; 69
68 ZADANIA (7) Wszystkie zadania należy wykonać na własnych tabelach Pracownicy, Zakłady i Etaty Wykonaj złączenia, które odpowiedzą na poniższe pytania: 1. Kto pracuje w poszczególnych zakładach? 2. Na jakim etacie pracują poszczególni pracownicy? 3. Kto jest kierownikiem poszczególnych zakładów? 4. Ile godzin wynikających z pensum musi przepracować każdy z pracowników? 5. Kto z pracowników ma tytuł profesora i ile godzin wynikających z pensum musi przepracować? 6. Jaki jest adres pod którym można znaleźć każdego z pracowników? 7. Jaki tytuł/stopień naukowy mają kierownicy wszystkich zakładów? 8. Jaki etat zajmują kierownicy wszystkich zakładów? 9. Jaka jest data zatrudnienia pracowników na stanowisku adiunkta?
69 Łączenie tabel (relacje) - podstawy Złączenie zewnętrzne Drugim typem złączeń są złączenia zewnętrzne. Są one pewnego rodzaju rozszerzeniem pojęcia złączenia wewnętrznego. Podczas gdy w złączeniu wewnętrznym w tabeli wynikowej umieszczane były wiersze, spełniające pewne kryterium, w złączeniu zewnętrznym dodatkowo dodawane są wiersze z jednej z tabel (a nawet obu), które zostałyby odrzucone w złączeniu wewnętrznym, ze względu na nie spełnienie kryterium złączenia, po odpowiednim uzupełnieniu wierszy wynikowych wartościami pustymi. Złączenia zewnętrzne dzielimy na trzy kategorie: lewostronne, prawostronne, pełne. 71
70 Złączenie zewnętrzne - przygotowanie tabel Aby zobaczyć efekt działania złączenia zewnętrznego musimy dodać kilka nowych rekordów do naszych tabel. 1. Wstawiamy klientów którzy nic nie kupili: INSERT INTO klienci VALUES ('Robert', 'Konrad', , 'rkonrad@o2.pl'); INSERT INTO klienci VALUES ('Hubert', 'Mocny', , 'hmocny@o2.pl'); INSERT INTO klienci VALUES ('Grzegorz', 'Wolny', , 'gwolny@o2.pl'); 2. Wstawiamy zamówienia z błędami (brak przypisanych klientów): INSERT INTO zamowienia VALUES (NULL, 32.45, ' '); INSERT INTO zamowienia VALUES (NULL, 12.95, ' '); INSERT INTO zamowienia VALUES (NULL, 21.31, ' '); 72
71 Złączenie zewnętrzne lewostronne cel zapytania: Pokaż dane zamówień dla wszystkich klientów. SELECT klienci.nazwisko, zamowienia.data, zamowienia.koszt FROM klienci LEFT JOIN zamowienia ON klienci.kid = zamowienia.kid ORDER BY koszt DESC; Przy złączeniu wewnętrznym osoby te zostaną pominięte 73
72 Złączenie zewnętrzne prawostronne cel zapytania: Pokaż dane zamówień dla wszystkich klientów. SELECT klienci.nazwisko, zamowienia.data, zamowienia.koszt FROM klienci RIGHT JOIN zamowienia ON klienci.kid = zamowienia.kid ORDER BY nazwisko DESC; Widzimy błędy w bazie? Zamówienia nie są przypisane do żadnego z naszych klientów. 74
73 Złączenie wyników - operator UNION Operator UNION służy do zsumowania wierszy z dowolnej liczby tabel. Za pomocą operatora UNION możemy dodać wyniki poszczególnych zapytań (czyli zwiększyć liczbę wierszy wyniku. Złączenia JOIN zwiększały liczbę kolumn, złączenie UNION zwiększa liczbę wierszy). Łączone wyniki muszą składać się z takiej samej liczby kolumn, a poszczególne kolumny muszą być tego samego typu, poza tym konieczne jest, aby występowały one w tej samej kolejności w obu wynikach 75
74 Złączenie wyników - operator UNION SELECT nazwisko FROM klienci UNION SELECT nazwa FROM produkty; Operator UNION domyślnie pomija identyczne wpisy jeżeli chcemy pokazać wszystkie musimy użyć klauzuli UNION ALL. 76
75 ZADANIA (8) Wszystkie zadania należy wykonać na własnych tabelach Pracownicy, Zakłady i Etaty Wykonaj złączenia, które odpowiedzą na poniższe pytania: 1. Czy w bazie znajdują się pracownicy bez przypisanych zakładów? 2. Czy w bazie są osoby z niezdefionowanym pensum?
76 Funkcje agregujące Funkcje agregujące służą do uzyskiwania informacji statystycznych na podstawie wartości zawartych w tabelach. Funkcje agregujące występujące w języku SQL to: MIN(nazwa_kolumny) wyznacza najmniejszą wartości w kolumnie, MAX(nazwa_kolumny) wyznacza największą wartości w kolumnie, SUM(nazwa_kolumny) sumuje wartości w danej kolumnie, COUNT(nazwa_kolumny) zlicza liczbę wierszy w kolumnie, COUNT(*) - zlicza liczbę zwróconych przez zapytanie wierszy, AVG(nazwa_kolumny) oblicza średnią, VAR(nazwa_kolumny) - oblicza wariancję, STD(nazwa_kolumny) - oblicza odchylenie standardowe. 78
77 Funkcje agregujące - SUM cel zapytania: Ile każdy z klientów wydał na zakupy. SELECT nazwisko + SPACE(1) + imie AS klient, SUM(koszt) AS wydatki FROM klienci JOIN zamowienia ON klienci.kid = zamowienia.kid GROUP BY nazwisko, imie; Utworzenie aliasu dla powstałej kolumny 79
78 Funkcje agregujące - SUM + ORDER BY cel zapytania: Ile każdy z klientów wydał na zakupy. SELECT nazwisko + SPACE(1) + imie AS klient, SUM(koszt) AS wydatki FROM klienci JOIN zamowienia ON klienci.kid = zamowienia.kid GROUP BY nazwisko, imie ORDER BY wydatki DESC; 80
79 Funkcje agregujące - MAX + ORDER BY cel zapytania: Jakie było najdroższe zamówienie klienta. SELECT nazwisko + SPACE(1) + imie AS klient, MAX(koszt) AS najdrozsze FROM klienci JOIN zamowienia ON klienci.kid = zamowienia.kid GROUP BY nazwisko, imie ORDER BY najdrozsze DESC; 81
80 Funkcje agregujące - AVG + ORDER BY cel zapytania: Jaka jest średnia z zamówień danego klienta. SELECT nazwisko + SPACE(1) + imie AS klient, AVG(koszt) AS srednia FROM klienci JOIN zamowienia ON klienci.kid = zamowienia.kid GROUP BY nazwisko, imie ORDER BY srednia DESC; 82
81 Funkcje agregujące - COUNT + ORDER BY cel zapytania: Jaka jest liczba zamówień danego klienta. SELECT nazwisko + SPACE(1) + imie AS klient, COUNT(zID) AS lzamowien FROM klienci JOIN zamowienia ON klienci.kid = zamowienia.kid GROUP BY nazwisko, imie ORDER BY lzamowien DESC; 83
82 Funkcje agregujące + klauzula HAVING Dyrektywa HAVING zawsze występuje za dyrektywą GROUP BY. cel zapytania: Jaka jest liczba zamówień danego klienta uwzględniając tylko klientów, którzy mają więcej niż 2 zamówienia. SELECT nazwisko + SPACE(1) + imie AS klient, COUNT(zID) AS lzamowien FROM klienci JOIN zamowienia ON klienci.kid = zamowienia.kid GROUP BY nazwisko, imie HAVING COUNT(zID) > 1 ORDER BY lzamowien DESC; T-SQL nie pozwala na wykorzystanie w tym miejscu aliasów kolumn 84
83 Funkcje agregujące + klauzula WITH ROLLUP Dodaje jeden dodatkowy rekord sumujący wszystkie wyświetlone wyżej rekordy cel zapytania: Pokaż listę produktów, liczbę sprzedanych sztuk oraz sumę ich ceny. Dodatkowo pokaż sumę dwóch ostatnich kolumn. SELECT nazwa, SUM(cena) as koszt, COUNT(ilosc) as ilosc FROM zam_prod JOIN produkty ON zam_prod.pid = produkty.pid GROUP BY nazwa WITH ROLLUP; 85
84 ZADANIA (9) Wszystkie zadania należy wykonać na własnych tabelach Pracownicy, Zakłady i Etaty Wykonaj złączenia, które odpowiedzą na poniższe pytania: 1. Ilu pracowników ma każdy z zakładów? 2. Ile osób pracuje na poszczególnych etatach? 3. Jaka jest liczba godzin (wynikających z pensum) dla poszczególnych zakładów? 4. Który z zakładów ma najwięcej pracowników? 5. Na jakim etacie pracuje najmniej osób? 6. Ilu pracowników ma pensję powyżej 2 tyś złotych? 7. Ilu pracowników ma adres w domenie 'wz.pl'? 8. Jak zebrać dane pozwalające na narysowanie prostego histogramu pokazującego liczbę pracowników z wybranym stopniem/tytułem naukowym?
85 Podzapytania Podzapytania lub zapytania zagnieżdżone to instrukcje SELECT umieszczone wewnątrz innych instrukcji SELECT. Podzapytanie może być użyte w dowolnej klauzuli w klauzuli FROM będziemy ich używać jako źródeł danych, w klauzuli SELECT jako odpowiedników zmiennych lub funkcji, w klauzuli WHERE do wybierania danych itd. Podzapytania dzielą się na: powiązane i niepowiązane, podzapytania zwracające jeden wiersz i zwracające wiele wierszy. 87
86 Podzapytania niepowiązane SELECT * FROM ( SELECT imie, nazwisko, FROM klienci ) AS dane WHERE imie = 'Jan'; W kwerendzie najpierw zostało wykonane zapytanie wewnętrzne a następnie odczytane zostały wiersze spełniające warunek 88
87 Podzapytania powiązane - podzapytania z operatorem EXISTS, NOT EXISTS Podzapytania powiązane wykonywane są dla każdego wiersza wyniku zapytania zewnętrznego i mogą być z nim porównywane. cel zapytania: Wyświetlenie klientów którzy mają to samo imię ale różne kid, co może wskazywać np. na błędne wypełnienie bazy. SELECT kid, imie, nazwisko FROM klienci AS lista1 WHERE EXISTS ( SELECT kid FROM klienci AS lista2 WHERE lista1.imie = lista2.imie AND lista1.kid!= lista2.kid ); 89
88 Podzapytania zwracające jeden wiersz Podzapytania tego typu można traktować jak zwykłe wyrażenia. W szczególności podzapytania tego typu mogą być używane ze standardowymi operatorami porównań. cel zapytania: Pokaż produkty, których cena jest mniejsza od ceny średniej. SELECT nazwa, cena FROM produkty WHERE cena < ( SELECT AVG(cena) FROM produkty ); 90
89 Podzapytania zwracające wiele wierszy cel zapytania: Pokaż zamówienia złożone przed danego klienta. SELECT * FROM zamowienia WHERE kid = ( SELECT kid FROM klienci WHERE nazwisko = 'Kowalski' ); 91
90 ZADANIA (10) Wszystkie zadania należy wykonać na własnych tabelach Pracownicy, Zakłady i Etaty Korzystając z podzapytań: 1. Wyświetl tylko tych pracowników, którzy pracują na stanowisku profesora. 2. Wyświetl pracowników z tym samym tytułem/stopniem naukowym ale innymi telefonami. 3. Pokaż pracowników których zarobki są mniejsze od średniej z zarobków. 4. Pokaż zakłady które mają mniej niż 2 pracowników. 5. Pokaż etaty na których pracuje więcej niż 1 pracownik.
91 Transakcje Transakcje są grupami instrukcji języka SQL, traktowanymi z punktu widzenia ich przetwarzania jako jedna całość. BEGIN TRANSACTION; zapytanie1; zapytanie2; zapytanien; COMMIT; > Zmiany zostają zatwierdzone BEGIN TRANSACTION; zapytanie1; zapytanie2; zapytanien; ROLLBACK; > Zmiany zostają odwołane Jeżeli w trakcie wykonywania transakcji wystąpi jakiś błąd, całą sekwencję operacji można odwołać, przywracając bazę do stanu sprzed rozpoczęcia tej sekwencji. Instrukcje tworzące, usuwające i modyfikujące tabele nie są transakcyjne nie można ich wycofać. 93
92 Transakcje - blokowanie dostępu Z wykorzystaniem transakcji wiąże się wiele niebezpieczeństw w szczególności związanych z wielozadaniowością systemu baz danych. Aby zapobiec ew. problemom można przy wykonaniu transakcji skorzystać z rożnych poziomów izolacji. SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ UNCOMMITED - najniższy poziom, zezwala na czytanie niepotwierdzonych danych, READ COMMITED - aplikacja może odczytywać tylko potwierdzone dane, właściwy poziom izolacji np. dla procedur raportujących, dla których istotny jest chwilowy stan bazy, REAPEATABLE READ - blokuje dostęp do wszystkich odczytanych danych, właściwy poziom izolacji dla procedur odczytu i aktualizacji danych, SERIALIZABLE - blokuje dostęp do tabeli, właściwy poziom izolacji dla procedur odczytu i aktualizacji danych. 94
93 Transakcje - przykład Wykonamy proste połączenie kilku zapytań z klauzulą SELECT. BEGIN TRANSACTION SELECT * FROM klienci WHERE imie = 'Jan'; SELECT * FROM zamowienia ORDER BY koszt; SELECT nazwa, cena FROM produkty WHERE cena > 5; COMMIT; 95
94 Transakcje - przywrócenie stanu pierwotnego ROLLBACK Komenda ROLLBACK odwołuje transakcję. Polecenie to odwołuje wszystkie modyfikacje jakie zostały dokonane podczas trwania transakcji poprzez przywrócenie stanu danych sprzed transakcji. BEGIN TRANSACTION UPDATE klienci SET imie='john' WHERE imie ='Jan' = 0 BEGIN RAISERROR ('Operacja udana!', 16, -1) ROLLBACK TRANSACTION END COMMIT; 96
95 Widoki (perspektywy) Widok jest predefiniowanym, zapisanym po stronie serwera zapytaniem, którego wynik może być wielokrotnie odczytywany. Z perspektywy użytkownika widok nie różni się niczym od tabeli - użytkownik do obu obiektów odwołuje się tak samo. Widoki wykorzystuje się w wielu celach np.: ułatwienie realizacji zapytań odwołujących się do wielu tabel, ułatwienie realizacji zapytań wykonujących obliczenia na zapisanych w tabelach danych, zabezpieczenie przed dostępem do poufnych danych, ukrycie przed użytkownikiem struktury bazy, ułatwienie zarządzaniem prawami dostępu, oddzielić i uniezależnić aplikację kliencką od zmian tabel baz danych. W bazie zapamiętane zostają tylko definicje poszczególnych kolumn widoków, nie zaś wartości! 97
96 Widoki Projektowanie baz danych CREATE VIEW klienci_kontakt AS SELECT imie, nazwisko, telefon FROM klienci; Proszę nadać widokowi nazwę składającą się z dwóch członów - słowa klient_kontakt i po 'podkreślniku' inicjałów autora, autorów np. klienci_kontakt_jk Tak utworzony widok można używać jak zwykłej tabeli: SELECT * FROM klienci_kontakt WHERE imie LIKE '%Ja%'; imie nazwisko telefon Jan Kowalski Jacek Nowak Jan Malwa Widoki umożliwiają prezentowanie danych w sposób najbardziej wygodny dla użytkowników, niezależnie od struktury tabel fizycznych. 98
97 Widoki - przykład Tworzymy widok zawierający poszczególne zamówienia porządkowane wg klienta CREATE VIEW klienci_zam AS SELECT klienci.nazwisko, produkty.nazwa, zam_prod.ilosc FROM klienci, zamowienia, zam_prod, produkty WHERE zamowienia.kid = klienci.kid AND zam_prod.zid = zamowienia.zid AND produkty.pid = zam_prod.pid; cel zapytania: Pokaż wszystkie zamówienia Kowalskiego: SELECT * FROM klienci_zam WHERE nazwisko = 'Kowalski'; W języku SQL widoki mogą odczytywać dane nie tylko z tabel bazowych, ale również z innych widoków. 99
98 Widoki a zmiana - zmiany w tabeli bazowej uwzględniane są w widokach Zmienimy nazwisko Kowalski na Kowal UPDATE klienci SET nazwisko = 'Kowal' WHERE nazwisko = 'Kowalski'; Ponownie uruchamiamy zapytanie SELECT * FROM klienci_zam WHERE nazwisko = 'Kowalski'; Zapytanie nic nie zwraca. Zmieniamy więc warunek: SELECT * FROM klienci_zam WHERE nazwisko = 'Kowal'; 100
99 Widoki modyfikowalne - zmiany w widokach powodują zmiany w tabelach bazowych Kontynuujemy zmiany, przywrócimy nazwisko Kowalski ale tym razem za pomocą widoku: UPDATE klienci_zam SET nazwisko = 'Kowalski' WHERE nazwisko = 'Kowal'; Tak jak się spodziewaliśmy spowodowało to zmianę Kowal na Kowalski : SELECT * FROM klienci; Zaleca się ostrożność przy zmianach wprowadzanych poprzez widoki, zmiany te mogą naruszyć więzy integralności. 101
100 Widoki niemodyfikowalne Nie wszystkie widoki są modyfikowalne. Niemodyfikowalne z założenia są widoki, które wykorzystują wraz z SELECT klauzule UNION, UNION ALL, DISTINCT, DISTINCTROW. Widoki także nie mogą zawierać podzapytań. Usuwanie wierszy z widoków: Niekiedy z widoków modyfikowalnych można usuwać wiersze mianowicie wtedy, gdy SQL potrafi "przetłumaczyć" zapytanie usuwające wiersze z widoku na zapytanie (zapytania) usuwające wiersze z tabeli bazowej. DELETE FROM klienci_zam WHERE nazwisko = 'Kowalski'; View or function 'klienci_zam' is not updatable because the modification affects multiple base tables. 102
101 Widoki - modyfikowanie struktury Możemy zmienić definicję widoku przez wykonanie instrukcji ALTER VIEW. Utworzymy widok z listą produktów, ich ceną i liczbą sztuk: CREATE VIEW prod AS SELECT nazwa, SUM(cena) as koszt, COUNT(ilosc) as liczba FROM zam_prod JOIN produkty ON zam_prod.pid = produkty.pid GROUP BY nazwa; Zmodyfikujemy widok tak aby pokazywał tylko drogie produkty: ALTER VIEW prod AS SELECT nazwa, SUM(cena) as koszt, COUNT(ilosc) as liczba FROM zam_prod JOIN produkty ON zam_prod.pid = produkty.pid GROUP BY nazwa HAVING SUM(cena) > 20; 103
102 Widoki - usuwanie Niepotrzebne widoki mogą zostać usunięte z bazy danych. Ponieważ usunięcie tabeli bazowej nie powoduje automatycznego usunięcia powiązanych z nią widoków, z reguły wykonuje się te operacje razem. DROP VIEW klienci_zam; DROP VIEW prod; 104
103 ZADANIA (11) Wszystkie zadania należy wykonać na własnych tabelach Pracownicy, Zakłady i Etaty 1. Utwórz widok pokazujący numer, imię, nazwisko, etat i zakład pracownika. Korzystając z tego widoku wyświetl: a) zakłady mające w swojej nazwie 'ow', b) pracowników pracujących na etacie asystenta, c) zakłady w których pracuje najwięcej adiunktów. 2. Popraw widok dodając do niego informacje o płacy oraz dacie zatrudnienia. Korzystając ze zmodyfikowanego widoku wyświetl: a) zakłady, które wydają najwięcej na płace, b) średnią płacę dla każdego z zakładów, c) zakłady w których pracuje najwięcej pracowników zatrudnionych po 2000 roku.
104 Procedury składowe (stored procedures) Stosuje się je do wykonywania powtarzających się, logicznie takich samych operacji na (bazie) danych, nie wymagających ingerencji ze strony użytkownika. Rozpoczniemy od definicji procedury: CREATE PROCEDURE CHAR(20) AS UPDATE produkty SET cena = cena * 0.9 WHERE nazwa 106
105 Procedury składowe I teraz możemy ją wywołać podając wartość parametru - produkt w promocji: EXEC promocja 'myszka' W efekcie wywołaliśmy procedurę, która spowodowała obniżenie ceny produktu. 107
106 Procedury składowe wyświetlenie listy SELECT * FROM sys.procedures WHERE name NOT LIKE 'sp_%'; Procedury składowe wyświetlenie zawartości sp_helptext promocja; Procedury składowe - usuwanie DROP PROCEDURE promocja; 108
107 Procedury składowe IF ELSE Definiujemy procedurę: CREATE PROCEDURE INT) AS IF > 20)SELECT 'drogie'; ELSE SELECT 'tanie'; Podobnie jak przy tablicach dodajemy swoje inicjały Uruchamiamy procedurę podając wprost cenę produktu: EXEC ocena_ceny 10; 109
108 Procedury składowe IF ELSE Możemy też utworzyć na podstawie naszych tablic lokalną zmienną i sprawdzić jaka jest cena w danej komórce. Tworzymy zmienną: INT FROM produkty WHERE pid=1; Sprawdzamy procedurą jej wielkość: EXEC 110
109 Procedury składowe CASE WHEN przypadek1 zadanie(a) WHEN przypadek2 zadanie(a) ELSE zadanie(a) END Rozpoczynamy od utworzenia procedury: CREATE PROCEDURE VARCHAR(30) AS SELECT WHEN 'Jan' THEN 'TAK' ELSE 'NIE' END; Sprawdzamy jej działanie: INT FROM produkty WHERE pid=1; EXEC 111
110 Procedury składowe WHILE CREATE PROCEDURE INT AS WHILE < 5) BEGIN SELECT * FROM klienci WHERE kid END EXEC petla 1; 112
111 ZADANIA (12) Wszystkie zadania należy wykonać na własnych tabelach Pracownicy, Zakłady i Etaty
112 Wyzwalacze Wyzwalacze są procedurami uruchamianymi automatycznie na skutek zdarzeń zachodzących w bazie danych. Służą do oprogramowania więzów spójności i do oprogramowania stałych czynności, które powinny być wykonywane w każdej aplikacji korzystającej z bazy danych. Typ wyzwalacza zależy od tego, czy ma być wykonywany przed operacją (BEFORE), czy po operacji (AFTER). Wyzwalacze obu typów mogą być uruchamiane w wyniku następujących poleceń: INSERT (wstawianie), DELETE (usuwanie), UPDATE (modyfikacja). CREATE TRIGGER trigger_name ON { table view } [ WITH ENCRYPTION ] { { { FOR AFTER INSTEAD OF } { [ INSERT ] [, ] [ UPDATE ] [, ] [ DELETE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS {... } DROP TRIGGER nazwa_wyzwalacza; 114
113 Wyzwalacze Wyzwalacz wykonywana się automatycznie po zmianie zawartości wskazanej tabeli. CREATE TRIGGER DodanoKlienta ON klienci FOR INSERT AS VARCHAR(100) =(SELECT nazwisko FROM INSERTED) PRINT 'KLIENT ' + ' ZOSTAŁ DODANY DO BAZY'; Podczas dodawania nowego klienta otrzymujemy stosowny komunikat: INSERT INTO klienci VALUES('Marian', 'Janczuk', , 'mjanczuk@o2.pl'); 115
114 Kursory Kursor jest to tymczasowa struktura służąca do pobierania wyniku zapytania SQL. Kursor umożliwia pobieranie rekordów sekwencyjnie, po jednym lub więcej na raz, a także przemieszczanie się po wynikach zapytania. Kursor może być zdefiniowany i działać po stronie serwera baz danych, jak i po stronie klienta. Ten drugi typ kursora jest rodzajem iteratora umożliwiającego poruszanie się po poszczególnych rekordach zwróconych przez serwer klientowi. DECLARE PobierzKlientów CURSOR SCROLL FOR SELECT * FROM klienci ORDER BY nazwisko OPEN PobierzKlientów FETCH FIRST FROM PobierzKlientów =0 BEGIN FETCH NEXT FROM PobierzKlientów END 116
115 Kursory varchar(30) varchar(30) DECLARE wynik CURSOR FOR SELECT imie, nazwisko FROM klienci OPEN wynik FETCH NEXT FROM PRINT '' + CAST(@@FETCH_STATUS AS VARCHAR) = 0 BEGIN SELECT * FROM klienci WHERE nazwisko FETCH NEXT FROM END CLOSE wynik DEALLOCATE wynik 117
116 Klucze obce (foregin key) Powiązanie indeksowanej kolumny danej tabeli z indeksowaną kolumną innej tabeli, co pozwala na automatyczne dokonywanie zmian w powiązanych tabelach. FOREIGN KEY (nazwa_kolumny_indeksowanej,...) REFERENCES nazwa_tabeli (nazwa_kolumny_indeksowanej,...) [ON DELETE {RESTRICT CASCADE SET NULL NO ACTION}] [ON UPDATE {RESTRICT CASCADE SET NULL NO ACTION}] Dodajemy klucz obcy to tablicy zam_prod pozwoli to na automatyczną aktualizację numerów zamówień i produktów przy zmianie ich w tabelach macierzystych: ALTER TABLE zam_prod ADD FOREIGN KEY (pid) REFERENCES produkty(pid) ON UPDATE CASCADE; 118
117 Klucze obce (foregin key) Sprawdzamy, czy rzeczywiście dane są aktualizowane zmieniając numer produktu w tabeli macierzystej. Zawartość tabel przed zmianami: Tabela produkty Tabela zam_prod 119
PROJEKTOWANIE BAZ DANYCH
Uniwersytet Przyrodniczy w Poznaniu - Instytut Inżynierii Biosystemów - Zakład Informatyki Stosowanej PROJEKTOWANIE BAZ DANYCH Ćwiczenia Źródła: http://wazniak.mimuw.edu.pl/index.php?title=bazy_danych
Bardziej szczegółowoWykł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
Bardziej szczegółowoPodstawy 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
Bardziej szczegółowoRelacyjne 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.
Bardziej szczegółowoSQL (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
Bardziej szczegółowoWykł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,
Bardziej szczegółowoRelacyjne 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.
Bardziej szczegółowoSystemy 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
Bardziej szczegółowoĆ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
Bardziej szczegółowoPrzestrzenne 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
Bardziej szczegółowoSQL 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
Bardziej szczegółowoPaweł 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,
Bardziej szczegółowoBazy 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
Bardziej szczegółowoWykł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
Bardziej szczegółowoJęzyk SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.
Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne. 1 Perspektywa Perspektywa (ang. view) jest strukturą
Bardziej szczegółowo77. 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
Bardziej szczegółowoJę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
Bardziej szczegółowostrukturalny 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
Bardziej szczegółowoBlaski 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
Bardziej szczegółowoInstytut 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
Bardziej szczegółowoOracle11g: Wprowadzenie do SQL
Oracle11g: Wprowadzenie do SQL OPIS: Kurs ten oferuje uczestnikom wprowadzenie do technologii bazy Oracle11g, koncepcji bazy relacyjnej i efektywnego języka programowania o nazwie SQL. Kurs dostarczy twórcom
Bardziej szczegółowoT-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
Bardziej szczegółowoBazy 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
Bardziej szczegółowoPodstawy 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
Bardziej szczegółowoCREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Zestaw ćwiczeń1 Dzięki DDL (Data Definition Language) można operować na strukturach, w których dane są przechowywane czyli np. dodawać, zmieniać i kasować tabele lub bazy. Najważniejsze polecenia tej grupy
Bardziej szczegółowoAutor: 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ę,
Bardziej szczegółowoWidok 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
Bardziej szczegółowoAdministracja 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''
Bardziej szczegółowoMicrosoft 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
Bardziej szczegółowoRef. 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ść
Bardziej szczegółowoProgramowanie 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
Bardziej szczegółowoPrzykł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
Bardziej szczegółowoJę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
Bardziej szczegółowoDECLARE 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.;
Bardziej szczegółowoACESS- 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,
Bardziej szczegółowoSELECT * 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 *
Bardziej szczegółowoLaboratorium nr 4. Temat: SQL część II. Polecenia DML
Laboratorium nr 4 Temat: SQL część II Polecenia DML DML DML (Data Manipulation Language) słuŝy do wykonywania operacji na danych do ich umieszczania w bazie, kasowania, przeglądania, zmiany. NajwaŜniejsze
Bardziej szczegółowoPRZESTRZENNE BAZY DANYCH WYKŁAD 2
PRZESTRZENNE BAZY DANYCH WYKŁAD 2 Baza danych to zbiór plików, które fizycznie przechowują dane oraz system, który nimi zarządza (DBMS, ang. Database Management System). Zadaniem DBMS jest prawidłowe przechowywanie
Bardziej szczegółowoBazy danych. Polecenia SQL
Bazy danych Baza danych, to miejsce przechowywania danych. Dane w bazie danych są podzielone na tabele. Tabele składają się ze ściśle określonych pól i rekordów. Każde pole w rekordzie ma ściśle ustalony
Bardziej szczegółowoWstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9
Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9 Tabele 9 Klucze 10 Relacje 11 Podstawowe zasady projektowania tabel 16 Rozdział 2. Praca z tabelami 25 Typy danych 25 Tworzenie tabel 29 Atrybuty kolumn
Bardziej szczegółowoPawel@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
Bardziej szczegółowoPerspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.
Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane. 1 Perspektywa Perspektywa (ang. view) jest strukturą logiczną
Bardziej szczegółowoZadania 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
Bardziej szczegółowoPrzykładowa baza danych BIBLIOTEKA
Przykładowa baza danych BIBLIOTEKA 1. Opis problemu W ramach zajęć zostanie przedstawiony przykład prezentujący prosty system biblioteczny. System zawiera informację o czytelnikach oraz książkach dostępnych
Bardziej szczegółowoBazy danych 6. Klucze obce. P. F. Góra
Bazy danych 6. Klucze obce P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ 2018 Dygresja: Metody przechowywania tabel w MySQL Tabele w MySQL moga być przechowywane na kilka sposobów. Sposób ten (żargonowo:
Bardziej szczegółowoWprowadzenie 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
Bardziej szczegółowoLiteratura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska
Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion Autor: Joanna Karwowska SQL zapewnia obsługę: zapytań - wyszukiwanie danych w bazie, operowania danymi - wstawianie, modyfikowanie
Bardziej szczegółowo1 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
Bardziej szczegółowo050 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
Bardziej szczegółowoGrupowanie 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,
Bardziej szczegółowoWykł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
Bardziej szczegółowoProgramowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie
Programowanie MSQL show databases; - pokazanie jakie bazy danych są dostępne na koncie show databases; - wyświetlenie wszystkich baz danych na serwerze create database nazwa; - za nazwa wstawiamy wybraną
Bardziej szczegółowoJęzyk SQL. Rozdział 9. Język definiowania danych DDL, część 2.
Język SQL. Rozdział 9. Język definiowania danych DDL, część 2. Ograniczenia integralnościowe, modyfikowanie struktury relacji, zarządzanie ograniczeniami. 1 Ograniczenia integralnościowe Służą do weryfikacji
Bardziej szczegółowoAspekty 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ć
Bardziej szczegółowoBazy 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)
Bardziej szczegółowoE.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
Bardziej szczegółowoAby uruchomić program klienta i połączyć się z serwerem, należy komendę:
Bazy danych. Komunikacja z serwerem Aby połączyć się z serwerem i móc wykonywać czynności związane z obsługą baz, potrzebny jest program klienta. Razem z serwerem MySQL dostępny jest działający w wierszu
Bardziej szczegółowoProjektowanie systemów baz danych
Projektowanie systemów baz danych Seweryn Dobrzelewski 4. Projektowanie DBMS 1 SQL SQL (ang. Structured Query Language) Język SQL jest strukturalnym językiem zapewniającym możliwość wydawania poleceń do
Bardziej szczegółowoWprowadzenie. Tworzenie widoków
Widoki Wprowadzenie...2 Tworzenie widoków...2 Złączenie zewnętrzne w definicji widoków...4 Porządkowanie danych przez widoki...5 Modyfikowanie danych przez widoki...6 Ograniczenie zakresu modyfikowania
Bardziej szczegółowoSprawdzenie 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
Bardziej szczegółowoOracle PL/SQL. Paweł Rajba. pawel@ii.uni.wroc.pl http://www.kursy24.eu/
Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 6 Wprowadzenie Definiowanie wyzwalaczy DML Metadane wyzwalaczy Inne zagadnienia, tabele mutujące Wyzwalacze INSTEAD OF Wyzwalacze
Bardziej szczegółowoSQL 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]...
Bardziej szczegółowoWyzwalacz - 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
Bardziej szczegółowoBazy 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
Bardziej szczegółowoBazy 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
Bardziej szczegółowoBazy danych 9. SQL Klucze obce Transakcje
Bazy danych 9. SQL Klucze obce Transakcje P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ semestr letni 2005/06 Klucze obce Klucze obce powiazanie indeksowanej kolumny jakiejś tabeli z indeksowana kolumna
Bardziej szczegółowoJęzyk SQL. instrukcja laboratoryjna. Politechnika Śląska Instytut Informatyki. laboratorium Bazy Danych
Politechnika Śląska Instytut Informatyki instrukcja laboratoryjna laboratorium Bazy Danych przygotowali: mgr inż. Paweł Kasprowski (Kasprowski@zti.iinf.polsl.gliwice.pl) mgr inż. Bożena Małysiak (bozena@ivp.iinf.polsl.gliwice.pl)
Bardziej szczegółowoPawel@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ść
Bardziej szczegółowoTworzenie 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
Bardziej szczegółowoAutor: Joanna Karwowska
Autor: Joanna Karwowska SELECT [DISTINCT] FROM [WHERE ] [GROUP BY ] [HAVING ] [ORDER BY ] [ ] instrukcja może
Bardziej szczegółowoBazy 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,
Bardziej szczegółowoP 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
Bardziej szczegółowoBAZA 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
Bardziej szczegółowoKurs. Podstawy MySQL
Kurs Podstawy MySQL Krótkie info. Autorem kursu jest Piotr Jędrusik. Kurs jest własnością serwisu MySQL FAQ www.mysqlfaq.prv.pl, email: mysqlfaq@twister.pl. 1. Tworzymy bazę. Stworzymy pierwszą bazę o
Bardziej szczegółowoPrzykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;
Temat: Funkcje, procedury i wyzwalacze. Oprócz tabel i widoków w bazach danych możemy tworzyć własne funkcje, procedury i specjalny typ procedur, które będą automatycznie wywoływanie przez MySQL w memencie
Bardziej szczegółowoD D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?
D D L S Q L Co to jest DDL SQL i jakie s jego ą podstawowe polecenia? D D L S Q L - p o d s t a w y DDL SQL (Data Definition Language) Jest to zbiór instrukcji i definicji danych, którym posługujemy się
Bardziej szczegółowo1. Tworzenie tabeli. 2. Umieszczanie danych w tabeli
1. Tworzenie tabeli Aby stworzyć tabele w SQL-u należy użyć polecenia CREATE TABLE nazwa_tabeli (nazwa_pola1 właściwości_pola1, nazwa_pola2 właściwości_pola2, itd.) Nazwa_tabeli to wybrana przez nas nazwa
Bardziej szczegółowoPODSTAWY 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
Bardziej szczegółowoLAB 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,
Bardziej szczegółowoWprowadzenie do baz danych
Wprowadzenie do baz danych Dr inż. Szczepan Paszkiel szczepanpaszkiel@o2.pl Katedra Inżynierii Biomedycznej Politechnika Opolska Wprowadzenie DBMS Database Managment System, System za pomocą którego można
Bardziej szczegółowoAutor: Joanna Karwowska
Autor: Joanna Karwowska SELECT [DISTINCT] FROM [WHERE ] [GROUP BY ] [HAVING ] [ORDER BY ] [ ] instrukcja może
Bardziej szczegółowoLaboratorium nr 5. Temat: Funkcje agregujące, klauzule GROUP BY, HAVING
Laboratorium nr 5 Temat: Funkcje agregujące, klauzule GROUP BY, HAVING Celem ćwiczenia jest zaprezentowanie zagadnień dotyczących stosowania w zapytaniach języka SQL predefiniowanych funkcji agregujących.
Bardziej szczegółowoĆwiczenie zapytań języka bazy danych PostgreSQL
Ćwiczenie zapytań języka bazy danych PostgreSQL 1. Uruchom link w przeglądarce: http://127.0.0.1/phppgadmin 2. Kliknij w zaznaczony na czerwono link PostgreSQL: 3. Zaloguj się wpisując hasło i login student.
Bardziej szczegółowoInstrukcja 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
Bardziej szczegółowoWyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz
Wyzwalacze Wyzwalacze są specjalnymi procedurami składowanymi, uruchamianymi automatycznie w następstwie zaistnienia określonego typu zdarzenia. Ich główne zadanie polega na wymuszaniu integralności danych
Bardziej szczegółowo41. Zmienne lokalne muszą mieć nazwę, którą poprzedza (maksymalnie 128 znaków) oraz typ (każdy z wyjątkiem: text, ntext oraz image)
Elementy języka T-SQL 40. Polecenie PRINT jest wykorzystywane do przekazania wiadomości tekstowej (maksymalna długość 8000 znaków) Przykład PRINT 'Aktualna data: '+convert(char(8),getdate()) PRINT 'Aktualny
Bardziej szczegółowoWyzwalacze (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
Bardziej szczegółowoLaboratorium Bazy danych SQL 2
Klauzula order by występuje jako ostatnia klauzula w poleceniu select, powoduje posortowanie wierszy będących wynikiem zapytania według wartości atrybutu w niej wskazanego. Domyślnie sortowanie jest według
Bardziej szczegółowoBazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1
Bazy danych Wykład IV SQL - wprowadzenie Copyrights by Arkadiusz Rzucidło 1 Czym jest SQL Język zapytań deklaratywny dostęp do danych Składnia łatwa i naturalna Standardowe narzędzie dostępu do wielu różnych
Bardziej szczegółowoWykład 05 Bazy danych
Wykład 05 Bazy danych Tabela składa się z: Kolumn Wierszy Wartości Nazwa Wartości Opis INT [UNSIGNED] -2^31..2^31-1 lub 0..2^32-1 Zwykłe liczby całkowite VARCHAR(n) n = długość [1-255] Łańcuch znaków o
Bardziej szczegółowoRelacji między tabelami klucze obce. Schemat bazy danych, wczytanej z pliku create_tables.sql. Klucz obcy jako ograniczenie dla kolumny
Schemat bazy danych, wczytanej z pliku create_tables.sql Relacji między tabelami klucze obce Klucz obcy jako ograniczenie dla kolumny customer_id INTEGER NOT NULL REFERENCES customer(customer_id), CONSTRAINT
Bardziej szczegółowoWstę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.
Bardziej szczegółowoIntegralność danych Wersje języka SQL Klauzula SELECT i JOIN
Integralność danych Wersje języka SQL Klauzula SELECT i JOIN Robert A. Kłopotek r.klopotek@uksw.edu.pl Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW Integralność danych Aspekty integralności
Bardziej szczegółowoSkładowane procedury i funkcje
Składowane procedury i funkcje Procedury i funkcje są zestawem poleceń SQL, które są przechowywane na serwerze (tak jak dane w tablicach). Istnieją sytuacje, kiedy procedury i funkcje są szczególnie przydatne.
Bardziej szczegółowoJęzyk SQL. Rozdział 2. Proste zapytania
Język SQL. Rozdział 2. Proste zapytania Polecenie SELECT, klauzula WHERE, operatory SQL, klauzula ORDER BY. 1 Wprowadzenie do języka SQL Język dostępu do bazy danych. Język deklaratywny, zorientowany na
Bardziej szczegółowoProcedury 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
Bardziej szczegółowoBazy Danych. SQL Podstawy języka III: powtórzenie. Krzysztof Regulski WIMiIP, KISiM, B5, pok. 408
Bazy Danych SQL Podstawy języka III: powtórzenie Krzysztof Regulski WIMiIP, KISiM, regulski@agh.edu.pl B5, pok. 408 Modyfikacja schematu relacji Utwórz tabelę wg schematu: CREATE TABLE ODDZIAL ( numer_oddzialu
Bardziej szczegółowoTrigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie.
Temat: 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
Bardziej szczegółowoSystemowe 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
Bardziej szczegółowo