02-Przyklad komunikacji z Relacyjna Baza Danych.pdf

(218 KB) Pobierz
2011-12-12
Data Definition Language: CREATE TABLE
Przykład komunikacji
z Relacyjną Bazą Danych
Utworzenie za pomocą SQL relacji do przechowywania
adresów e-mail
create table mailing_list (
email
varchar(100) not null primary key,
name
varchar(100)
);
Projektowanie i Zarządzanie Bazami Danych
09/05
Data Manipulation Language: an INSERT
Data Manipulation Language: podstawowe operacje
Dodanie nowego pola do istniejącej relacji:
Dodawanie danych do tabeli – lista nazw kolumn uniezależnia
modyfikację od późniejszych zmian w strukturze
insert into mailing_list (name, email)
values ('Philip Greenspun','philg@mit.edu');
alter table mailing_list add (phone_number varchar(20));
Wstawienie napisu z apostrofem:
insert into mailing_list (name, email)
values ('Michael O''Grady','ogrady@fastbuck.com');
Odczytywanie danych z utworzonej bazy:
select * from mailing_list;
Formatowanie rezultatów zapytania:
Zmiana struktury bazy (ALTER TABLE)
Zmiana struktury bazy (ALTER TABLE):
SQL> column email format a25
SQL> column name format a25
SQL> column phone_number format a12
SQL> set feedback on
SQL> select * from mailing_list;
EMAIL
philg@mit.edu
NAME
Philip Greenspun
PHONE_NUMBER
------------------------- ------------------------- ------------
ogrady@fastbuck.com Michael O'Grady
drop table mailing_list;
create table mailing_list (
email
varchar(100) not null primary key,
name
varchar(100)
);
Dodanie tabeli z numerami telefonów (klucz obcy – email, nie jest kluczem
głównym – są możliwe powtórzenia tej samej wartości):
create table phone_numbers (
email
varchar(100) not null references mailing_list(email),
number_type varchar(15) check (number_type in ('work','home','cell','beeper')),
phone_number varchar(20) not null
);
2 rows selected.
1
2011-12-12
Zabezpieczenia przed błędami
Wprowadzanie danych
Wstawienie nowych danych do mailing_list:
Jeśli mailing_list jest usunięta system nie dopisze danych do
phone_numbers:
insert into mailing_list (name, email)
values ('Philip Greenspun','philg@mit.edu');
insert into mailing_list (name, email)
values ('Michael O''Grady','ogrady@fastbuck.com');
SQL> insert into phone_numbers
values ('ogrady@fastbuck.com','work','(800) 555-1212');
ORA-02291: integrity constraint (SCOTT.SYS_C001080) violated
- parent key not found
Wstawienie nowych danych do mailing_list (pominięto list nazw
kolum):
insert into phone_numbers
values ('ogrady@fastbuck.com','work','(800) 555-1212');
insert into phone_numbers
values ('ogrady@fastbuck.com','home','(617) 495-6000');
insert into phone_numbers
values ('philg@mit.edu','work','(617) 253-8574');
insert into phone_numbers
values ('ogrady@fastbuck.com','beper','(617) 222-3456');
Zabezpieczenia przed błędami – c.d.
Łączenie tabel
Dla ostatniego wpisu źle zapisaliśmy wartość number_type:
Złączenie 2 tabel to iloczyn Kartezjański (liczność produktu Kartezjańskiego to
N*M wierszy):
SQL> select * from mailing_list, phone_numbers;
EMAIL
NAME
----------------
----------------
philg@mit.edu
Philip Greenspun
ogrady@fastbuck.com Michael O'Grady
philg@mit.edu
Philip Greenspun
ogrady@fastbuck.com Michael O'Grady
philg@mit.edu
Philip Greenspun
ogrady@fastbuck.com Michael O'Grady
EMAIL
TYPE
----------------
------
ogrady@fastbuck.com work
ogrady@fastbuck.com work
ogrady@fastbuck.com home
ogrady@fastbuck.com home
philg@mit.edu
work
philg@mit.edu
work
NUMBER
--------------
(800) 555-1212
(800) 555-1212
(617) 495-6000
(617) 495-6000
(617) 253-8574
(617) 253-8574
ORA-02290: check constraint (SCOTT.SYS_C001079) violated
Powinno być: (number_type in ('work','home','cell','beeper'))
6 rows selected.
Łączenie tabel – c.d.
Wprowadzanie poprawek
Ograniczenie rozmiaru wyniku poprzez sformułowanie warunku:
select * from mailing_list, phone_numbers
where mailing_list.email = phone_numbers.email;
EMAIL
NAME
----------------
----------------
ogrady@fastbuck.com Michael O'Grady
ogrady@fastbuck.com Michael O'Grady
philg@mit.edu
Philip Greenspun
3 rows selected.
EMAIL
TYPE
----------------
------
ogrady@fastbuck.com work
ogrady@fastbuck.com home
philg@mit.edu
work
NUMBER
--------------
(800) 555-1212
(617) 495-6000
(617) 253-8574
Usunięcie wszystkiego:
SQL> delete from phone_numbers;
3 rows deleted.
Usunięcie wierszy spełniających warunek:
delete from phone_numbers
where email = 'philg@mit.edu';
2
2011-12-12
Wprowadzanie poprawek
SQL> update mailing_list
set name = 'Phil-baby Greenspun'
where email = 'philg@mit.edu';
1 row updated.
SQL> select * from mailing_list;
EMAIL
--------------------
philg@mit.edu
ogrady@fastbuck.com
2 rows selected.
NAME
--------------------
Phil-baby Greenspun
Michael O'Grady
3
Zgłoś jeśli naruszono regulamin