PROJEKTOWANIE BAZ DANYCH

Wielkość: px
Rozpocząć pokaz od strony:

Download "PROJEKTOWANIE BAZ DANYCH"

Transkrypt

1 Uniwersytet Przyrodniczy w Poznaniu - Instytut Inżynierii Biosystemów - Zakład Informatyki Stosowanej PROJEKTOWANIE BAZ DANYCH Ćwiczenia Źródła: Prowadzący: dr inż. Radosław J. Kozłowski rjk@up.poznan.pl www:

2 Logowanie z wykorzystaniem klienta webowego phpmyadmin 1. Otwieramy dowolną przeglądarkę internetową. 2. Wpisujemy adres serwera www/php/mysql: 3. Wpisujemy nazwę użytkownika, hasło oraz nazwę bazy danych. 2

3 Zmiana domyślnego hasła roota (niezbędne prawa administratora) Przy instalacji serwera mysql automatycznie tworzone jest konto root z pustym hasłem. Użytkownik po zalogowaniu na to konto ma pełne prawa dostępu. Aby uniknąć problemów powinno się zaraz po instalacji ustawić hasło dla root'a. Można tą operację wykonać na dwa sposoby: mysql> UPDATE user SET Password = PASSWORD('pass') WHERE user = 'root'; mysql> FLUSH PRIVILEGES; mysql> SET PASSWORD FOR root = PASSWORD('pass'); 1 2 3

4 Wyświetlanie dostępnych baz danych mysql> mysql> SHOW DATABASES; Database iir mysql student test rows in set 4

5 Podłączenie do istniejącej bazy Aby możliwe było zarządzanie tabelami (tworzenie, edycja) musimy najpierw 'powiedzieć' mysql-owi, nad którą bazą danych mamy zamiar pracować. mysql> mysql> USE student; Database changed Database iir mysql student test

6 Tworzenie i usuwanie bazy danych (niezbędne prawa administratora) Polecenie CREATE DATABASE służy do utworzenie nowej bazy danych. mysql> CREATE DATABASE student; Query OK Polecenie to spowoduje utworzenie bazy danych o nazwie "student". Bazę danych możemy usunąć wydając polecenie: mysql> DROP DATABASE student; Query OK 6

7 Tworzenie i usuwanie bazy danych (niezbędne prawa administratora) Ustalenie kodowania znaków W Polsce przyjęło się stosowanie systemu iso (latin2) do kodowania polskich znaków wyświetlanych na stronach internetowych. Aby tworzone tabele przechowywały ciągi znakowe w tym systemie najprościej ustawić go dla całej bazy danych: mysql> CREATE DATABASE student CHARACTER SET latin2; Query OK Warto też ustawić odpowiednie kodowanie dla systemu porównania, sortowania: mysql> CREATE DATABASE student CHARACTER SET latin2 COLLATE latin2_general_ci; Query OK 7

8 Nadawanie praw dostępu (niezbędne prawa administratora) Do nadawania praw dostępu dla konkretnego użytkownika w systemie bazodanowym służy komenda GRANT Nadanie pełnych praw dostępu do bazy student dla użytkownika student mysql> GRANT ALL ON student.* TO student@localhost IDENTIFIED BY "student"; Nadanie wybranych praw dostępu do bazy student dla użytkownika student mysql> GRANT SELECT, INSERT, UPDATE, DELETE... ON student.* TO student@localhost IDENTIFIED BY "student"; Po zmianie uprawnień przeładowujemy je funkcją: mysql> FLUSH PRIVILEGES; 8

9 Odbieranie praw dostępu (niezbędne prawa administratora) Do odbierania praw dostępu dla konkretnego użytkownika w systemie bazodanowym służy komenda REVOKE Odebranie prawa do wstawiania rekordów do tabeli Kowalski w bazie student użytkownikowi student mysql> REVOKE INSERT ON student.kowalski TO student@localhost IDENTIFIED BY "student"; mysql> FLUSH PRIVILEGES; Przeglądanie praw dostępu mysql> SHOW GRANTS FOR student@localhost; 9

10 Przeglądanie dostępnych tabel mysql> SHOW TABLES FROM student; Empty set mysql> SHOW TABLES FROM mysql; Tables in mysql columns_priv db host tables_priv user rows in set 10

11 Tworzenie tabel podstawowe typy pól CHAR(30) Pole znakowe. Przechowuje teksty o ustalonej z góry długości. Ograniczone do 255 znaków. VARCHAR(30) Pole znakowe. Przechowuje taką długość tekstu, jaka jest używana. INT [UNSIGNED] Pole liczb całkowitych. Przechowuje liczby z zakresu od do (z parametrem UNSIGNED - od 0 do ). DATE Pole daty przechowuje daty z zakresu od ' ' do ' '. BLOB/TEXT Pole binarne, tekstowe. Przechowuje dłuższe, wielowierszowe teksty do znaków. 11

12 Proszę nadać tabeli nazwę Tworzenie tabel CREATE TABLE składającą się z dwóch członów mysql> CREATE TABLE klient ( - słowa klient i po 'podkreślniku' imie VARCHAR(35), inicjałów autora, autorów np. nazwisko VARCHAR(35), dla Jana Kowalskiego telefon DECIMAL(10,0), klient_jk CHAR(30), kid INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (kid) ); Usuwanie tabel - DROP TABLE mysql> DROP TABLE klient; klauzulę dla klucza podstawowego można umieścić także bezpośrednio za nazwą kolumny. 12

13 Tworzenie tabel tymczasowych TEMPORARY TABLE Bardzo przydatna funkcja do tworzenia tablic aktywnych tylko w czasie aktualnej sesji. Po zakończeniu sesji tablica zostaje usunięta. CREATE TEMPORARY TABLE dane ( kolumna1 typ, kolumna2 typ, kolumna3 typ,... kolumnan typ, ); Tworzenie kopii tabel (bez zawartości) - LIKE CREATE TABLE student LIKE klient; Tworzenie kopii tabel (wraz z zawartością) AS + SELECT CREATE TABLE student AS (SELECT * FROM klient); 13

14 Podgląd struktury tabel mysql> describe klient; mysql> SHOW COLUMNS FROM klient; Field Type Null Key Default Extra imie varchar(35) YES NULL nazwisko varchar(35) YES NULL telefon decimal(10,0) YES NULL varchar(30) YES NULL kid int(11) PRI 0 auto_increment rows in set Primary Key - klucz podstawowy służący do szybkiej identyfikacji rekordu. Auto_increment - kolumna tzw. auto numeracji. Not null - oznacza, iż danej kolumnie nie można przypisać wartości NULL (pusta). 14

15 Wyświetlenie listy tabel mysql> SHOW TABLES; Tables in student klient_gt klient_tj klient_dz row in set 15

16 Modyfikacja struktury tabeli - ALTER TABLE Strukturę tabel już istniejących (i wypełnionych danymi) można modyfikować, w sensie dodawania lub usuwania kolumn i indeksów, zmiany definicji kolumn, czy wreszcie zmiany nazwy tabeli. ALTER TABLE klient operacja1[, operacja2,...] Field Type Null Key Default Extra imie varchar(35) YES NULL nazwisko varchar(35) YES NULL telefon decimal(10,0) YES NULL varchar(30) YES NULL kid int(11) PRI 0 auto_increment

17 Modyfikacja struktury tabeli - ALTER TABLE Dodanie 1 kolumny mysql> ALTER TABLE klient ADD wiek INT; Dodanie kilku kolumn mysql> ALTER TABLE klient ADD ( wysokosc INT, koczu VARCHAR(35) ); Dodanie kolumny w określonej pozycji mysql> ALTER TABLE klient ADD waga INT AFTER wysokosc; Aby dodać nowe pole po innym, używa się komendy AFTER. Aby natomiast dodać pole na początku tabeli, trzeba użyć komendy FIRST. 17

