Bazy Danych. SQL Podstawy języka III: powtórzenie. Krzysztof Regulski WIMiIP, KISiM, B5, pok. 408

Podobne dokumenty
Bazy Danych. SQL Podstawy języka II: zapytania. Krzysztof Regulski WIMiIP, KISiM, B5, pok. 408

Wykład 5. SQL praca z tabelami 2

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Autor: Joanna Karwowska

Wykład 6. SQL praca z tabelami 3

Relacyjne bazy danych. Podstawy SQL

Wykład 8. SQL praca z tabelami 5

Paweł Rajba

Wykład 05 Bazy danych

Informatyka (5) SQL. dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro

ACESS- zadania z wykorzystaniem poleceń SQL

Autor: Joanna Karwowska

Relacyjne bazy danych. Podstawy SQL

SQL (ang. Structured Query Language)

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

Przestrzenne bazy danych Podstawy języka SQL

Bazy Danych. SQL Podstawy języka. Krzysztof Regulski WIMiIP, KISiM, B5, pok. 408

Podstawy języka SQL. standardy SQL formułowanie zapytań operacje na strukturach danych manipulowanie danymi. Bazy danych s.5-1

Systemy GIS Tworzenie zapytań w bazach danych

Widok Connections po utworzeniu połączenia. Obszar roboczy

Język SQL, zajęcia nr 1

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

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

- język zapytań służący do zapisywania wyrażeń relacji, modyfikacji relacji, tworzenia relacji

Zadania z SQLa (MS SQL Server)

Podstawowe zapytania SELECT (na jednej tabeli)

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

Język SQL, zajęcia nr 2

Informatyka sem. III studia inżynierskie Transport 2018/19 LAB 2. Lab Backup bazy danych. Tworzenie kopii (backup) bazy danych

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

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

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

BAZY DANYCH wprowadzenie do języka SQL. Opracował: dr inż. Piotr Suchomski

Laboratorium Bazy danych SQL 2

Bazy danych SQL Server 2005

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Bazy danych - Materiały do laboratoriów VIII

Bazy danych 10. SQL Widoki

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

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

Język SQL. Rozdział 2. Proste zapytania

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Grupowanie i funkcje agregujące

Struktura bazy danych

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

Ćwiczenie zapytań języka bazy danych PostgreSQL

Projekt jest finansowany ze środków Unii Europejskiej, Europejskiego Funduszu Społecznego i budŝetu państwa. Studia Podyplomowe dla Nauczycieli

LAB 3 (część 1 Projektu)

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

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

Autor: Joanna Karwowska

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Autor: Joanna Karwowska

Bazy danych 6. Klucze obce. P. F. Góra

P o d s t a w y j ę z y k a S Q L

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

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

Bazy danych. Polecenia SQL

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

Bazy Danych i Usługi Sieciowe

Bazy danych. dr inż. Arkadiusz Mirakowski

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

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Bazy danych 7. SQL podstawy

Wybór EUROPEAN będzie rozpoznawał dzień przed miesiącem, natomiast US miesiąc przed dniem.

Relacji między tabelami klucze obce. Schemat bazy danych, wczytanej z pliku create_tables.sql. Klucz obcy jako ograniczenie dla kolumny

Język SQL podstawy zapytań

Szkolenie Oracle SQL podstawy. Terminy lutego 2010 First Minute! 1100zł!

Kurs. Podstawy MySQL

Bazy danych. Dr inż. Paweł Kasprowski

Bazy danych Język SQL część 1 Wykład dla studentów matem

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

SQL Structured Query Language

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

Struktura drzewa w MySQL. Michał Tyszczenko

Bazy danych i usługi sieciowe

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

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

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

Hurtownia Świętego Mikołaja projekt bazy danych

Aspekty aktywne baz danych

Bazy danych 2. Wykład 4 Structured Query Language (SQL)

SQL praca z tabelami 4. Wykład 7

Wprowadzenie do języka SQL

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

Tworzenie tabeli przez select CREATE TABLE PRAC2 AS SELECT P.NAZWISKO, Z.NAZWA FROM PRAC P NATURAL JOIN ZESP Z

3. Podzapytania, łączenie tabel i zapytań

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

SQL Structured Query Language

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

SQL w praktyce. Miłej i owocnej nauki!!!

