Bazy danych 5. Samozłaczenie SQL podstawy



Podobne dokumenty
Bazy danych 7. SQL podstawy

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

Bazy danych 4. Przykłady SQL podstawy

Bazy danych 4. SQL- podstawy

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

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

Bazy danych 10. SQL Widoki

Język SQL, zajęcia nr 1

Bazy danych 6. Przykłady

Bazy Danych i Usługi Sieciowe

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

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

Bazy danych i usługi sieciowe

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

Wykład 2. SQL 1 Structured Query Lenguage

Wykład 5. SQL praca z tabelami 2

Bazy danych 7. SQL dalsze możliwości. Grupowanie.

Bazy danych 6. SQL funkcje daty i czasu, zmienne tymczasowe, aliasy

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

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Kurs. Podstawy MySQL

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

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

Wykład 05 Bazy danych

Wykład 4. SQL praca z tabelami 1

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

Projektowanie systemów baz danych

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

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

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

Bazy danych. Dr inż. Paweł Kasprowski

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Autor: Joanna Karwowska

Język baz danych SQL cz.1

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

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

1. Sprawdzenie ustawień konfiguracyjnych. Uruchomienie wiersza poleceń:..\ścieżka\bin>mysqladmin variables

Relacyjne bazy danych. Podstawy SQL

SQL - DDL. 1 Tabele systemowe. 2 Typy danych

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

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

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Relacyjne bazy danych. Podstawy SQL

Bazy danych 9. SQL Klucze obce Transakcje

Wykład 8. SQL praca z tabelami 5

SIECI KOMPUTEROWE I BAZY DANYCH

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Paweł Rajba

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

Laboratorium nr 1. Temat: Wprowadzenie do MySQL-a

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