18 Modyfikacja struktury tabeli - ALTER TABLE Modyfikacja istniejącej kolumny / kolumn mysql> ALTER TABLE klient MODIFY koczu INT; zmiana typu danych dla kolumny koczu z VARCHAR na INT Zmiana nazwy kolumny mysql> ALTER TABLE klient CHANGE wysokosc wzrost INT; Usunięcie kolumny mysql> ALTER TABLE klient DROP COLUMN wiek, DROP COLUMN wzrost, DROP COLUMN waga, DROP COLUMN koczu; 18

19 Modyfikacja struktury tabeli - ALTER TABLE Zmiana nazwy tabeli mysql> ALTER TABLE klient RENAME klienci; zmieniamy pozostawiając swoje inicjały np. klienci_jk 19

20 ZADANIA (1) 1. Utwórz następujące tabele (sam zdecyduj o typach kolumn, nazwach itp.): Tablica 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. Tablica ETATY (dodaj na końcu nazwy tabeli swoje inicjały) z następującymi kolumnami: numer etatu, nazwa etatu, pensum. Tablica ZAKŁADY (dodaj na końcu nazwy tabeli swoje inicjały) z następującymi kolumnami: numer zakładu, nazwa, adres, numer kierownika (ten sam co numer pracownika).

21 Dodawanie rekordów - INSERT mysql> INSERT INTO klienci VALUES ( "Jan", "Kowalski", , "jkowal@o2.pl", NULL); dane typu tekstowego wpisujemy w cudzysłowach (mogą być również apostrofy - nowsze wersje mysql-a nie rozróżniają tego) wartość NULL powoduje, że pola o własności AUTO_INCREMENT podnosi swoją wartość o jeden w stosunku do wartości w poprzednim rekordzie (jest to nasz pierwszy wpis, więc pole ID przyjmie wartość 1. Gdyby był to któryś kolejny wpis, pole ID przyjęłoby wartość o jeden wyższą od poprzedniej Przy okazji wartości NULL należy wspomnieć również o polu typu TIMESTAMP. Jeśli przypiszemy temu polu wartość NULL, zawierać ono będzie datę wstawienia rekordu. 21

22 Dodawanie rekordów - INSERT 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: mysql> INSERT INTO klienci VALUES ("Marek"); ERROR: Column count doesn't match value count at row 1 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 podać pola, które mają być wypełnione wartościami. Robimy to tak jak poniżej: mysql> INSERT INTO klienci (imie, nazwisko) VALUES ("Marek", "Nowak"); Query OK, 1 row affected 22

23 Wstawianie rekordów - REPLACE Instrukcja REPLACE działa dokładnie tak samo, jak instrukcja INSERT, z jednym wyjątkiem: jeżeli w tabeli istnieje już wiersz o wartości klucza głównego lub indeksu UNIQUE takiej samej, jak dla wiersza wstawianego, wiersz taki zostanie usunięty przed wstawieniem nowego. Instrukcja INSERT w takiej sytuacji pomija wstawienie nowego wiersza (i generuje ostrzeżenie). mysql> REPLACE INTO klienci (imie, nazwisko, kid) VALUES ("Jacek", "Nowak", 2); Query OK, 2 rows affected 23

24 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

25 Wybieranie rekordów - SELECT mysql> SELECT * FROM klienci; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Jacek Nowak rows in set Wydanie polecenia SELECT * FROM nazwa_tabeli powoduje wypisanie wszystkich rekordów zawartych w tabeli. 25

26 Wybieranie rekordów - SELECT mysql> SELECT imie, FROM klienci; imie Jan jkowal@o2.pl Jacek rows in set 26

27 Wybieranie rekordów - operator WHERE mysql> SELECT * FROM klienci WHERE imie = "Jan"; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl row in set mysql> SELECT imie, nazwisko FROM klienci WHERE imie = "Jan"; imie nazwisko Jan Kowalski row in set 27

28 Wybieranie rekordów - operator WHERE - warunki = równe <>,!= różne < mniejsze > większe <= mniejsze lub równe >= większe lub równe mysql> SELECT * FROM klienci WHERE kid < 2; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl row in set 28

29 Wybieranie rekordów - operator WHERE + LIKE mysql> SELECT * FROM klienci WHERE imie LIKE '%Ja%'; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Jacek Nowak rows in set Znak % oznacza dowolny ciąg znaków mysql> SELECT * FROM klienci WHERE nazwisko LIKE '%wal%'; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl row in set 29

30 Wybieranie rekordów - operator WHERE + LIKE mysql> SELECT * FROM klienci WHERE imie LIKE '_an'; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl row in set Znak _ oznacza dokładnie jeden znak mysql> SELECT * FROM klienci WHERE nazwisko LIKE '_owa%'; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Jacek Nowak rows in set 30

31 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'; 31

32 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.

33 Wybieranie rekordów - operator CONCAT Funkcja CONCAT 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. mysql> SELECT CONCAT(imie, ' ', nazwisko) AS klient, FROM klienci; klient Jan Kowalski jkowal@o2.pl Jacek Nowak rows in set 33

34 Usuwanie rekordów - DELETE mysql> DELETE FROM klienci WHERE imie = "Jacek"; Query OK, 1 row affected mysql> SELECT * FROM klienci; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl row in set 34

35 Modyfikacje danych - UPDATE mysql> UPDATE klienci SET telefon = WHERE imie = "Jan"; Query OK, 1 row affected mysql> SELECT * FROM klienci; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl row in set 35

36 Selekcja rekordów - wyrażenia logiczne AND, OR, NOT Przygotowanie tabeli - wprowadzany klika rekordów mysql> INSERT INTO klienci VALUES ("Jacek", "Nowak", , "jnowak@o2.pl", NULL); mysql> INSERT INTO klienci VALUES ( "Marek", "Wielki", , "mwielki@o2.pl", NULL); mysql> SELECT * FROM klienci; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Jacek Nowak jnowak@o2.pl 3 Marek Wielki mwielki@o2.pl rows in set 36

37 Selekcja rekordów - wyrażenia logiczne AND, OR, NOT AND (&&) mysql> SELECT * FROM klienci WHERE imie = "Marek" AND nazwisko = "Wielki"; imie nazwisko telefon kid Marek Wielki mwielki@o2.pl row in set Operacja ta wyświetli wszystkie rekordy zawierające w polu imie wartość "Marek" i (AND) w polu nazwisko wartość "Wielki". 37

38 Selekcja rekordów - wyrażenia logiczne AND, OR, NOT OR ( ) mysql> SELECT * FROM klienci WHERE imie = "Marek" OR imie = "Jacek"; imie nazwisko telefon kid Jacek Nowak jnowak@o2.pl 3 Marek Wielki mwielki@o2.pl rows in set 38

39 Selekcja rekordów - wyrażenia logiczne AND, OR, NOT NOT (!) mysql> SELECT * FROM klienci WHERE NOT telefon = ; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Marek Wielki mwielki@o2.pl rows in set 39

40 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.

41 Selekcja rekordów - grupowanie tych samych wyrażeń logicznych - IN Zamiast podawać kilku wyrażeń logicznych: mysql> SELECT * FROM klienci WHERE kid=1 OR kid=2 OR kid=3; Można posłużyć się słowem kluczowym IN: mysql> SELECT * FROM klienci WHERE kid IN (1,2,3); imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Jacek Nowak jnowak@o2.pl rows in set 41

42 Selekcja rekordów - określenie zakresu - BETWEEN Zamiast stosowania operatorów : mysql> SELECT * FROM klienci WHERE kid >= 2 AND kid <= 4; Można wykorzystać możliwości BETWEEN: mysql> SELECT * FROM klienci WHERE kid BETWEEN 2 AND 4; imie nazwisko telefon kid Jacek Nowak jnowak@o2.pl 3 Marek Wielki mwielki@o2.pl rows in set 42

43 Selekcja rekordów - pomijanie duplikatów - DISTINCT Dodamy sobie do bazy drugą osobę z imieniem Jan. mysql> INSERT INTO klienci VALUES ("Jan", "Malwa", , "jmalwa@o2.pl", NULL); mysql> SELECT imie FROM klienci; mysql> SELECT DISTINCT imie FROM klienci; imie Jan Jacek Marek Pokazuje tylko unikalne rekordy imie Jan Jacek Marek Jan

44 Sortowanie danych ORDER BY mysql> SELECT * FROM klienci ORDER BY telefon; imie nazwisko telefon kid Marek Wielki mwielki@o2.pl 4 Jacek Nowak jnowak@o2.pl 3 Jan Kowalski jkowal@o2.pl rows in set 44

45 Sortowanie danych ORDER BY - ASC A->Z mysql> SELECT * FROM klienci ORDER BY nazwisko ASC; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Jacek Nowak jnowak@o2.pl 3 Marek Wielki mwielki@o2.pl rows in set 45

46 Sortowanie danych ORDER BY - DESC Z->A mysql> SELECT * FROM klienci ORDER BY nazwisko DESC; imie nazwisko telefon kid Marek Wielki mwielki@o2.pl 4 Jacek Nowak jnowak@o2.pl 3 Jan Kowalski jkowal@o2.pl rows in set 46

47 Ograniczanie liczy wyników zapytania - LIMIT mysql> SELECT * FROM klienci LIMIT 2; imie nazwisko telefon kid Jan Kowalski jkowal@o2.pl 1 Jacek Nowak jnowak@o2.pl rows in set rekord początkowy (numeracja od 0) liczba rekordów mysql> SELECT * FROM klienci LIMIT 1, 2; imie nazwisko telefon kid Jacek Nowak jnowak@o2.pl 3 Marek Wielki mwielki@o2.pl rows in set 47

48 Zliczenie liczby znaków w komórce mysql> SELECT CHAR_LENGTH(nazwisko) FROM klienci; CHAR_LENGTH(nazwisko rows in set 48

49 Połączenie funkcji - Sortowanie + limitowanie mysql> SELECT * FROM klienci ORDER BY nazwisko ASC LIMIT 2; imie nazwisko telefon kid Jan Malwa jmalwa@o2.pl 5 Jan Kowalski jkowal@o2.pl rows in set (0.06 sec) 49

50 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.

51 Wyrażenia regularne - filtrowanie, wyszukiwanie danych 51

52 Wyrażenia regularne - filtrowanie, wyszukiwanie danych mysql> SELECT nazwisko FROM klienci WHERE nazwisko regexp 'owa'; nazwisko Kowalski Nowak rows in set 52

53 Wyrażenia regularne - filtrowanie, wyszukiwanie danych Operator logiczny OR mysql> SELECT nazwisko FROM klienci WHERE nazwisko regexp 'o k'; nazwisko Kowalski Nowak Wielki rows in set 53

54 Wyrażenia regularne - filtrowanie, wyszukiwanie danych Operator ^ wskazuje na pierwszą literę mysql> SELECT imie FROM klienci WHERE imie regexp '^J'; imie Jan Jacek Jan rows in set 54

55 Wyrażenia regularne - filtrowanie, wyszukiwanie danych Operator $ wskazuje na ostatnią literę mysql> SELECT imie FROM klienci WHERE imie regexp 'k$'; imie Jacek Marek rows in set 55

56 Wyrażenia regularne - filtrowanie, wyszukiwanie danych Operator. wskazuje na jedną literę mysql> SELECT imie FROM klienci WHERE imie regexp '^J.n$'; imie Jan Jan rows in set 56

57 Wyrażenia regularne - filtrowanie, wyszukiwanie danych Operator.+ wskazuje na dowolną liczbę liter mysql> SELECT imie FROM klienci WHERE imie regexp '.+k$'; imie Jacek Marek rows in set 57

58 Wyrażenia regularne - filtrowanie, wyszukiwanie danych Umieszczenie szukanego znaku przed operatorem + reprezentuje dowolną liczbę tego znaku w przeszukiwanych komórkach mysql> SELECT telefon FROM klienci WHERE telefon regexp '^6185+'; telefon rows in set 58

59 Wyrażenia regularne - filtrowanie, wyszukiwanie danych Operator {} umożliwia określenie liczby poszukiwanego znaku mysql> SELECT telefon FROM klienci WHERE telefon regexp '^6185{6}'; telefon rows in set telefon mysql> SELECT telefon FROM klienci WHERE telefon regexp '^6185{1,6}'; zakres rows in set 59

60 Wyrażenia regularne - filtrowanie, wyszukiwanie danych Operator [] wskazuje na szukanie podanych znaków, a operator + wskazuje na ich dowolną liczbę od mysql> SELECT FROM klienci WHERE regexp '[ja]+'; jkowal@o2.pl jnowak@o2.pl jmalwa@o2.pl rows in set Dla operatora * szukamy od

61 Wyrażenia regularne - filtrowanie, wyszukiwanie danych mysql> SELECT FROM klienci WHERE regexp '^j[k]{1}.+l$'; operator {} wskazuje na ich konkretną liczbę lub zakres mysql> SELECT imie FROM klienci WHERE imie regexp '^[a-z]+$'; zakres szukanych znaków mysql> SELECT imie FROM klienci WHERE imie regexp '^[^j]+$'; wyszukanie wszystkich znaków z wyjątkiem litery j 61

62 Wyrażenia regularne - filtrowanie, wyszukiwanie danych Praktyczny przykład - sprawdzenie poprawności wprowadzonego adresu mysql> SELECT FROM klienci WHERE regexp '^[A-Za-z0-9_]+@[A-Za-z0-9\-]+\.[A-Za-z0-9.\-]+$'; jkowal@o2.pl jnowak@o2.pl mwielki@o2.pl jmalwa@o2.pl rows in set 62

63 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.

64 Łą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. 64

65 Łączenie tabel (relacje) 65

66 Łączenie tabel (relacje) - utworzenie tabel roboczych mysql> CREATE TABLE zamowienia ( zid INT UNSIGNED NOT NULL AUTO_INCREMENT, kid INT UNSIGNED, koszt DECIMAL(6,2), data DATE, PRIMARY KEY (zid) ); INSERT INTO zamowienia VALUES (NULL, 5, 64.98, ); INSERT INTO zamowienia VALUES (NULL, 5, 34.98, ); INSERT INTO zamowienia VALUES (NULL, 1, 39.99, ); INSERT INTO zamowienia VALUES (NULL, 3, 14.97, ); INSERT INTO zamowienia VALUES (NULL, 5, 24.99, ); INSERT INTO zamowienia VALUES (NULL, 4, 79.98, ); INSERT INTO zamowienia VALUES (NULL, 1, 24.95, ); 66

67 Łączenie tabel (relacje) - utworzenie tabel roboczych mysql> CREATE TABLE produkty ( pid INT UNSIGNED NOT NULL AUTO_INCREMENT, cena DECIMAL(6,2), nazwa CHAR(20), PRIMARY KEY (pid) ); INSERT INTO produkty VALUES (NULL, 70.50, "myszka"); INSERT INTO produkty VALUES (NULL, 2.90, "szmatka"); INSERT INTO produkty VALUES (NULL, 11.15, "podkladka"); INSERT INTO produkty VALUES (NULL, 35.60, "klawiatura"); INSERT INTO produkty VALUES (NULL, 5.90, "slizgacze"); INSERT INTO produkty VALUES (NULL, 8.90, "kabel"); 67

68 Łączenie tabel (relacje) - utworzenie tabel roboczych mysql> CREATE TABLE zam_prod ( zid INT UNSIGNED, pid INT UNSIGNED, ilosc TINYINT(3) ); 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); 68

69 Łą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; 69

70 Łą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. 70

71 Łą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. 71

72 Złączenie wewnętrzne Projektowanie baz danych składnia SQL-89 cel zapytania: Pokaż datę i koszt wszystkich zamówień. SELECT klienci.nazwisko, zamowienia.data, zamowienia.koszt FROM klienci INNER JOIN zamowienia WHERE zamowienia.kid = klienci.kid; Zazwyczaj zamiast klauzuli INNER JOIN piszemy samo JOIN albo rozdzielamy tabele przecinkami. 72

73 Złączenie wewnętrzne - aliasy tabel Projektowanie baz danych składnia SQL-89 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; 73

74 Złączenie wewnętrzne Projektowanie baz danych składnia SQL-89 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; 74

75 Złączenie wewnętrzne - NATURAL JOIN Projektowanie baz danych Dla złączenia tabel względem WSZYSTKICH KOLUMN MAJĄCYCH TAKIE SAME NAZWY. składnia SQL-92 cel zapytania: Pokaż datę i koszt wszystkich zamówień. SELECT klienci.nazwisko, zamowienia.data, zamowienia.koszt FROM klienci NATURAL JOIN zamowienia; 75

76 Złączenie wewnętrzne - klauzula USING składnia SQL-92 Dla złączenia tabel względem NIEKTÓRYCH KOLUMN, MAJĄCYCH TAKIE SAME NAZWY. cel zapytania: Pokaż datę i koszt wszystkich zamówień. SELECT klienci.nazwisko, zamowienia.data, zamowienia.koszt FROM klienci JOIN zamowienia USING (kid); 76

77 Złączenie wewnętrzne - klauzula ON Projektowanie baz danych Dla złączenia tabel względem NIEKTÓRYCH KOLUMN, MAJĄCYCH RÓŻNE NAZWY. 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; składnia SQL-92 77

78 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?

79 Łą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. 79

80 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", NULL); INSERT INTO klienci VALUES ("Hubert", "Mocny", , "hmocny@o2.pl", NULL); INSERT INTO klienci VALUES ("Grzegorz", "Wolny", , "gwolny@o2.pl", NULL); 2. Wstawiamy zamówienia z błędami (brak przypisanych klientów): INSERT INTO zamowienia VALUES (NULL, NULL, 32.45, ); INSERT INTO zamowienia VALUES (NULL, NULL, 12.95, ); INSERT INTO zamowienia VALUES (NULL, NULL, 21.31, ); 80

81 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 USING (kid); Przy złączeniu wewnętrznym osoby te zostaną pominięte 81

82 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 USING (kid); Widzimy błędy w bazie? Zamówienia nie są przypisane do żadnego z naszych klientów. 82

83 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 83

84 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. 84

85 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?

86 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. 86

87 Funkcje agregujące - suma cel zapytania: Ile każdy z klientów wydał na zakupy. SELECT CONCAT(nazwisko, SPACE(1), imie) AS klient, SUM(koszt) AS wydatki FROM klienci JOIN zamowienia USING (kid) GROUP BY nazwisko; Utworzenie aliasu dla powstałej kolumny 87

88 Funkcje agregujące - suma + sortowanie cel zapytania: Ile każdy z klientów wydał na zakupy. SELECT CONCAT(nazwisko, SPACE(1), imie) AS klient, SUM(koszt) AS wydatki FROM klienci JOIN zamowienia USING (kid) GROUP BY nazwisko ORDER BY wydatki DESC; 88

89 Funkcje agregujące - maksimum + sortowanie cel zapytania: Jakie było najdroższe zamówienie klienta. SELECT CONCAT(nazwisko, SPACE(1), imie) AS klient, MAX(koszt) AS wydatki FROM klienci JOIN zamowienia USING (kid) GROUP BY nazwisko ORDER BY wydatki DESC; 89

90 Funkcje agregujące - średnia + sortowanie cel zapytania: Jaka jest średnia z zamówień danego klienta. SELECT CONCAT(nazwisko, SPACE(1), imie) AS klient, AVG(koszt) AS wydatki FROM klienci JOIN zamowienia USING (kid) GROUP BY nazwisko ORDER BY wydatki DESC; 90

91 Funkcje agregujące - zliczanie + sortowanie cel zapytania: Jaka jest liczba zamówień danego klienta. SELECT CONCAT(nazwisko, SPACE(1), imie) AS klient, COUNT(zID) AS lzamowien FROM klienci JOIN zamowienia USING (kid) GROUP BY nazwisko ORDER BY lzamowien DESC; 91

92 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 CONCAT(nazwisko, SPACE(1), imie) AS klient, COUNT(zID) AS lzamowien FROM klienci JOIN zamowienia USING (kid) GROUP BY nazwisko HAVING lzamowien > 1 ORDER BY lzamowien DESC; 92

93 Funkcje agregujące + klauzula WITH ROLLUP Dodaje jeden dodatkowy rekord sumujący wszystkie wyświetlone wyżej rekordy cel zapytania: Pokaż listę produktów, które są kupowane oraz liczbę sprzedanych sztuk. Dodatkowo pokaż sumę dwóch ostatnich kolumn. SELECT nazwa, cena, ilosc FROM zam_prod JOIN produkty USING (pid) GROUP BY nazwa WITH ROLLUP; 93

94 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?

95 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. 95

96 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 96

97 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 ); 97