kończy wysyłanie danych do pliku tworzy strukturę tabeli wyświetla opis struktury tabeli zmiana nazwy tabeli usuwanie tabeli

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

Oracle11g: Wprowadzenie do SQL

Model relacyjny. Wykład II

Transkrypt:

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 CHAR(10) NOT NULL, nazwa_oddzialu CHAR(30) NULL, PRIMARY KEY(numer_oddzialu) ); CREATE TABLE ADRES ( miasto CHAR(30) NOT NULL, ulica CHAR(50) NOT NULL, numery CHAR(10) NOT NULL, PRACOWNIK_pesel CHAR(11) NOT NULL, PRIMARY KEY(miasto, ulica, numery, PRACOWNIK_pesel), ); CREATE TABLE PRACOWNIK ( pesel CHAR(11) NOT NULL, ODDZIAL_numer_oddzialu CHAR(10) NOT NULL, imie CHAR(15) NULL, nazwisko CHAR(20) NULL, PRIMARY KEY(pesel), ); 2

Jakie tabele znajdują się w bazie? SHOW TABLES; Jakie kolumny znajdują się w tabeli PRACOWNIK? SHOW COLUMNS FROM PRACOWNIK; lub DESCRIBE PRACOWNIK; Usuń tabelę PRACOWNIK DROP TABLE PRACOWNIK; 3

Usuń i dodaj ponownie klucz podstawowy: ALTER TABLE PRACOWNIK DROP PRIMARY KEY; ALTER TABLE PRACOWNIK ADD PRIMARY KEY (pesel); Dodaj kolumnę placa do tabeli pracownicy: ALTER TABLE PRACOWNIK ADD placa DOUBLE NULL DEFAULT 0 AFTER nazwisko; 4

Modyfikacja danych Modyfikacja bazy danych przez ich dodanie może być zrealizowana w SQL za pomocą poleceń postaci: INSERT INTO <tabela> VALUES <wiersz> INSERT INTO <tabela(schemat)> VALUES <wiersz> Można zatem dodawać jedynie całe krotki oraz jednokrotnie tylko do jednej relacji (tabeli). Zachowany być musi schemat relacji i domeny atrybutów. O ile to jest dopuszczone <krotka> może zawierać wartości NULL. Dodaj wiersz do tabeli PRACOWNICY z wynagrodzeniem ustawionym na NULL INSERT INTO PRACOWNIK VALUES( 99999900000, WIMiIP-KISiM, Regulski, Krzysztof,NULL) lub INSERT INTO pracownicy (pesel, ODDZIAL_numer_oddzialu, nazwisko, placa) VALUES ( 99999900000, WIMiIP-KISiM, Regulski, NULL) 5

Uzupełnij tabele danymi: +----------------+-----------------+-------------------------+ id_oddzialu nazwa_oddzialu adres +----------------+-----------------+-------------------------+ L140 Betatrex Słoneczna 1/2, Kraków A4 Alfatron Miodowa 12, Ozimek B340 Tetrix Puchatka 123A/2, Kalisz +----------------+-----------------+-------------------------+ +----------------+-----------------+-----------------+----------------+----------------------------+ pesel imie nazwisko id_oddzialu adres +----------------+-----------------+-----------------+----------------+----------------------------+ 75102406713 Okowita Ambrozjowa L140 Brożka 24/56, Kraków 54032204567 Fableusz Kosonosy L140 Czarnowiejska 36/12, Kraków 56123099087 Atanazy Angonilewicz A4 Mocarna 3, Ozimek 67051757834 Kosmateusz Buler A4 Plac Mały 56, Mrozki +----------------+-----------------+-----------------+----------------+----------------------------+ INSERT INTO PRACOWNIK (pesel, imie, nazwisko, id_oddzialu, adres) VALUES ( ) lub INSERT INTO PRACOWNIK VALUES ( ) 6

Popraw miejscowość w adresie Kosmateusza Bulera na Ozimek : UPDATE PRACOWNIK SET adres = Plac Maly 56, Ozimek WHERE imie = Kosmateusz AND nazwisko = Buler ; Podnieś wynagrodzenie Regulskiemu o 30% UPDATE PRACOWNIK SET placa=placa*1.3 WHERE nazwisko LIKE Regulski ; 7