Dr Michał Tanaś(

E.14 Bazy Danych cz. 16 SQL Tworzenie, modyfikowanie i usuwanie tabel

Bazy danych 12. SQL Wyszukiwanie pełnotekstowe

Wykład 6. SQL praca z tabelami 3

040 STRUCTURED QUERY LANGUAGE. Prof. dr hab. Marek Wisła

2 Przygotował: mgr inż. Maciej Lasota

Instalacja MySQL.

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

SIECI KOMPUTEROWE I BAZY DANYCH

Bazy danych 9. Klucze obce Transakcje

Bazy danych 9. Klucze obce Transakcje. P. F. Góra

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

Widok Connections po utworzeniu połączenia. Obszar roboczy

Bazy danych. Polecenia SQL

Podyplomowe Studium Programowania i Baz Danych

LAB2. Dalsze ćwiczenia z podstaw języka SQL (CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT)

Język SQL, zajęcia nr 2

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

Systemy GIS Tworzenie zapytań w bazach danych

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Tworzenie, modyfikowanie i usuwanie tabel

SQL Structured Query Language

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

Instrukcja CREATE TABLE

Wyzwalacze (triggery) Przykład

Obiekty dowolnego typu, w tym bazy danych, możemy tworzyć instrukcją CREATE. Po czasowniku CREATE należy podać typ tworzonego obiektu i jego nazwę.

SQL/MySQL. Rafał Kern

Komunikacja z bazą danych psql

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

SQL (ang. Structured Query Language)

Projektowanie bazy danych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

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

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

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

MySQL. Darmowa baza danych. Æwiczenia praktyczne

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Przestrzenne bazy danych Podstawy języka SQL

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki Instrukcja do zajęć laboratoryjnych

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

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

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

Tworzenie baz danych i tabel

Aplikacje bazodanowe. Laboratorium 1. Dawid Poªap Aplikacje bazodanowe - laboratorium 1 Luty, 22, / 37

Jerzy Nawrocki, Wprowadzenie do informatyki

Aspekty aktywne baz danych

Hurtownia Świętego Mikołaja projekt bazy danych

korzyści finansowe przewaga pomysłu nad kapitałem tworzenie nowych branż tworzenie mechanizmów pochodnych (np. serwis snip).

Transkrypt:

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 oraz informacje o sprzedanych biletach. Po pierwsze, Z każdym pociagiem stowarzyszona jest lista stacji, na których się on zatrzymuje. Z każda stacja stowarzyszony jest zbiór pociagów, na których się on zatrzymuje. Dla każdej stacji należy podać godziny przyjazdu i odjazdu każdego pocia- gu, który się na niej zatrzymuje. 5. Samozłaczenie. SQL podstawy 2

Pierwszy i ostatni punkt odpowiadaja następujacym zależnościom funkcyjnym: NrPociagu Stacja NrKolejny NrPociagu Stacja Przyjazd Odjazd (1a) (1b) co prowadzi do następujacej struktury tabeli Przystanki ( NrPociagu, Stacja, NrKolejny, Przyjazd, Odjazd ) (2) Powstaje jednak pewna watpliwość: A co się stanie jeśli jakiś pociag nie przejeżdża przez dana stację? Czy przypadkiem zależności funkcyjne (1) nie wymagaja wyspecyfikowania wszystkich możliwych par NrPociagu-Stacja? Oczywiście nie: Zależność funkcyjna ma postać implikacji: jeżeli podamy atrybuty poprzednika, to ustalamy jednoznacznie wartości atrybutów następnika. A jeżeli nie, to nie. 5. Samozłaczenie. SQL podstawy 3

Rola zapytań Określmy zbioru pociagów, które zatrzymuja się na danej stacji. Nie trzeba w tym celu konstruować osobnej tabeli (relacji) można to osiagn ać poprzez odpowiednie zapytanie: ( π NrPociagu σstacja= Koluszki (Przystanki) Nie wszystkie informacje przechowuje się w postaci osobnych tabel użyteczność baz danych polega (między innymi) na tym, że wiele rzeczy da się zrealizować poprzez zapytania. ) (3) 5. Samozłaczenie. SQL podstawy 4

Zadanie Posługujac się schematem tabeli Przystanki (2), znaleźć wszystkie pociagi, które przejeżdżaja przez stację X oraz przez stację Y. [ ( πnrpociagu σstacja= X (Przystanki) )] [ ( π NrPociagu σstacja= Y (Przystanki) )] (4) Tabela Przystanki występuje w powyższym zapytaniu dwa razy, po obu stronach złaczenia. Jest to przykład tak zwanego samozłaczenia (self-join). 5. Samozłaczenie. SQL podstawy 5

Zadanie Posługujac się schematem tabeli Przystanki (2), znaleźć wszystkie pociagi, które najpierw przejeżdżaja przez stację X, później przez stację Y. [ ( )] ρ StacjaX(NrPociagu,NrX) πnrpociagu,nrkolejny σstacja= X (Przystanki) )] [ ( ρ StacjaY(NrPociagu,NrY) πnrpociagu,nrkolejny σstacja= Y (Przystanki) ( π NrPociagu σnrx<nry (StacjaX StacjaY) ) (5a) (5b) Zapytanie (5) oczywiście także zawiera samozłaczenie, tyle że w formie niejawnej. Pytanie: Po jakim atrybucie realizowane jest złaczenie w (5c)? Po atrybucie NrPociagu, bo to jest powtarzajacy się atrybut w tabelach StacjaX, StacjaY. (5c) 5. Samozłaczenie. SQL podstawy 6

Structured Query Language Używane standardy: SQL92 SQL99 SQL:2003 Żaden dostawca nie jest w pełni zgodny ze standardem prawie wszyscy wprowadzaja rozszerzenia, prawie nikt nie spełnia wszystkich wymogów. W dużych systemach komercyjnych odejście od wymogów nie jest wielkie 5. Samozłaczenie. SQL podstawy 7

Połaczenie się z serwerem Przed rozpoczęciem pracy, nalezy wywołać proces kliencki, który połaczy się z serwerem. W MySQL może to wygladać na przykład tak: C:\>mysql -upawel -p Enter password: ************* Po zakończeniu pracy trzeba się pożegnać: mysql> QUIT; Bye Znacznie częściej połaczenie z serwerem nawiazuje się za pomoca jakiejś aplikacji, nie zaś bezpośrednio z shella. 5. Samozłaczenie. SQL podstawy 8

Utworzenie bazy danych mysql> CREATE DATABASE MoiStudenci CHARACTER SET cp1250; Query OK, 1 row affected (0.06 sec) mysql> USE MoiStudenci; Database changed mysql> Po wywołaniu klienta, trzeba wejść do wybranej bazy za pomoca instrukcji USE nie tylko po jej utworzeniu, ale zawsze. 5. Samozłaczenie. SQL podstawy 9

To, jakie bazy znajduja się na serwerze, możemy zobaczyć za pomoca instrukcji SHOW DATABASES. mysql> SHOW DATABASES; +--------------------+ Database +--------------------+ information_schema kaskady moistudenci mysql test +--------------------+ 5 rows in set (0.00 sec) 5. Samozłaczenie. SQL podstawy 10

Utworzenie tabeli mysql> CREATE TABLE Studenci -> (NrStudenta SMALLINT UNSIGNED NOT NULL -> AUTO_INCREMENT PRIMARY KEY); Query OK, 0 rows affected (0.14 sec) Jeśli okaże się to konieczne, po utworzeniu można zmienić definicję tabeli. mysql> ALTER TABLE Studenci -> ADD COLUMN (Nazwisko VARCHAR(20) NOT NULL); Query OK, 1 row affected (0.17 sec) Records: 1 Duplicates: 0 Warnings: 0 5. Samozłaczenie. SQL podstawy 11

Składnia polecenia CREATE TABLE CREATE TABLE NazwaTabeli ( NazwaKolumny 1 TypKolumny 1 NULL NOT NULL..., NazwaKolumny 2 TypKolumny 2 NULL NOT NULL...,... ) PRIMARY KEY (NazwaKolumny p,nazwakolumny q,... ) ; Inne opcje poznamy później. 5. Samozłaczenie. SQL podstawy 12

Typy danych (atrybutów) TINYINT DATE TINYBLOB SMALLINT TIME BLOB MEDIUMINT TIMESTAMP MEDIUMBLOB INT DATETIME LONGBLOB INTEGER CHAR TINYTEXT BIGINT VARCHAR TEXT REAL BOOLEAN LONGTEXT DOUBLE ENUM FLOAT SET DECIMAL NUMERIC 5. Samozłaczenie. SQL podstawy 13

Instrukcja DESCRIBE podaje definicję tabeli. mysql> DESCRIBE Studenci; +------------+----------------------+------+-----+---------+----------------+ Field Type Null Key Default Extra +------------+----------------------+------+-----+---------+----------------+ NrStudenta smallint(5) unsigned NO PRI NULL auto_increment Nazwisko varchar(20) NO +------------+----------------------+------+-----+---------+----------------+ 2 rows in set (0.01 sec) Niepotrzebna tabelę usuwamy za pomoca instrukcji DROP TABLE. mysql> DROP TABLE Studenci; Query OK, 0 rows affected (0.02 sec) Lepiej ja utworzyć od poczatku dobrze niż dodawać kolumna po kolumnie... 5. Samozłaczenie. SQL podstawy 14

mysql> CREATE TABLE Studenci -> (NrStudenta SMALLINT UNSIGNED NOT NUll -> AUTO_INCREMENT PRIMARY KEY, -> Imie VARCHAR(20), -> Nazwisko VARCHAR(20) NOT NULL, -> Uwagi VARCHAR(30), -> Grupa CHAR(2) NOT NULL)); Query OK, 0 rows affected (0.06 sec) mysql> DESCRIBE Studenci; +------------+----------------------+------+-----+---------+----------------+ Field Type Null Key Default Extra +------------+----------------------+------+-----+---------+----------------+ NrStudenta smallint(5) unsigned NO PRI NULL auto_increment Imie varchar(20) YES NULL Nazwisko varchar(20) NO Uwagi varchar(30) YES NULL Grupa char(2) NO +------------+----------------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec) 5. Samozłaczenie. SQL podstawy 15