98 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 ); 98

99 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' ); 99

100 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.

101 Transakcje Transakcje są grupami instrukcji języka SQL, traktowanymi z punktu widzenia ich przetwarzania jako jedna całość. START TRANSACTION; zapytanie1; zapytanie2; zapytanien; COMMIT; > Zmiany zostają zatwierdzone START 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ć. 101

102 Transakcje - blokowanie tabel 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 przed wykonaniem transakcji zablokować odpowiednie tabele. LOCK TABLES klienci READ; Znacznik określający parametry blokady : READ - chcę czytać tabelę i w tym czasie nie zezwalam na zapis, WRITE - chcę zmieniać zawartość tablicy i w tym czasie nie zezwalam innym ani na zapis ani na odczyt, LOW PRIORITY WRITE - pozwalam innym na założenie blokady READ; w tym czasie mój wątek z LOW PRIORITY WRITE musi czekać, aż tamten wątek zwolni blokadę. UNLOCK TABLES; 102

103 Transakcje - przykład Wykonamy proste połączenie kilku zapytań z klauzulą SELECT. START TRANSACTION; SELECT * FROM klienci WHERE imie = 'Jan'; SELECT * FROM zamowienia ORDER BY koszt; SELECT nazwa, cena FROM produkty WHERE cena > 5; COMMIT; 103