Zmień w bazie danych id_oddzialu dla oddziału Betatrex na B1 (pamiętaj o numerach u pracowników!) UPDATE ODDZIAL SET id_oddzialu= B1 WHERE id_oddzialu= Betatrex ; UPDATE PRACOWNIK SET id_oddzialu= B1 WHERE id_oddzialu= Betatrex ; żeby nie popełnić błędu w przyszłości, można założyć więzy integralności w postaci klucza obcego: ALTER TABLE PRACOWNIK ADD FOREIGN KEY (id_oddzialu) REFERENCES ODDZIAL(id_oddzialu) ON DELETE CASCADE ON UPDATE CASCADE; 8

Usuń pracownika o peselu 56123099087 DELETE FROM PRACOWNIK WHERE pesel= 56123099087 ; Usuń wszystkie dane z tabeli PRACOWNIK (uważaj, żeby nie usunąć danych z innych tabel!) DELETE FROM PRACOWNIK; Usuń tabelę PRACOWNIK DROP PRACOWNIK; 9

SELECT Pokaż zawartość tabeli PRACOWNIK SELECT * FROM PRACOWNIK; SQL dopuszcza duplikaty zarówno w relacjach jak i rezultatach zapytań. Dla wymuszenia eliminacji duplikatów wstawia się słowo kluczowe DISTINCT po SELECT. Przykład: znajdź imiona wszystkich pracowników i usuń duplikaty SELECT DISTINCT imie FROM pracownik; 10

SELECT Klauzula SELECT może zawierać wyrażenia arytmetyczne z operatorami +, -, *, / operujące na stałych i atrybutach krotek Zapytanie: SELECT nazwisko, imie, placa + 100 FROM pracownik; zwróci relację, w której atrybut placa będzie zwiększony o 100. 11

SELECT Polecenia SELECT można używać również nie odwołując się do żadnej tabeli w celu obliczania wyrażeń lub pracy na ciągach znaków lub zmiennych: SELECT 1+1; SELECT ten napis pojawi sie na ekranie ; SELECT slowa, w, osobnych, kolumnach ; SELECT @liczba1:=8 AS A, @liczba2:=2 AS B, @wynik:=@liczba1+@liczba2 AS 'WYNIK A+B'; +---+---+-----------+ A B WYNIK A+B +---+---+-----------+ 8 2 10 +---+---+-----------+ 12

zapytanie (1) Klauzula WHERE Klauzula WHERE składa się z warunków dotyczących atrybutów relacji z klauzuli FROM. Umożliwia wyświetlanie wierszy, których kolumny spełniają określony warunek. Pola objęte klauzurą WHERE nie muszą być na liście wyboru. SELECT nazwisko, imie FROM pracownicy WHERE placa > 100; umożliwia łączenie tabel według rożnych kryteriów. SELECT CONCAT (pracownicy.imie,, pracownicy.nazwisko) AS PRACOWNIK FROM pracownicy, oddzialy WHERE pracownicy.id_oddzialu=oddzialy.id_oddzialu AND oddzialy.nazwa_oddzialu LIKE Betatrex ; 13

Klauzula WHERE +----------------+ pracownicy +----------------+ pesel imie nazwisko id_oddzialu +----------------+ +----------------+ oddzialy +----------------+ id_oddzialu nazwa_oddzialu +----------------+ zapytanie (1) +-----------------------+ PRACOWNIK +-----------------------+ Okowita Ambrozjowa Fableusz Kosonosy Atanazy Angonilewicz Kosmateusz Buler Nikczemilian Wikrus Krowimir Dojny Inwertyk Dosiebski +-----------------------+ 14

Operatory porównań WHERE placa BETWEEN dolna_granica AND górna_granica WHERE imie NOT IN ( Stefan, Bożena ) (NOT) LIKE kiedy porównujemy ciągi znaków do wzorca Wyrażenia regularne: % - dowolny ciąg znaków _ - dowolny znak [ck] - znak 'c' lub 'k' [c-k] - znak z zakresu od 'c' do 'k [^c] - nie 'c' IS (NOT) NULL służy do sprawdzania, czy wartość w polu to NULL 15

Znajdź pracowników, którzy obchodzą dziś imieniny (dziś są imieniny Stefana, Bogumiła, Krystyny i Bożeny): SELECT imie, nazwisko FROM pracownik WHERE imie IN ( Stefan, Bogumił, Krystyna, Bożena ); Znajdź pracowników, którzy zarabiają pomiędzy 1500 a 2000 zł (być może są skłonni wziąć nadgodziny?) SELECT imie, nazwisko FROM pracownik WHERE placa BETWEEN 1500 AND 2000; 16