Wstawianie wartości do tabeli mysql> SET CHARACTER SET cp1250; Query OK, 0 rows affected (0.00 sec) Gdybyśmy tego nie zrobili, MySQL używałby takiego zestawu znaków, jaki obowiazywał domyślnie w momencie połaczenia z serwerem. Kwestie określania zestawu znaków to osobliwość MySQLa mysql> INSERT INTO Studenci VALUES -> (1, Milena, Zahorska, wt, uzupełniające ); Query OK, 1 row affected (0.02 sec) 5. Samozłaczenie. SQL podstawy 16

Co teraz jest w tabeli? mysql> SELECT * FROM Studenci; +------------+--------+----------+---------------+-------+ NrStudenta Imie Nazwisko Uwagi Grupa +------------+--------+----------+---------------+-------+ 1 Milena Zahorska uzupełniające wt +------------+--------+----------+---------------+-------+ 1 row in set (0.00 sec) 5. Samozłaczenie. SQL podstawy 17

Składnia zapytania SELECT; SELECT [DISTINCT] lista select FROM tabela lub zapytanie WHERE warunek logiczny GROUP BY wyrażenie grupujace HAVING warunek wyszukiwania po grupowaniu ORDER BY wyrażenie porzadkuj ace [ASC DESC] ; W zapytaniu SELECT wszystkie klauzule musza występować w powyższej kolejności. Niektóre klauzule można opuścić, ale to, co jest, musi być w tej kolejności. 5. Samozłaczenie. SQL podstawy 18