104 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! 104

105 Widoki Projektowanie baz danych mysql> 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: mysql> SELECT * FROM klientci_kontakt WHERE imie LIKE '%Ja%'; imie nazwisko telefon Jan Kowalski Jacek Nowak Jan Malwa rows in set Widoki umożliwiają prezentowanie danych w sposób najbardziej wygodny dla użytkowników, niezależnie od struktury tabel fizycznych. 105

106 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. 106

107 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 zwraca odpowiedź - EMPTY SET. Zmieniamy więc warunek: SELECT * FROM klienci_zam WHERE nazwisko = 'Kowal'; 107

108 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. 108

109 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'; Error: Can not delete from join view 'student.klienci_zam' 109

110 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, cena, ilosc FROM zam_prod JOIN produkty USING (pid) GROUP BY nazwa; Zmodyfikujemy widok tak aby pokazywał tylko drogie produkty: ALTER VIEW prod AS SELECT nazwa, cena, ilosc FROM zam_prod JOIN produkty WHERE zam_prod.pid = produkty.pid AND cena > 20 GROUP BY nazwa; 110

111 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. mysql> DROP VIEW klienci_zam; mysql> DROP VIEW prod; Query OK 111

112 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.

113 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: mysql> CREATE PROCEDURE promocja(in produkt CHAR(20)) UPDATE produkty SET cena = cena * 0.9 WHERE nazwa = produkt; 113

