plik


ÿþBazy danych  wykBad 9 Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy danych wykBad 9 1 Adam Bujnowski Jzyk SQL Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Plan wykBadu: " Data Manipulation Language (DML) " DML - INSERT " Operatory w SQL " DML - UPDATE " DML - DELETE 2 Adam Bujnowski Data Manipulation Language Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Data Manipulation Language (DML)  grupa poleceD jzyka SQL zapewniajca dostp do danych zgromadzonych wewntrz tabel. W wyniku poprawnego dziaBania (na uprawnionych wierszach) ka|dego z tych poleceD zmienia si posta danych zgromadzonych w bazie danych. Do grupy poleceD DML nale| trzy podstawowe instrukcje: INSERT - wykonana poprawnie zawsze wstawia nowy wiersz UPDATE  aktualizuje dane w wierszu (grupie wierszy) DELETE  usuwa wiersz (grup wierszy) 3 Adam Bujnowski INSERT Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Podstawowa forma wywoBania instrukcji INSERT wyglda nastpujco: INSERT INTO nazwatabeli(nazwaatrybutu1, nazwaatrybutu2, nazwaatrybutu3, ..., nazwaatrybutuN) VALUES ('warto[ atrybutu 1','warto[ atrybutu2', 'Warto[ atrybutu 3',...,'Warto[ atrybutu N'); Warunki poprawnego wykonania instrukcji to: " Ilo[ warto[ci musi odpowiada ilo[ci atrybutów " Warto[ci musz by kompatybilne z typami danych dla atrybutów " Kolejno[ warto[ci musi odpowiada kolejno[ci wymienionych w poleceniu atrybutów a nie kolejno[ci w tabeli " Uwzgldnione bd wszystkie oraniczenia w tabeli 4 Adam Bujnowski Prosta forma INSERT Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Istnieje prostsza forma instrukcji INSERT, pozwalajca na pominicie kolejno[ci atrybutów: INSERT INTO nazwatabeli VALUES ('warto[ atrybutu 1','warto[ atrybutu2', 'Warto[ atrybutu 3',...,'Warto[ atrybutu N'); W tym przypadku warto[ci atrybutów musz odpowiada kolejno[ci atrybutów zdefiniowanych wewntrz tabeli. Powinni[my równie| zadba o wypeBnienie wszystkich warto[ci atrybutów. Rozwizanie to jest jednak podatne na bBdy we wprowadzaniu danych. Pokazane to zostanie na poni|szych przykBadach ZaBó|my tabel postaci: CREATE TABLE osoba(id serial PRIMARY KEY, imie varchar(30), nazwisko varchar(30), miasto varchar(30)); 5 Adam Bujnowski PrzykBad Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Osoba id | imie | nazwisko | miasto ----+------+----------+-------- Spróbujmy wstawi warto[ci do tej bazy danych: INSERT INTO osoba VALUES(1,'Jan','Kos','Gdansk'); INSERT INTO osoba VALUES(2,'JeleD','Gustaw','UstroD'); INSERT INTO osoba VALUES(3,'Wilno','Adam','Mickiewicz'); INSERT INTO osoba VALUES(4,'Ewa','Warszawa','So[nicka'); INSERT INTO osoba VALUES(1,'Janusz','Kwas'); INSERT INTO osoba VALUES('Koszycki','Gdansk'); 6 Adam Bujnowski PrzykBad Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Sprawdzmy jak to si wykonaBo: CREATE TABLE osoba(id serial PRIMARY KEY, imie varchar(30), nazwisko varchar(30), miasto varchar(30)); NOTICE: CREATE TABLE will create implicit sequence "osoba_id_seq1" for serial column "osoba.id" NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "osoba_pkey1" for table "osoba" Zapytanie zostaBo wykonane w 81 ms i nie zwróciBo |adnych wyników. test=# INSERT INTO osoba VALUES(1,'Jan','Kos','Gdansk'); INSERT 16455 1 test=# INSERT INTO osoba VALUES(2,'Jelen','Gustaw','Ustron'); INSERT 16456 1 test=# INSERT INTO osoba VALUES(3,'Wilno','Adam','Mickiewicz'); INSERT 16457 1 test=# INSERT INTO osoba VALUES(4,'Ewa','Warszawa','Sosnicka'); INSERT 16458 1 test=# INSERT INTO osoba VALUES(1,'Janusz','Kwas'); ERROR: duplicate key value violates unique constraint "osoba_pkey1" test=# INSERT INTO osoba VALUES('Koszycki','Gdansk'); INSERT wykonany ERROR: invalid input syntax for integer: "Koszycki" bBdnie ! Krotki nie pasuj do tabel 7 Adam Bujnowski Informacja zwrotna z SZBD Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Ka|de poprawne wykonanie instrukcji INSERT INTO zwróci potwierdzenie poprzez nazw operacji (sBowo kluczowe INSERT i dwie liczby) test=# INSERT INTO osoba VALUES(1,'Jan','Kos','Gdansk'); INSERT 16455 1 Liczba zmodyfikowanych (Tu: wstawionych) wierszy Potwierdzenie OID nowego poprawnego wiersza wykonania operacji 8 Adam Bujnowski Dane wewntrz bazy danych: Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych test=# select * from osoba; id | imie | nazwisko | miasto ----+-------+----------+------------ 1 | Jan | Kos | Gdansk INSERT wykonany 2 | Jelen | Gustaw | Ustron poprawnie, ale dane niespójne znaczeniowo ! 3 | Wilno | Adam | Mickiewicz 4 | Ewa | Warszawa | Sosnicka (4 rows) Wniosek: Wykonanie test=# select *,oid from osoba; skróconej instrukcji id | imie | nazwisko | miasto | oid INSERT mo|e ----+-------+----------+------------+------- prowadzi do bBdów w przypadku np. 1 | Jan | Kos | Gdansk | 16455 zignorowania kolejno[ci 2 | Jelen | Gustaw | Ustron | 16456 krotek ! 3 | Wilno | Adam | Mickiewicz | 16457 4 | Ewa | Warszawa | Sosnicka | 16458 (4 rows) 9 Adam Bujnowski Inne mo|liwe odmiany INSERT Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych INSERT INTO osoba(imie,nazw,miasto) VALUES('Gustaw','Jelen','Ustron'),('Jan','Kos','Gdansk'), ('Adam','Mickiewicz','Wilno'); (MySQL) INSERT INTO osoba SET imie='Adam', nazw ='Bujnowski' (MySQL) Takie elementy nie zadziaBaj w PostgreSQL. 10 Adam Bujnowski PeBna formuBa INSERT Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych INSERT INTO osoba(id,imie,nazwisko,miasto) VALUES(1,'Jan','Kos','Gdansk'); INSERT INTO osoba(id,nazwisko,imie,miasto) VALUES(2,'Jelen','Gustaw','Ustron'); INSERT INTO osoba(id,miasto,imie,nazwisko) VALUES(3,'Wilno','Adam','Mickiewicz'); INSERT INTO osoba(id,imie,miasto,nazwisko) VALUES(4,'Ewa','Warszawa','Sosnicka'); INSERT INTO osoba(id,imie,nazwisko) VALUES(1,'Janusz','Kwas'); INSERT INTO osoba(nazwisko,miasto) VALUES('Koszycki','Gdansk'); Tym razem bBdnie wykonane zostan dwie ostatnie instrukcje, ale przyczyna bBdów tkwi tym razem w zaprojektowanych ograniczeniach dla tabel (PRIMARY KEY) 11 Adam Bujnowski Inna forma wprowadzania danych Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych SZBD czsto pozwalaj na wprowadzanie danych bezpo[rednio z pliku tekstowego. Plik taki powinien zawiera krotki, z wyró|nionymi separatorami atrybutów i krotek. PostgreSQL obsBuguje taki tryb wsadowy  sBu|y do tego polecenie COPY. Dla przykBadowej bazy danych plik wsadowu mo|e mie posta: Jan<tab>Kos<tab>Gdansk<newline> Gustaw<tab>JeleD<tab>UstroD<newline> Grigirij<tab>Saakaszwili<tab>Tibilisi Gdzie <tab> oznacza znak tabulacji (\t 0x09) w pliku, a <newline> oznacza znak nowej linii (\n 0x0a) w pliku. Zauwa|, |e ostatnia linia nie zawiera separatora krotek. Je[li dane zgromadzone s w pliku o nazwie dane.txt to mog one zosta wczytane do Bazy danych poleceniem: \copy osoba(imie,nazwisko,miasto) from dane.txt Portwierdzenie poprawnego \. wykonania polecenia 12 Adam Bujnowski SkBadnia copy Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Command: COPY Description: copy data between a file and a table Syntax: COPY tablename [ ( column [, ...] ) ] FROM { 'filename' | STDIN } [ [ WITH ] [ BINARY ] [ OIDS ] [ DELIMITER [ AS ] 'delimiter' ] [ NULL [ AS ] 'null string' ] [ CSV [ HEADER ] [ QUOTE [ AS ] 'quote' ] [ ESCAPE [ AS ] 'escape' ] [ FORCE NOT NULL column [, ...] ] COPY { tablename [ ( column [, ...] ) ] | ( query ) } TO { 'filename' | STDOUT } [ [ WITH ] [ BINARY ] [ OIDS ] [ DELIMITER [ AS ] 'delimiter' ] [ NULL [ AS ] 'null string' ] [ CSV [ HEADER ] [ QUOTE [ AS ] 'quote' ] [ ESCAPE [ AS ] 'escape' ] [ FORCE QUOTE column [, ...] ] 13 Adam Bujnowski Kopiowanie danych pomidzy tabelami Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych INSERT INTO table(field1, field2) SELECT fielda, fieldb FROM tableb Wyobrazmy tabele : table(field1 varchar(20), field2 varchar(20)); oraz tableb(fielda varchar(20),fieldb varchar(20), fieldc varchar(20),fieldd varchar(20)) Wykonanie powy|szej instrukcji spowoduje przekopiowanie odpowiednich pól z tableb do table 14 Adam Bujnowski Operatory w SQL Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Jzyk SQL przystosowany jest do operowania na grupach krotek. Oznacza to, |e je[li wykonamy okre[lone polecenie w jzyku SQL, to dotyczy ono bdzie wszystkich krotek, dla wszystkich tabel do których si odwoBujemy i które speBniaj warunek. Nie podanie warunku oznacza prawd dla wszystkich krotek. Dotyczy to szczególnie omawianych w tym wykBadzie instrukcji manipulujcych danymi. Warunek logiczny nakBadany na krotki precyzujemy po klauzuli WHERE. Klauzula WHERE dotyczy szczególnie takich instrukcji jak SELECT, UPDATE i DELETE. Wykonanie instrukcji SELECT z bBdnie podanym, lub nie podanym warunkiem nie spowoduje trwaBych szkód w bazie danych. Takie szkody mog spowodowa instrukcje UPDATE i DELETE. 15 Adam Bujnowski Operatory w SQL Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Klauzula WHERE pozwala zapisa instrukcj testujca, której poddany zostanie ka|dy wiersz wywoBywanej tabeli. Je|eli instrukcja testujca zwróci prawd (TRUE) zaplanowana operacja zostanie dla tego wiersza wykonana, w przeciwnym wypadku nie. Do podstawowych operatorów nale| operatory przyrównania: = jest równe <> jest ro|ne > jest wiksze >= jest wiksze lub równe <= jest mniejsze lub równe < jest mniejsze Operatory te dziaBaj na wikszo[ci dostpnych typów danych  nie tylko liczbowych. W przypadku typów bdcych cigiem znaków  liczy si pozycja w alfabecie, w przypadku typów czasu i daty - chronologia. 16 Adam Bujnowski PrzykBady dziaBania operatorów Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Jeszcze raz przypomnijmy struktur tabeli i dane w niej zawarte: test=# \d osoba Table "public.osoba" Type | Modifiers Column | ----------+-----------------------+----------------------------------------------------- id | integer | not null default nextval('osoba_id_seq1'::regclass) imie | character varying(30) | nazwisko | character varying(30) | miasto | character varying(30) | Indexes: "osoba_pkey1" PRIMARY KEY, btree (id) id | imie | nazwisko | miasto ----+-------+----------+------------ 1 | Jan | Kos | Gdansk 2 | Jelen | Gustaw | Ustron 3 | Wilno | Adam | Mickiewicz 4 | Ewa | Warszawa | Sosnicka (4 rows) 17 Adam Bujnowski PrzykBady dziaBania operatorów Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Dla uproszczenia wykorzystana zostanie instrukcja SELECT, która pozwala na testowanie operatorów bez modyfikacji danych (np. Przed zapalnowan modyfikacj). SELECT * FROM osoba WHERE id > 2; id | imie | nazwisko | miasto ----+-------+----------+------------ 3 | Wilno | Adam | Mickiewicz 4 | Ewa | Warszawa | Sosnicka (2 rows) SELECT * FROM osoba WHERE imie = 'Jan'; id | imie | nazwisko | miasto ----+------+----------+-------- 1 | Jan | Kos | Gdansk (1 row) 18 Adam Bujnowski Operatory w SQL Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Do porównania tekstowego zdecydownie lepszym operatorem od = jest operator LIKE, pozwala on na u|ywanie znaków specjalnych. W jzyku SQL % zastpuje dowolny cig znaków, a znak podkre[lenia '_' dowolny pojedynczy znak. ... WHERE nazw LIKE '%ski'; ... WHERE imie LIKE 'Bo_dan' (Bogdan, Bohdan) SELECT * FROM osoba WHERE imie LIKE 'J%'; id | imie | nazwisko | miasto ----+-------+----------+-------- 1 | Jan | Kos | Gdansk 2 | Jelen | Gustaw | Ustron (2 rows) Je|eli zachodzi potrzeba u|ycia znaku '%' lub '_' mo|liwe jest u|ycie klauzuli ESCAPE: select * from osoba where imie like '@%' ESCAPE '@ ' ; 19 Adam Bujnowski Operatory w SQL Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Aczenie warunków: Do budowania zaawansowanej logiki mo|liwe jest Bczenie pojedynczych warunków spójnikami AND i OR: & WHERE (id >4) AND (imi LIKE 'J%') or (nazwisko = 'Kowalski'); Operatory BETWEEN i IN ...WHERE id_osoby BETWEEN 2 AND 4 ... nazw BETWEEN 'A' AND 'M'; ... data BETWEEN '01-01-2004' AND '01-04-2004' ... id_osoby IN(1,4,5,16); ... imie in ('Tomek','Kasia','Ola'); 20 Adam Bujnowski Warto[ NULL Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Warto[ NULL jest specyficzn warto[ci. W jzyku SQL istnieje tzw. logika trójwarto[ciowa: Prawda ('true','t'), FaBsz ('false', 'f') i warto[ nieokre[lona (NULL). Je|eli którakolwiek strona operatora porównania (=) ma warto[ NULL to zawsze wynik takiego dziaBania zwraca faBsz. Where (id=1) ( true, dla krotek gdzie id=1) Ale : Where (id = NULL) (false  dla ka|dej krotki, nawet null) WHERE (Null = null)  faBsz (pomocne w zapewnieniu poprawnej obsBugi np. kluczy obcych) Do sprawdzania warto[ci NULL opracowano operator IS, który dziaBa: ..where id is null; ..where id is not null; 21 Adam Bujnowski Aktualizacja danych Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Do aktualizacji danych wewntrz tabeli sBu|y polecenie UPDATE: Polecenie: UPDATE Opis: aktualizuje wiersze w tabeli SkBadnia: UPDATE [ ONLY ] table SET col = expression [, ...] [ FROM fromlist ] [ WHERE condition ] PrzykBad: UPDATE osoba SET imie='Ewa' WHERE nazwisko like 'Mickiewicz'; UPDATE osoba SET imie='Gustaw',nazwisko='Jelen' WHERE id =2; 22 Adam Bujnowski Aktualizacja danych Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Po sBowie kluczowym SET wystpuje nazwa atrybutu , znak '=' oraz nowa warto[. Nowa warto[ mo|e by podana jako wyra|enie staBe, lub nazwa atrybutu. UPDATE osoba SET imie=nazwisko,nazwisko=imie; Wykonanie tego polecenia spowoduje zamian warto[ci atrybutów imi i nazwisko miejscami dla wszystkich wierszy w tabeli. System zwróci komunikat: UPDATE 4 (4  ilo[ podmienionych wierszy w bazie danych) 23 Adam Bujnowski Kasowanie danych Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych Polecenie: DELETE Opis: kasuje wiersze w tabeli SkBadnia: DELETE FROM [ ONLY ] table [ WHERE condition ] DELETE FROM osoba  skasuje wszystkie dane z tabeli nale|y zawsze stosowa klauzule WHERE DELETE FROM osoba WHERE imie LIKE 'Adam'; Potwierdzenie: DELETE 2 - usunito dwie krotki W przypadku tabel powizanych klauzula CASCADE pozwala na usunicie wierszy z uwzgldnieniem wszystkich referencji 24 Adam Bujnowski Podsumowanie Politechnika GdaDska, In|ynieria Biomedyczna Przedmiot: Bazy Danych W tej cz[ci poznaBe[ instrukcje INSERT, UPDATE i DELETE  które sBu| do modyfikacji zawarto[ci tabel. Cz[ciowo ju| przytoczone polecenie SELECT zostanie szerzej omówione na nastpnym wykBadzie. Adam Bujnowski

Wyszukiwarka

Podobne podstrony:
sieci0405 w9
w9
MNwI w9
psb w9
W9 Bezpieczne nastawy dla typowych obiektów AiSD
w9 java
cgm w9
W9
nw asd w9
io w9 analiza wymagań
R W9 przebieg
W9
w9 podstawienie elektrofilowe
w9 7
w9 (2)
W9 Mechanizmy i prawidłowości dot motywacji

więcej podobnych podstron