Znajdź pracowników, których nazwisko zaczyna się na literę R: SELECT imie, nazwisko FROM pracownik WHERE nazwisko LIKE R% ; Zaginął portfel szefa, sekretarka pamięta, że ostatnio w pokoju był pracownik, który załatwiał jakiś podpis, ale nie pamięta dokładnie jak się przedstawił Na nazwisko miał jakoś Mot albo Lot ale na pewno nie Kot. Wyszukaj pracowników pasujących do opisu: lub SELECT imie, nazwisko FROM pracownik WHERE nazwisko LIKE [ML]ot% ; SELECT imie, nazwisko FROM pracownik WHERE nazwisko LIKE [^K]ot% 17

Rodzaje złączeń złączenie wewnętrzne (INNER JOIN) w relacji wynikowej występują wyłącznie te krotki, które spełniają warunek złączenia złączenie lewostronne zewnętrzne (LEFT OUTER JOIN) zawiera wszystkie krotki R uzupełnione krotkami S spełniającymi warunek złączenie prawostronne zewnętrzne (RIGHT OUTER JOIN) - zawiera wszystkie krotki S uzupełnione krotkami R spełniającymi warunek złączenie zewnętrzne pełne (FULL OUTER JOIN) zawiera wszystkie krotki R oraz S uzupełnione wartościami typu NULL gdy do danej krotki nie pasuje żadna krotka z drugiej relacji 18

Przykład dane: Relacja oddzial: +----------------+-----------------+ id_oddzialu nazwa_oddzialu +----------------+-----------------+ L140 Betatrex A4 Alfatron B340 Tetrix +----------------+-----------------+ Relacja pracownik: +----------------+-----------------+-----------------+----------------+ pesel imie nazwisko id_oddzialu +----------------+-----------------+-----------------+----------------+ 75102406713 Okowita Ambrozjowa L140 54032204567 Fableusz Kosonosy L140 56123099087 Atanazy Angonilewicz A4 +----------------+-----------------+-----------------+----------------+ 19

Przykład: SELECT oddzialy.nazwa_oddzialu, pracownicy.nazwisko FROM (oddzialy INNER JOIN pracownicy ON oddzialy.id_oddzialu=pracownicy.id_oddzialu); +-----------------+-----------------+ nazwa_oddzialu nazwisko +-----------------+-----------------+ Betatrex Ambrozjowa Betatrex Kosonosy Alfatron Angonilewicz +-----------------+-----------------+ SELECT oddzialy.nazwa_oddzialu, pracownicy.nazwisko FROM (oddzialy LEFT OUTER JOIN pracownicy ON oddzialy.id_oddzialu=pracownicy.id_oddzialu); +-----------------+-----------------+ nazwa_oddzialu nazwisko +-----------------+-----------------+ Betatrex Ambrozjowa Betatrex Kosonosy Alfatron Angonilewicz Tetrix NULL +-----------------+-----------------+ 20

Aliasy Możliwe jest używanie aliasów nazw kolumn i nazw tabel. Umożliwiają one:» zmianę nazwy kolumny wyświetlanej» nadanie nazwy kolumnie będącej wynikiem wyrażenia lub stałą SELECT @liczba1:=8 AS A, @liczba2:=2 AS B, @wynik:=@liczba1+@liczba2 AS 'WYNIK A+B'; +---+---+-----------+ A B WYNIK A+B +---+---+-----------+ 8 2 10 +---+---+-----------+ 21

Sortowanie wyników Sortowanie wyników osiąga się dzięki klauzuli ORDER BY. Sortowanie odbywa się kolejno według wartości atrybutów wymienionych w klauzuli. Dla każdego z atrybutów można podać specyfikator DESC dla porządku malejącego. Pokaż imiona i nazwiska wszystkich pracowników, posortuj wyniki malejąco. SELECT nazwisko, imie FROM pracownicy ORDER BY nazwisko DESC, imie DESC; 22

Zobacz jak wygląda tabela pracownik: DESCRIBE pracownik; Wykonaj zapytanie o imiona i nazwiska wszystkich pracowników: SELECT imie, nazwisko FROM pracownik; Pokaż listę imion i nazwisk pracowników, oraz numery porządkowe w pierwszej kolumnie: SELECT @lp:=0; SELECT @lp:=@lp+1 AS Lp., imie, nazwisko FROM pracownik; 23