114 Procedury składowe I teraz możemy ją wywołać podając jako argument produkt podlegający promocji: mysql> CALL promocja("myszka"); W efekcie wywołaliśmy funkcję, która spowodowała obniżenie ceny produktu. 114

115 Procedury składowe wyświetlenie listy mysql> SHOW PROCEDURE STATUS; Procedury składowe wyświetlenie zawartości mysql> SHOW CREATE PROCEDURE promocja; Procedury składowe - usuwanie mysql> DROP PROCEDURE promocja; Query OK 115

116 Procedury składowe IF THEN ELSE IF warunek THEN zadania(a) ELSE zadania(a) END IF Poniżej zamieszczony przykład nie działa w nakładce myclient, można go sprawdzić za pomocą klienta z linii komend. 1. Logujemy się na serwer (tak jak na slajdzie 2) 2. Podłączamy do bazy danych (tak jak na slajdzie 2) 3. Kopiujemy kod do okna z linią komend. 4. Zmieniamy domyślny znak końca linii (jest to niezbędne w trybie pracy z procedurami) DELIMITER // [ENTER] 116

117 Procedury składowe IF THEN ELSE 5. Definiujemy procedurę: CREATE PROCEDURE ocena_ceny(in cena INT) BEGIN IF (cena > 20) THEN SELECT 'drogie'; ELSE SELECT 'tanie'; END IF; END // Podobnie jak przy tablicach dodajemy swoje inicjały [ENTER] 6. Ustawiamy ponownie standardowy znak końca instrukcji: DELIMITER ; [ENTER] 7. Uruchamiamy procedurę podając wprost cenę produktu: CALL ocena_ceny(10); [ENTER] 117

118 Procedury składowe IF THEN ELSE 8. Możemy też utworzyć na podstawie naszych tablic zmienną i sprawdzić jaka jest cena w danej komórce. Tworzymy zmienną: FROM produkty WHERE pid=1; 9. Sprawdzamy procedurą jej wielkość: CALL ocena_ceny(@cena); 118

119 Procedury składowe CASE CASE zmienna WHEN przypadek1 zadanie(a) WHEN przypadek2 zadanie(a) ELSE zadanie(a) END CASE Aby sprawdzić poniższy przykład korzystamy z klienta z linii komend. Wszystko wykonujemy tak jak poprzednio FROM klienci WHERE kid=1; DELIMITER // CREATE PROCEDURE fajne_imie(in imie VARCHAR(30)) BEGIN CASE imie WHEN 'Jan' THEN SELECT 'TAK'; ELSE SELECT 'NIE'; END CASE; END// DELIMITER ; CALL fajne_imie(@imie); 119

120 Procedury składowe WHILE Aby sprawdzić poniższy przykład korzystamy z klienta z linii komend. Wszystko wykonujemy tak jak poprzednio DELIMITER // CREATE PROCEDURE petla(in i INT) BEGIN WHILE (i < 5) DO SELECT * FROM klienci WHERE kid = i; SET i=i+1; END WHILE; Wartość początkowa i END// DELIMITER ; CALL petla(4); 120

121 Procedury składowe REPEAT UNTIL Aby sprawdzić poniższy przykład korzystamy z klienta z linii komend. Wszystko wykonujemy tak jak poprzednio DELIMITER // CREATE PROCEDURE petla3(in i INT) BEGIN REPEAT SELECT * FROM klienci WHERE kid = i; SET i=i+1; UNTIL (i>5) END REPEAT; END// DELIMITER ; CALL petla2(5); 121

122 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 nazwa_wyzwalacza {BEFORE AFTER} {zdarzenie_1 [OR zdarzenie_2] [OR...]} ON nazwa_tabeli FOR EACH ROW EXECUTE PROCEDURE nazwa_procedury (argumenty,...); DROP TRIGGER nazwa_wyzwalacza; 122

123 Wyzwalacze Wyzwalacze są procedurami wykonywanymi automatycznie po zmianie zawartości wskazanej tabeli. Aby sprawdzić poniższy przykład korzystamy z klienta z linii komend. DELIMITER // CREATE TRIGGER cofnij AFTER UPDATE ON klienci FOR EACH ROW BEGIN = OLD.imie; = NEW.imie; END// DELIMITER ; UPDATE klienci SET imie = "Marcin" WHERE nazwisko = 123

124 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; 124

125 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 125

126 Klucze obce (foregin key) UPDATE produkty SET pid = 7 WHERE pid = 3; Zawartość tabel po zmianie: Tabela produkty Tabela zam_prod 126

127 PHP szablon pliku HTML Zanim przystąpimy do implementacji kodu w PHP musimy utworzyć prosty szablon HTMLowy. Do edycji plików.php wykorzystamy darmowy program pspad, który wyróżnia się od innych zamienników notatnika takimi cechami jak: wbudowany klient ftp czy automatyczne kodowanie znaków w wybrany standardzie. Procedura zapisu pliku.php na serwerze WWW 1. Uruchamiamy program pspad. 2. Z belki umieszczonej po lewej stronie wybieramy zakładkę FTP. 3. Klikamy na ikonkę połączenia i z listy wybieramy pozycję serwer. 4. W okienku po lewej zobaczymy listę dostępnych na serwerze plików. 5. Aby utworzyć nowy plik klikamy prawym klawiszem myszki i z menu podręcznego wybieramy opcję Nowy plik i wpisujemy swoje nazwisko oraz rozszerzenie php. 6. Aby plik otworzyć do edycji klikamy na nim dwa razy. 127

128 PHP szablon pliku HTML Wpisujemy do pliku poniższy szablon: W tym miejscu będziemy wpisywać kod PHP 128

129 PHP - połączenie z bazą danych Aby połączyć się z bazą danych używamy komendy: mysql_connect Poniższy przykład pokazuje jak połączyć się z serwerem localhost jako użytkownik student, z hasłem student: $polaczenie "student", "student"); Funkcja mysql_connect zwróci wartość TRUE, jeśli zakończy się sukcesem, jeśli nie powiedzie się - zwróci wartość FALSE. Dodatkowo możemy wprowadzić kod sprawdzający czy udało nam się połączyć: if ($polaczenie) echo "Połączono z serwerem"; else echo "Nie można się połączyć"; 129

130 PHP - połączenie z bazą danych Z reguły jednak do połączenia i sprawdzenia jego stanu używa się trochę zgrabniejszej konstrukcji: $polaczenie 'student', 'student') or die('nie można się połączyć: '. mysql_error()); print ('Połączenie nawiązane'); mysql_close($polaczenie); Funkcja przerywa wykonywanie dalszego kodu Operator. umożliwia w php łączenie ciągów znakowych 130