Dodajmy więcej danych mysql> INSERT INTO Studenci VALUES -> (2, Sylwester, Tomiec, uzupełniające, wt ), -> (3, Michał, Gajewczyk,, wt ); Query OK, 2 rows affected (0.02 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM Studenci; +------------+-----------+-----------+---------------+-------+ NrStudenta Imie Nazwisko Uwagi Grupa +------------+-----------+-----------+---------------+-------+ 1 Milena Zahorska uzupełniające wt 2 Sylwester Tomiec uzupełniające wt 3 Michał Gajewczyk wt +------------+-----------+-----------+---------------+-------+ 3 rows in set (0.00 sec) 5. Samozłaczenie. SQL podstawy 19

Wykorzystanie opcji AUTOINCREMENT mysql> INSERT INTO Studenci (Imie,Nazwisko,Grupa) VALUES -> ( Rafał, Świderski, wt ), -> ( Maciej, Matowicki, wf ), -> ( Janko, Muzykant, nd ); Query OK, 3 rows affected (0.02 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM Studenci; +------------+-----------+-----------+---------------+-------+ NrStudenta Imie Nazwisko Uwagi Grupa +------------+-----------+-----------+---------------+-------+ 1 Milena Zahorska uzupełniające wt 2 Sylwester Tomiec uzupełniające wt 3 Michał Gajewczyk wt 4 Rafał Świderski NULL wt 5 Maciej Matowicki NULL wf 6 Janko Muzykant NULL nd +------------+-----------+-----------+---------------+-------+ 6 rows in set (0.00 sec) 5. Samozłaczenie. SQL podstawy 20

Zapytanie UPDATE mysql> UPDATE Studenci -> SET Uwagi=NULL -> WHERE NrStudenta=3; Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> UPDATE Studenci -> SET Grupa= wt WHERE Grupa= wf ; Query OK, 1 row affected (0.03 sec) Rows matched: 1 Changed: 1 Warnings: 0 5. Samozłaczenie. SQL podstawy 21

mysql> SELECT * FROM Studenci; +------------+-----------+-----------+---------------+-------+ NrStudenta Imie Nazwisko Uwagi Grupa +------------+-----------+-----------+---------------+-------+ 1 Milena Zahorska uzupełniające wt 2 Sylwester Tomiec uzupełniające wt 3 Michał Gajewczyk NULL wt 4 Rafał Świderski NULL wt 5 Maciej Matowicki NULL wt 6 Janko Muzykant NULL nd +------------+-----------+-----------+---------------+-------+ 6 rows in set (0.00 sec) 5. Samozłaczenie. SQL podstawy 22

Zapytanie DELETE Usuwanie wierszy spełniajacych podane kryterium: mysql> DELETE FROM Studenci -> WHERE Imie= Janko ; Query OK, 1 row affected (0.03 sec) Dodajmy coś jeszcze: mysql> INSERT INTO Studenci (Imie,Nazwisko,Grupa) VALUES -> ( Michał, Czubek, pt ),( Marcin, Pyra, pt ), -> ( Marcin, Baranowski, pt ); Query OK, 3 rows affected (0.02 sec) Records: 3 Duplicates: 0 Warnings: 0 5. Samozłaczenie. SQL podstawy 23

mysql> SELECT * FROM Studenci; +------------+-----------+------------+---------------+-------+ NrStudenta Imie Nazwisko Uwagi Grupa +------------+-----------+------------+---------------+-------+ 1 Milena Zahorska uzupełniające wt 2 Sylwester Tomiec uzupełniające wt 3 Michał Gajewczyk NULL wt 4 Rafał Świderski NULL wt 5 Maciej Matowicki NULL wt 7 Michał Czubek NULL pt 8 Marcin Pyra NULL pt 9 Marcin Baranowski NULL pt +------------+-----------+------------+---------------+-------+ 8 rows in set (0.01 sec) Brakuje numeru 6 AUTOINCREMENT zapamiętał, że on tam był. AUTOINCREMENT zawsze startuje od high water mark. 5. Samozłaczenie. SQL podstawy 24

Jawnie wyspecyfikowana lista select mysql> SELECT Imie, Nazwisko FROM Studenci; +-----------+------------+ Imie Nazwisko +-----------+------------+ Milena Zahorska Sylwester Tomiec Michał Gajewczyk Rafał Świderski Maciej Matowicki Michał Czubek Marcin Pyra Marcin Baranowski +-----------+------------+ 8 rows in set (0.01 sec) Gwiazdka w zapytaniu SELECT (SELECT * FROM...) oznacza wszystkie kolumny. 5. Samozłaczenie. SQL podstawy 25

Problem duplikatów mysql> SELECT Imie -> FROM Studenci; +-----------+ Imie +-----------+ Milena Sylwester Michał Rafał Maciej Michał Marcin Marcin +-----------+ 8 rows in set (0.00 sec) mysql> SELECT DISTINCT Imie -> FROM Studenci; +-----------+ Imie +-----------+ Milena Sylwester Michał Rafał Maciej Marcin +-----------+ 6 rows in set (0.00 sec) 5. Samozłaczenie. SQL podstawy 26

Operator LIKE mysql> SELECT Imie, Nazwisko -> FROM Studenci -> WHERE Imie LIKE Mi% ; +--------+-----------+ Imie Nazwisko +--------+-----------+ Milena Zahorska Michał Gajewczyk Michał Czubek +--------+-----------+ 3 rows in set (0.00 sec) mysql> SELECT Imie, Nazwisko -> FROM Studenci -> WHERE Imie LIKE %ł ; +--------+-----------+ Imie Nazwisko +--------+-----------+ Michał Gajewczyk Rafał Świderski Michał Czubek +--------+-----------+ 3 rows in set (0.00 sec) 5. Samozłaczenie. SQL podstawy 27

Wykorzystanie ORDER BY mysql> SELECT Imie, Nazwisko -> FROM Studenci -> WHERE Grupa= wt -> ORDER BY Nazwisko ASC; +-----------+-----------+ Imie Nazwisko +-----------+-----------+ Michał Gajewczyk Maciej Matowicki Sylwester Tomiec Milena Zahorska Rafał Świderski +-----------+-----------+ 5 rows in set (0.02 sec) Problemy z poprawnym sortowaniem polskich znaków diakrytycznych 5. Samozłaczenie. SQL podstawy 28