Wykonaj zapytanie o zawartość tabeli znajomoscjezykow Pokaż wszystkich pracowników znających języki obce. 24

Wykonaj zapytanie o zawartość tabeli znajomoscjezykow SELECT * FROM znajomoscjezykow; Pokaż wszystkich pracowników znających języki obce (eliminując duplikaty). SELECT DISTINCT pracownik.nazwisko FROM pracownik, znajomoscjezykow WHERE znajomoscjezykow.loginpracownika=pracownik.loginpracownika; 25

Znajdź wszystkich pracowników znających język angielski: select pracownik.nazwisko from pracownik, znajomoscjezykow, dictjezyki where dictjezyki.id_jezyk=znajomoscjezykow.id_jezyk and znajomoscjezykow.loginpracownika=pracownik.loginpracownika and dictjezyki.nazwa LIKE %angielski% ; 26

Pokaż listę pracowników wraz z NAZWAMI języków, które znają, oznaczając kolumnę z językami jako JĘZYK. Na liście pokaż również tych pracowników, którzy nie znają obcych języków. SELECT pracownik.nazwisko, dictjezyki.nazwa AS JĘZYK FROM ((pracownik LEFT OUTER JOIN znajomoscjezykow USING (loginpracownika)) INNER JOIN dictjezyki ON znajomoscjezykow.id_jezyk=dictjezyki.id_jezyk); 27

Znajdź wszystkich pracowników znających język angielski i pokaż stopień jego znajomości w kolumnie POZIOM ANGIELSKIEGO. Wyniki poukładaj alfabetycznie (wg nazwisk). SELECT pracownik.nazwisko, dictpoziomjezyka.nazwa AS POZIOM ANGIELSKIEGO FROM pracownik,znajomoscjezykow,dictjezyki,dictpoziomjezyka WHERE dictjezyki.id_jezyk=znajomoscjezykow.id_jezyk AND znajomoscjezykow.loginpracownika=pracownik.loginpracownika AND znajomoscjezykow.id_dictpoziomjezyka=dictpoziomjezyka.id_dictpoziomjezyka AND znajomoscjezykow.id_jezyk=1 ORDER BY pracownik.nazwisko; 28

Funkcje agregujące Funkcje agregujące SQL operują na zbiorach wartości (np. kolumna relacji) i obliczają pojedynczą wartość. Są to: AVG - wartość średnia, MIN - wartość minimalna, MAX - wartość maksymalna, SUM suma, COUNT liczność zbioru.» Znajdź ilość krotek w relacji pracownicy. SELECT COUNT (*) FROM pracownicy;» Znajdź średnią płacę. SELECT AVG (placa) FROM pracownicy; 29

Funkcje agregujące Funkcje agregujące mogą być zastosowane do grup krotek. Uzyskuje się to przez zastosowanie klauzuli GROUP BY i odpowiednie uformowanie klauzuli SELECT. Znajdź ilość pracowników w każdym oddziale firmy. SELECT nazwa_oddzialu, COUNT (DISTINCT nazwisko) FROM pracownicy, oddzialy WHERE pracownicy.id_oddzialu=oddzialy.id_oddzialu GROUP BY nazwa_oddzialu; Uwaga: atrybuty z klauzuli SELECT poza funkcją agregującą muszą wystąpić w liście GROUP BY. 30

Funkcje agregujące Funkcje agregujące mogą być użyte do nakładania warunków na grupy krotek. Wówczas stosuje się rozwinięcie klauzuli GROUP BY o postaci: HAVING funkcja agregująca.» Znajdź nazwy wszystkich oddziałów, gdzie średnia płaca jest większa niż 1,200zł SELECT nazwa_oddzialu, AVG (placa) FROM pracownicy, oddzialy WHERE pracownicy.id_oddzialu=oddzialy.id_oddzialu GROUP BY nazwa_oddzialu HAVING AVG (placa) > 1200; Uwaga: warunki z klauzuli HAVING są stosowane po uformowaniu grup. 31

Znajdź średnią ocenę plików zawierających w nazwie słowo opis i umieść ją w kolumnie Średnia ocena. select nazwapliku,avg(ocena) as 'Średnia ocena' from ocena group by nazwapliku having nazwapliku like '%opis%'; 32