131 PHP - tworzenie nowej bazy oraz jej wybieranie Podobnie jak z poziomu języka SQL także w PHP można utworzyć nową bazę danych: mysql_create_db("student"); Zanim będziemy mogli zdefiniować i uruchomić zapytanie należy wybrać bazę na której będziemy pracować: mysql_select_db("student", $polaczenie); Kod ten wstawiamy oczywiście przed funkcją zamykającą połączenie z serwerem. Od tej pory można już wykonywać różne operacje w bazie 'student'. 131

132 PHP dostęp do danych Pierwszym zapytaniem SQLowym, które zdefiniujemy będzie kod pobierający wszystkie wiersze z tabeli klienci: $zapytanie = "SELECT * FROM klienci"; Zapytanie uruchamiamy i wszystko co zwróci wprowadzamy do zmiennej $wynik: $wynik = mysql_query($zapytanie, $polaczenie); 132

133 PHP - dostęp do danych Teraz pozostaje tylko rozbicie struktury z danymi i wydrukowanie tablicy w oknie przeglądarki: echo '<table border=1>'; while ($wiersz = mysql_fetch_row($wynik)) { echo '<tr><td>'.$wiersz[4].'</td><td>'.$wiersz[0]. '</td><td>'.$wiersz[1].'</td><td>'.$wiersz[2]. '</td><td>'.$wiersz[3].'</td></tr>'; } echo '</table>'; 133

134 PHP - dostęp do danych Jeżeli chcemy mieć pełniejszą kontrolę nad danymi możemy przypisać każdą z kolumn odpowiednim zmiennym: mysql_free_result( $wynik ); $wynik = mysql_query($zapytanie, $polaczenie); echo '<table border=1 bgcolor=yellow>'; while ($wiersz = mysql_fetch_array($wynik)) { $aid = $wiersz['kid']; $aimie = $wiersz['imie']; $anazwisko = $wiersz['nazwisko']; $atelefon = $wiersz['telefon']; $a = $wiersz[' ']; echo "<tr><td>$aid</td><td>$aimie</td> <td>$anazwisko</td><td>$atelefon</td> <td>$a </td></tr>"; } echo '</table>'; 134

135 PHP - dostęp do danych sortowanie po przyciśnięciu na nazwę kolumny Kontynuujemy dalej w tym samym pliku: 1. Czyścimy zapytanie i kończymy blok z php. mysql_free_result( $wynik );?> 2. Wstawiamy nagłówki kolumn, które będą aktywnymi przyciskami. <table border=1><tr> Wstawiamy własną nazwę pliku <td><form ACTION="index.php" METHOD=POST> <INPUT TYPE=SUBMIT value="kid" name="sort"></form></td> <td><form ACTION="index.php" METHOD=POST> <INPUT TYPE=SUBMIT value="imie" name="sort"></form></td> <td><form ACTION="index.php" METHOD=POST> <INPUT TYPE=SUBMIT value="nazwisko" name="sort"></form></td> <td><form ACTION="index.php" METHOD=POST> <INPUT TYPE=SUBMIT value="telefon" name="sort"></form></td> <td><form ACTION="index.php" METHOD=POST> <INPUT TYPE=SUBMIT value=" " name="sort"></form></td></tr> 135

136 PHP - dostęp do danych sortowanie po przyciśnięciu na nazwę kolumny 3. Otwieramy ponownie blok php i przypisujemy zmiennej $Sort wartość wynikającą z wciśniętego wcześniej przycisku. Każdy z przycisków ma tą nazwę pod którą zwraca inny ciąg. <?php $Sort = $_POST['Sort']; 4. Ustawiamy zapytanie w zależności od wartości zmiennej $Sort. if ($Sort!= "") $zapytanie = "SELECT * FROM klienci ORDER BY ".$Sort; else $zapytanie = "SELECT * FROM klienci"; 136

137 PHP - dostęp do danych sortowanie po przyciśnięciu na nazwę kolumny 5. I dalej identycznie jak w poprzednich przykładach. $wynik = mysql_query($zapytanie, $polaczenie); echo '<table border=1 bgcolor=yellow>'; while ($wiersz = mysql_fetch_array($wynik)) { $aid = $wiersz['kid']; $aimie = $wiersz['imie']; $anazwisko = $wiersz['nazwisko']; $atelefon = $wiersz['telefon']; $a = $wiersz[' ']; echo "<tr><td>$aid</td><td>$aimie</td> <td>$anazwisko</td><td>$atelefon</td> <td>$a </td></tr>"; } echo '</table>'; 137

138 PHP komunikacja z użytkownikiem przechwycenie danych wprowadzanych przez użytkownika, wyszukiwanie danych, obsługa wyjątków, uzupełnianie bazy danych, wgrywanie plików do systemu. Przykład składa się z dwóch plików: a) szukajklienta.php zawiera formularz za pomocą którego użytkownik ma możliwość komunikacji z naszym systemem, b) szukaj.php plik zawiera skrypt wyszukujący klienta w bazie. Każdy jak zwykle dodaje na końcu nazwy plików swoje inicjały. 138

139 PHP komunikacja z użytkownikiem 1. Formularz (pierwszy plik) Rozpoczynamy od napisania strony z formularzem. Otwieramy program pspad wykorzystując jako podstawę naszego pliku szukajklienta.php szablon z poprzedniego przykładu: 139

140 PHP komunikacja z użytkownikiem Zmieniamy tytuł strony na Lista klientów: wyszukiwanie i możemy usunąć znaczniki<?php i?> ponieważ w tym dokumencie nie użyjemy kodu PHP. Do implementacji operacji wyszukiwania płyt wykorzystamy dostępne w języku HTML formularze w połączeniu z aktywnymi skryptami PHP. 140

141 PHP komunikacja z użytkownikiem Zaprojektowany formularz wykorzystuje plik szukaj.php zawierający bardzo prostą funkcję wyszukiwania. Jako metodę wykorzystujemy POST alternatywnie możemy wykorzystać metodę GET ale w naszym przypadku gdy mamy małą liczbę danych wystarczy ta pierwsza. Do wprowadzania danych i potwierdzenia operacji wykorzystamy okno typu INPUT. Parametrem nazwisko definiujemy nazwę zmiennej pod którą znajdzie się nazwisko szukanego klienta. Zmienna te wykorzystywana będzie przez skrypt w pliku szukaj.php. Zapisujemy plik pod nazwą szukajklienta.php dodając po nazwie swoje inicjały. 141

142 PHP komunikacja z użytkownikiem Możemy teraz przetestować działanie naszej strony. Otwieramy dowolną przeglądarkę wpisujemy adres serwera wchodzimy do katalogu cw i klikamy na nasz plik. A oto efekt działania wprowadzonego kodu, prosty formularz: 142

143 PHP komunikacja z użytkownikiem 2. Kod PHP (drugi plik) Teraz zajmiemy się implementacją skryptu wyszukiwania - szukaj.php. Tworzymy nowy dokument (korzystamy ponownie z szablonu). 143

144 PHP komunikacja z użytkownikiem Najpierw sprawdzimy czy nazwa z naszego formularza pobierana jest przez skrypt PHP. W nowym pliku dodajemy zwykłą linię echo. Zapisujemy plik i testujemy formularz, wpisujemy w oknie INPUT dowolny ciąg znakowy i wciskamy przycisk szukaj. Jeżeli wpisany w oknie ciąg pojawi się w oknie przeglądarki oznacza to, że nasz kod działa poprawnie i możemy przejść do implementacji mechanizmów wyszukiwania. 144

145 PHP komunikacja z użytkownikiem Usuwamy linię z instrukcją echo i rozpoczynamy od zdefiniowania parametrów połączenia z bazą danych. Następnie przystępujemy do zaprojektowania zapytania które zwróci nam interesujące dla użytkownika informacje. Jako parametr wykorzystamy zmienną $nazwa w połączeniu z klauzulą LIKE która pozwoli nam wyszukać sklep podając tylko część jego nazwy. 145

146 PHP komunikacja z użytkownikiem Teraz zdefiniujemy zmienną z wynikami zapytania i w pętli przeszukamy naszą bazę. Dodamy też linię pozwalającą na ponowne przeszukanie bazy danych. 146

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

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

Bardziej szczegółowo

Wykład 5. SQL praca z tabelami 2

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,

Bardziej szczegółowo

Bazy danych 10. SQL Widoki

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

Bardziej szczegółowo

Relacyjne bazy danych. Podstawy SQL

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.

Bardziej szczegółowo

Projektowanie systemów baz danych

Projektowanie 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ółowo

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Ć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ółowo

Relacyjne bazy danych. Podstawy SQL

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.

Bardziej szczegółowo

SQL (ang. Structured Query Language)

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

Bardziej szczegółowo

Wykład 8. SQL praca z tabelami 5

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

Bardziej szczegółowo

Przestrzenne bazy danych Podstawy języka SQL

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

Bardziej szczegółowo

Bazy danych 7. SQL podstawy

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

Bardziej szczegółowo

CREATE USER

CREATE USER Temat: Administrowanie użytkownikami bazy danych. Po instalacji serwera MYSQL dostępne jest konto o nazwie root. Domyślnie nie ma ono przypisanego hasła, aczkolwiek podczas procesu konfiguracji jest możliwość

Bardziej szczegółowo

Język SQL, zajęcia nr 1

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

Bardziej szczegółowo

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

CREATE 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ółowo

Wykład 6. SQL praca z tabelami 3

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

Bardziej szczegółowo

Systemy GIS Tworzenie zapytań w bazach danych

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

Bardziej szczegółowo

Bazy 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 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ółowo

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

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

Bardziej szczegółowo

PROJEKTOWANIE BAZ DANYCH

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

Bardziej szczegółowo

Bazy danych. Polecenia SQL

Bazy 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ółowo

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

Aby 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ółowo

Programowanie 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 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ółowo

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Literatura: 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ółowo

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

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

Bardziej szczegółowo

Ref. 7 - Język SQL - polecenia DDL i DML

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ść

Bardziej szczegółowo

1. Tworzenie tabeli. 2. Umieszczanie danych w tabeli

1. 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ółowo

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

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

Bardziej szczegółowo

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

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

Bardziej szczegółowo

Pawel@Kasprowski.pl Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl

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ść

Bardziej szczegółowo

Połączenie z bazą danych : mysql h u root -p Enter password: *******

Połączenie z bazą danych : mysql h u root -p Enter password: ******* Połączenie z bazą danych : mysql h 127.0.0.1 -u root -p Enter password: ******* wyświetlenie istniejących baz danych: show databases; Database mysql test Uwaga ważny średnik na końcu każdej linii. Tworzenie

Bardziej szczegółowo

Bazy danych i usługi sieciowe

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

Bardziej szczegółowo

Bazy Danych i Usługi Sieciowe

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

Bardziej szczegółowo

Widok Connections po utworzeniu połączenia. Obszar roboczy

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

Bardziej szczegółowo

Ję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. 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ółowo

Paweł Rajba pawel@ii.uni.wroc.pl http://www.itcourses.eu/

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,

Bardziej szczegółowo

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

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

Bardziej szczegółowo

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I Wydział Informatyki Politechnika Białostocka Plan wykładu Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I 1. MySQL 2. Powtórzenie SQL WYKŁAD 2: MySQL: podstawowe obiekty Powtórzenie

Bardziej szczegółowo

1 DML - zapytania, część II Grupowanie Operatory zbiorowe DML - modyfikacja 7. 3 DCL - sterowanie danymi 9.

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

Bardziej szczegółowo

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Laboratorium 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ółowo

Kurs. Podstawy MySQL

Kurs. 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ółowo

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

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

Bardziej szczegółowo

Oracle11g: Wprowadzenie do SQL

Oracle11g: 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ółowo

Instalacja MySQL. http://dev.mysql.com/downloads/mysql/5.0.html#downloads

Instalacja MySQL. http://dev.mysql.com/downloads/mysql/5.0.html#downloads Instalacja MySQL Baza MySQL tworzona jest przez Szwedzką firmę MySQL AB strona domowa projektu to: www.mysql.com Wersję bezpłatną (różniącą się od komercyjnej brakiem wsparcia technicznego, nośnika i podręcznika)

Bardziej szczegółowo

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

Wstę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ółowo

Struktura drzewa w MySQL. Michał Tyszczenko

Struktura drzewa w MySQL. Michał Tyszczenko Struktura drzewa w MySQL Michał Tyszczenko W informatyce drzewa są strukturami danych reprezentującymi drzewa matematyczne. W naturalny sposób reprezentują hierarchię danych toteż głównie do tego celu

Bardziej szczegółowo

Zadania z SQLa (MS SQL Server)

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

Bardziej szczegółowo

Autor: Joanna Karwowska

Autor: Joanna Karwowska Autor: Joanna Karwowska SELECT [DISTINCT] FROM [WHERE ] [GROUP BY ] [HAVING ] [ORDER BY ] [ ] instrukcja może

Bardziej szczegółowo

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 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

Bardziej szczegółowo

Wprowadzenie. Tworzenie widoków

Wprowadzenie. 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ółowo

Wykład 05 Bazy danych

Wykł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ółowo

Ćwiczenie zapytań języka bazy danych PostgreSQL

Ć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ółowo

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy) Zapytania SQL. Polecenie SELECT jest używane do pobierania danych z bazy danych (z tabel lub widoków). Struktura polecenia SELECT SELECT FROM WHERE opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje

Bardziej szczegółowo

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, 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ółowo

Bazy danych. dr inż. Arkadiusz Mirakowski

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)

Bardziej szczegółowo

Bazy danych 5. Samozłaczenie SQL podstawy

Bazy danych 5. Samozłaczenie SQL podstawy Bazy danych 5. Samozłaczenie SQL podstawy P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ semestr letni 2007/08 Przykład kolejowy Tworzymy bazę danych zawierajac a (uproszczony) rozkład jazdy pociagów

Bardziej szczegółowo

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 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ółowo

ACESS- zadania z wykorzystaniem poleceń SQL

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,

Bardziej szczegółowo

Język SQL. instrukcja laboratoryjna. Politechnika Śląska Instytut Informatyki. laboratorium Bazy Danych

Ję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ółowo

Bazy danych 9. SQL Klucze obce Transakcje

Bazy 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ółowo

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

PRZESTRZENNE 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ółowo

Laboratorium Bazy danych SQL 2

Laboratorium 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ółowo

Bazy danych SQL Server 2005

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,

Bardziej szczegółowo

Autor: Joanna Karwowska

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ę,

Bardziej szczegółowo

Przykładowa baza danych BIBLIOTEKA

Przykł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ółowo

Perspektywy 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. 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ółowo

Grupowanie i funkcje agregujące

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,

Bardziej szczegółowo

Autor: Joanna Karwowska

Autor: Joanna Karwowska Autor: Joanna Karwowska SELECT [DISTINCT] FROM [WHERE ] [GROUP BY ] [HAVING ] [ORDER BY ] [ ] instrukcja może

Bardziej szczegółowo

Wykład 4. SQL praca z tabelami 1

Wykład 4. SQL praca z tabelami 1 Wykład 4 SQL praca z tabelami 1 Typy danych Typy liczbowe Typy całkowitoliczbowe Integer types - Typ INTEGER; 32-bitowa liczba ze znakiem z zakresu -2 31 do 2 31 1 - Typ SMALLINT; typ całkowity mniejszy

Bardziej szczegółowo

Bazy 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, 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ółowo

Wprowadzenie do baz danych

Wprowadzenie 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ółowo

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

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

Bardziej szczegółowo

3. Podzapytania, łączenie tabel i zapytań

3. Podzapytania, łączenie tabel i zapytań 3. Podzapytania, łączenie tabel i zapytań I. PODZAPYTANIE (SUBSELECT) oddzielna, ujęta w nawiasy instrukcja SELECT, zagnieżdżona w innej instrukcji SQL, zazwyczaj w instrukcji SELECT w instrukcji SELECT,

Bardziej szczegółowo

Laboratorium Bazy danych SQL 3 1

Laboratorium Bazy danych SQL 3 1 Laboratorium Bazy danych SQL 3 1 F U N K C J E operujące na grupach wierszy: avg([distinct all]kol) oblicza średnią arytmetyczną wartości kolumny kol wszystkich wierszy grupy. count([distinct all]wyr)

Bardziej szczegółowo

Pawel@Kasprowski.pl Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl

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

Bardziej szczegółowo

Język SQL. Rozdział 2. Proste zapytania

Ję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ółowo

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

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 *

Bardziej szczegółowo

Bazy danych 4. SQL podstawy. P. F. Góra

Bazy danych 4. SQL podstawy. P. F. Góra Bazy danych 4. SQL podstawy P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ 2012 Structured Query Language Używane standardy: SQL92 SQL99 SQL:2003 SQL:2006 (dialekt) SQL:2008 (dialekt) SQL:2011 (dialekt)

Bardziej szczegółowo

Autor: Joanna Karwowska

Autor: Joanna Karwowska Autor: Joanna Karwowska Jeśli pobieramy dane z więcej niż jednej tabeli, w rzeczywistości wykonujemy tak zwane złączenie. W SQL istnieją instrukcje pozwalające na formalne wykonanie złączenia tabel - istnieje

Bardziej szczegółowo

Bazy danych Access KWERENDY

Bazy danych Access KWERENDY Bazy danych Access KWERENDY Obiekty baz danych Access tabele kwerendy (zapytania) formularze raporty makra moduły System baz danych MS Access Tabela Kwerenda Formularz Raport Makro Moduł Wyszukiwanie danych

Bardziej szczegółowo

Podstawy języka SQL cz. 2

Podstawy języka SQL cz. 2 Podstawy języka SQL cz. 2 1. Operatory zbiorowe a. UNION suma zbiorów z eliminacją powtórzeń, b. EXCEPT różnica zbiorów z eliminacją powtórzeń, c. INTERSECT część wspólna zbiorów z eliminacją powtórzeń.

Bardziej szczegółowo

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, 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ółowo

Bazy danych. Dr inż. Paweł Kasprowski

Bazy danych. Dr inż. Paweł Kasprowski Plan wykładu Bazy danych Podstawy relacyjnego modelu danych Dr inż. Paweł Kasprowski pawel@kasprowski.pl Relacyjne bazy danych Język SQL Zapytania SQL (polecenie select) Bezpieczeństwo danych Integralność

Bardziej szczegółowo

SQL 4 Structured Query Lenguage

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]...

Bardziej szczegółowo

Wstęp do SQL. copyright: KGiIS WGGiOŚ AGH

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.

Bardziej szczegółowo

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych Języki programowania wysokiego poziomu PHP cz.4. Bazy danych PHP i bazy danych PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych: MySQL moduł mysql albo jego nowsza wersja mysqli (moduł

Bardziej szczegółowo

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

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

Bardziej szczegółowo

BAZY DANYCH JĘZYK ZAPYTAŃ BAZ DANYCH SQL. Microsoft Access. Adrian Horzyk. Akademia Górniczo-Hutnicza

BAZY DANYCH JĘZYK ZAPYTAŃ BAZ DANYCH SQL. Microsoft Access. Adrian Horzyk. Akademia Górniczo-Hutnicza BAZY DANYCH Microsoft Access JĘZYK ZAPYTAŃ BAZ DANYCH SQL Adrian Horzyk Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej Katedra Automatyki i Inżynierii

Bardziej szczegółowo

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Ję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ółowo

Składowane procedury i funkcje

Skł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ółowo

Bazy danych 8. Widoki i wyzwalacze. P. F. Góra

Bazy danych 8. Widoki i wyzwalacze. P. F. Góra Bazy danych 8. Widoki i wyzwalacze P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ 2012 I. Widoki, AKA Perspektywy W SQL tabela, która utworzono za pomoca zapytania CREATE TABLE, nazywa się tabela podstawowa

Bardziej szczegółowo

Laboratorium nr 5. Temat: Funkcje agregujące, klauzule GROUP BY, HAVING

Laboratorium 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

Po prawidłowym podłączeniu do serwera MySQL należy wybrać bazę, na której będziesz pracować:

Po prawidłowym podłączeniu do serwera MySQL należy wybrać bazę, na której będziesz pracować: Język SQL (Structured Query Language} służy do manipulowania danymi umieszczonymi w relacyjnych bazach danych. Jest językiem uniwersalnym, dzięki czemu praca na różnych systemach baz danych sprowadza się

Bardziej szczegółowo

mysql> UPDATE user SET Password=PASSWORD('pass') WHERE user='root'; Query OK, 2 rows affected (0.05 sec) Rows matched: 2 Changed: 2 Warnings: 0

mysql> UPDATE user SET Password=PASSWORD('pass') WHERE user='root'; Query OK, 2 rows affected (0.05 sec) Rows matched: 2 Changed: 2 Warnings: 0 Uprawnienia dla uż ytkowników MANIPULACJA UPRAWNIENIAMI Przechodzimy do cześci nadawania oraz odbierania uprawnie ń. Wszelkie zmiany dotyczące tabel w bazie mysql można przeprowadza ć za pomoc ą znanych

Bardziej szczegółowo

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 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ółowo

Wyzwalacze (triggery) Przykład

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

Bardziej szczegółowo

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska SQL TECHNOLOGIE BAZ DANYCH Wykład 5: Język DDL i DML. SQL (ang. StructuredQueryLanguage) strukturalny język zapytań używany do tworzenia, modyfikowania relacyjnych baz danych oraz do umieszczania i pobierania

Bardziej szczegółowo

SIECI KOMPUTEROWE I BAZY DANYCH

SIECI KOMPUTEROWE I BAZY DANYCH KATEDRA MECHANIKI I ROBOTYKI STOSOWANEJ WYDZIAŁ BUDOWY MASZYN I LOTNICTWA, POLITECHNIKA RZESZOWSKA SIECI KOMPUTEROWE I BAZY DANYCH Laboratorium DB1, DB2: TEMAT: Wprowadzenie do SQL. Praca z pojedyncza

Bardziej szczegółowo

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL Wprowadzenie do SQL SQL - Structured Query Language -strukturalny język zapytań Światowy standard przeznaczony do definiowania, operowania i sterowania danymi w relacyjnych bazach danych Powstał w firmie

Bardziej szczegółowo

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

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}, {

Bardziej szczegółowo