Język SQL

advertisement
Język SQL
Język zapytań SQL- język
relacyjnych baz danych
• SQL (Structured Query Language),czyli Strukturalny Język
Zapytań.
• SQL jest standardowym językiem do kierowania poleceń do
relacyjnej bazy danych i komunikacji z bazą.
• Za pomocą języka SQL można
– wprowadzać dane do bazy,
– odczytywać
– modyfikować
– usuwać.
• Ponieważ SQL jest standardowym językiem wykorzystywanym
we wszystkich relacyjnych bazach danych, użytkownik znający
ten język może pracować z dowolną relacyjną bazą danych.
1
Język zapytań SQL- język
relacyjnych baz danych
• Wariacje SQL w zależności od producenta bazy danych Oracle, IBM, Sybase, Microsoft, mySQL
• PDQ (Parallel Data Query), czyli SQL na wiele procesorów
Relacyjne bazy danych standardy SQL
• Stworzono standardowy język zapytań (SQL), służący do
operowania danymi w bazach relacyjnych.
• Standardy dotyczące relacyjnych baz danych są dobrze
zdefiniowane przez takie organizacje, jak Międzynarodowa
Organizacja Normalizacyjna (ISO) i Narodowy Amerykański
Instytut Standaryzacyjny (ang. American National Standards
Institute - ANSI).
•
•
•
•
SQL
SQL
SQL
SQL
- 89
- 92 - SQL 2
- 92 - rozszerzony o ODBC w 1995 roku
- 99 - SQL 3 wzbogacony o rozszerzenia obiektowe
2
Język definicji i manipulacji
danymi
• Język SQL składa się z trzech języków podrzędnych,
pozwalających wykonywać praktycznie dowolne operacje w
relacyjnej bazie danych
• Do projektowania, definiowania logicznej struktury danych
używany jest język definicji danych (ang. DDL - Data Definition
Language).
– do tworzenia tabel, usuwania ich,
– definiowania perspektyw,
– indeksów,
– ograniczeń itd
• Do modyfikowania danych w systemu służy język manipulacji
danymi (ang. DML - Data Manipulation Language).
• Język zapytań o dane (odczytywać dane) (ang. DQL - Data
Query Language)
Informacje o widokach w słowniku
Oracle
• Możemy uzyskać listę tabel w słowniku Oracle stosując
zapytanie do następującego widoku.
SELECT *
FROM dictionary
ORDER BY table_name;
3
Tworzenie tabeli poprzez
polecenia CREATE TABLE
CREATE TABLE user.STUDENT
( ID_STUDENT INTEGER NOT NULL,
IMIE VARCHAR2(25) NOT NULL,
NAZWISKO VARCHAR2(30) NOT NULL,
PESEL INTEGER NOT NULL,
ADRES_E_MAIL VARCHAR2(100),
CONSTRAINT PK_STUDENT PRIMARY KEY (ID_STUDENT ))
Stawianie komentarzy do tabeli
COMMENT ON COLUMN user.STUDENT.ID_STUDENT IS
'IDENTYFIKATOR STUDENTA';
COMMENT ON COLUMN user.STUDENT.IMIE IS 'IMIE STUDENTA';
COMMENT ON COLUMN user.STUDENT.NAZWISKO IS 'NAZWISKO
STUDENTA';
COMMENT ON COLUMN user.STUDENT.PESEL IS 'NUMER PESELU';
COMMENT ON COLUMN user.STUDENT.ADRES_E_MAIL IS 'ADRES
E_MAIL STUDENTA';
4
Sposoby wprowadzania danych
do bazy danych Oracle
-
-
Wprowadzić za pomocą formularza (Oracle Forms)
Pobrać dane z innej bazy Oracle poprzez db_link
Wprowadzić za pomocą narzędzi typu TOAD
Wprowadzić z pliku tekstowego używając opcję External Tables
Wprowadzić z Arkusza Kalkulacyjnego za pomocą HTML_DB
Wprowadzić za pomocą ODBC (Open Data Base Connection) na
przykład dane przechowywane w Ms Acces lub bazę danych Open
Office, DB2, SQL Server, mySQL
Wprowadzić za pomocą HTML_DB
Wprowadzić dane z pliku eksportowego używając narzędzi IMPORT
Wprowadzić dane z pliku używając narzędzi LOADER
Wprowadzić dane z użyciem narzędzi Oracle DATA POMP
Wprowadzić dane z użyciem funkcji TABLE FUNCTION (PL/SQL)
Wprowadzić bezpośrednio do tabeli z użyciem instrukcji INSERT
Instrukcja INSERT
• Instrukcja INSERT jest bardzo prosta.
INSERT INTO table_name[(field_names)] VALUES(field_values);
• gdzie (field_names) parametr nie jest obowiązkowy ale jest
bardzo ważny, pomocny, należy go używać w celu czytelności
kodu.
INSERT INTO table_name VALUES (list_of_values);
5
Instrukcja INSERT
• Tabela do której chcemy wprowadzać, dodawać dane musi
istnieć!
• Jeżeli tabela nie istnieje Oracle wyświeli nam „błąd”:
ORA-00942: tabela lub perspektywa nie istnieje
• W takiej sytuacji należy najpierw utworzyć tabelę i następne
wprowadzić dane.
Wprowadzanie danych do tabeli za
pomocą INSERT
INSERT INTO user.STUDENT
(ID_STUDENT, IMIE, NAZWISKO, PESEL, ADRES_E_MAIL)
VALUES (1, 'PIOTR', 'ILCZEW', 62092211111,
'[email protected]');
INSERT INTO user.STUDENT
(ID_STUDENT, IMIE, NAZWISKO, PESEL, ADRES_E_MAIL)
VALUES (2, 'ADAM', 'GALEWSKI', 710209211111,
'[email protected]');
select * from user.STUDENT;
6
Tworzenie tabeli poprzez
polecenia CREATE TABLE
CREATE TABLE user.PIOSENKI
(WYKONAWCA_ID INTEGER NOT NULL,
PIOSENKA VARCHAR2(100),
CONSTRAINT PK_PIOSENKI PRIMARY KEY (WYKONAWCA_ID
));
COMMENT ON COLUMN user.PIOSENKI.WYKONAWCA_ID IS
'IDENTYFIKATOR WYKONAWCY’;
COMMENT ON COLUMN user.PIOSENKI.PIOSENKA IS 'TYTUL
PIOSENKI’;
Tworzenie tabeli poprzez
polecenia CREATE TABLE
CREATE TABLE user.WYKONAWCA
( WYKOANWCA_ID INTEGER NOT NULL,
IMIE_NAZWISKO VARCHAR2(80),
CONSTRAINT PK_WYKONAWCA PRIMARY KEY
(WYKOANWCA_ID ));
COMMENT ON COLUMN user.WYKONAWCA.WYKOANWCA_ID
IS 'IDENTYFIKATOR WYKONAWCY’;
COMMENT ON COLUMN user.WYKONAWCA.IMIE_NAZWISKO
IS 'IMIE i NAZWISKO WYKONAWCY’;
7
Zmiana nazwy kolumn po
utworzeniu tabeli
Jeżeli po utworzeniu tabeli chcemy zmienić nazwy kolumn możemy
usunąć tabelę i ponownie ją utworzyć. W celu nie utracenia
wprowadzonych do tabeli danych należy użyć tymczasowej
tabeli.
Druga metoda jest użycie polecenia
ALTER TABLE RENAME COLUMN
ALTER TABLE PIL.WYKONAWCA
RENAME COLUMN WYKOANWCA_ID to WYKONAWCA_ID
Usuwanie klucza z kolumny tabeli
ALTER TABLE user.PIOSENKI DROP (WYKONAWCA_ID);
ALTER TABLE user.PIOSENKI ADD
WYKONAWCA_ID INTEGER NOT NULL;
ORA-01758: aby dodać obowiązkową kolumnę (NOT NULL) tabela
musi być pusta
DELETE from user.PIOSENKI;
8
Wprowadzanie danych do tabeli za
pomocą INSERT
INSERT INTO PIOSENKI ('LATO',1);
ORA-00928:brak słowa kluczowego SELECT
Brakuje słowa kluczowego VALUES
INSERT INTO PIOSENKI VALUES('LATO',1);
ORA-01722 niepoprawna liczba
To oznacza, że dane, które wprowadzamy są w niewłaściwym,
nieodpowiednim porządku.
INSERT INTO PIOSENKI VALUES(2,'ZIMA');
1 row inserted
Wprowadzanie danych do tabeli za
pomocą INSERT
INSERT INTO PIOSENKI (WYKONAWCA_ID, PIOSENKA)
VALUES(3,'ZIMA');
1 row inserted
INSERT INTO PIOSENKI (PIOSENKA, WYKONAWCA_ID,)
VALUES('ZIMA', 4);
ORA-01747 niepoprawna specyfikacja
użytkownik.tablica.kolumna, tablica.kolumna lub kolumna
Należy usunąć
, po WYKONAWCA_ID
INSERT INTO PIOSENKI (PIOSENKA, WYKONAWCA_ID)
VALUES('ZIMA', 4);
ORA-00904: "WYKOANWCA_ID": niepoprawny identyfikator
9
Wprowadzanie danych do tabeli za
pomocą INSERT
• INSERT INTO WYKONAWCA ( WYKONAWCA_ID,
IMIE_NAZWISKO) VALUES (1, 'Jean Michel Jarre');
• INSERT INTO WYKONAWCA ( WYKONAWCA_ID,
IMIE_NAZWISKO) VALUES (2, 'Salvatore Adamo');
• INSERT INTO WYKONAWCA ( WYKONAWCA_ID,
IMIE_NAZWISKO) VALUES (3, 'Celine Dion');
• INSERT INTO WYKONAWCA ( WYKONAWCA_ID,
IMIE_NAZWISKO) VALUES (4, 'Celine Dion');
• Jeżeli zrobimy próby i chcemy wprowadzić po raz kolejny tego
samego wykonawcę to wystąpi błąd ORA-00001:naruszono
więzy unikatowe PK_WYKONAWCA
• INSERT INTO WYKONAWCA ( WYKONAWCA_ID,
IMIE_NAZWISKO) VALUES (4, 'Andrea Bocceli');
Usuwanie wierszy z tabeli
• delete from WYKONAWCA where WYKONAWCA_ID=4;
• Usuwanie wszystkich wierszy z tabeli
• DELETE FROM PIOSENKI;
lub
• TRUNCATE TABLE PIOSENKI;
10
Wprowadzanie danych do tabeli za
pomocą INSERT
-- usuwanie danych z tabeli
DELETE FROM PIOSENKI;
-- wprowadzanie danych do tabeli
INSERT INTO PIOSENKI (WYKONAWCA_ID, PIOSENKA) VALUES(1,'Equinoxe');
INSERT INTO PIOSENKI (WYKONAWCA_ID, PIOSENKA) VALUES(1, 'Oxygene');
INSERT INTO PIOSENKI (WYKONAWCA_ID, PIOSENKA) VALUES(1, 'Oxygene');
INSERT INTO PIOSENKI (WYKONAWCA_ID, PIOSENKA) VALUES(1, 'C est la vie');
INSERT INTO PIOSENKI (WYKONAWCA_ID, PIOSENKA) VALUES(2, 'Tombe La Neige');
INSERT INTO PIOSENKI (WYKONAWCA_ID, PIOSENKA) VALUES(2, 'Vous Permettez
Monsieur');
INSERT INTO PIOSENKI (WYKONAWCA_ID, PIOSENKA) VALUES(2, 'Nathalie');
INSERT INTO PIOSENKI (WYKONAWCA_ID, PIOSENKA) VALUES(2, 'Plus fort que le temps');
INSERT INTO PIOSENKI (WYKONAWCA_ID, PIOSENKA) VALUES(2, 'Que Sera');
INSERT INTO PIOSENKI (WYKONAWCA_ID, PIOSENKA) VALUES(2, 'Nuestra novela');
INSERT INTO PIOSENKI (WYKONAWCA_ID, PIOSENKA) VALUES(2, 'Comme toujours');
• SELECT * FROM WYKONAWCA;
• DESC WYKONAWCA;
• SELECT DISTINCT WYKONAWCA_ID, IMIE_NAZWISKO
FROM WYKONAWCA;
• SELECT * from PIOSENKI
SELECT w.WYKONAWCA_ID, w.IMIE_NAZWISKO, p.PIOSENKA
FROM PIOSENKI p, WYKONAWCA w
WHERE p.WYKONAWCA_ID = w.WYKONAWCA_ID;
11
Tworzenie tabeli poprzez
polecenia CREATE TABLE
CREATE TABLE PIL.PIOSENKI_N
( NUMER_ID INTEGER NOT NULL,
WYKONAWCA VARCHAR2(80),
PIOSENKA VARCHAR2(80),
CONSTRAINT PK_PIOSENKI_N PRIMARY KEY (NUMER_ID ));
COMMENT ON COLUMN PIL.PIOSENKI_N.NUMER_ID IS
'NUMER PIOSENKI w KOLEKCJI’;
COMMENT ON COLUMN PIL.PIOSENKI_N.WYKONAWCA IS
'WYKOANWCA PIOSENKI’;
COMMENT ON COLUMN PIL.PIOSENKI_N.PIOSENKA IS 'TYTUL
PIOSENKI’;
Wprowadzanie danych do tabeli za
pomocą INSERT
INSERT INTO PIOSENKI_N VALUES(1,'Jean Michel Jarre', 'Equinoxe');
INSERT INTO PIOSENKI_N VALUES(2,'Jean Michel Jarre', 'Oxygene');
INSERT INTO PIOSENKI_N VALUES(3,'Jean Michel Jarre', 'Oxygene');
INSERT INTO PIOSENKI_N VALUES(4,'Jean Michel Jarre', 'C est la vie');
INSERT INTO PIOSENKI_N VALUES(5,'Salvatore Adamo', 'Tombe La Neige');
INSERT INTO PIOSENKI_N VALUES(6,'Salvatore Adamo', 'Vous Permettez
Monsieur');
INSERT INTO PIOSENKI_N VALUES(7,'Salvatore Adamo', 'Nathalie');
INSERT INTO PIOSENKI_N VALUES(8,'Salvatore Adamo', 'Plus fort que le temps');
INSERT INTO PIOSENKI_N VALUES(9,'Salvatore Adamo', 'Que Sera');
INSERT INTO PIOSENKI_N VALUES(10,'Salvatore Adamo', 'Nuestra novela');
INSERT INTO PIOSENKI_N VALUES(11,'Salvatore Adamo', 'Comme toujours');
INSERT INTO PIOSENKI_N VALUES(12,'Edit Piaf', 'La vie en rose');
INSERT INTO PIOSENKI_N VALUES(13,'Dalida', 'Salma ya salama arabic');
12
Normalizacja danych - tworzenie
słownika
SELECT * FROM PIOSENKI_N;
Wybieramy listy wykonawców bez powtórzenia (DISTINCT)
SELECT DISTINCT WYKONAWCA FROM PIOSENKI_N;
Normalizacja danych - tworzenie
słownika
CREATE TABLE PIL.WYKONAWCA_T
(WYKONAWCA_ID INTEGER,
WYKONAWCA_IMIE VARCHAR2(80),
CONSTRAINT PK_WYKONAWCA_T PRIMARY KEY
(WYKONAWCA_ID ));
INSERT INTO WYKONAWCA_T (WYKONAWCA_IMIE )
SELECT DISTINCT WYKONAWCA WYKONAWCA_IMIE FROM
PIOSENKI_N;
• ORA-01400: Nie można wstawić wartości NULL do
user.WYKONAWCA_T.WYKONAWCA_ID
13
Normalizacja danych - tworzenie
słownika
Wyłączenie sprawdzenia ograniczenia
ALTER TABLE WYKONAWCA_T DISABLE CONSTRAINT
PK_WYKONAWCA_T;
INSERT INTO WYKONAWCA_T (WYKONAWCA_IMIE )
SELECT DISTINCT WYKONAWCA WYKONAWCA_IMIE FROM
PIOSENKI_N;
2 rows inserted
Normalizacja danych - tworzenie
słownika
• SELECT * FROM WYKONAWCA_T;
• UPDATE WYKONAWCA_T SET WYKONAWCA_ID=1 WHERE
WYKONAWCA_IMIE LIKE '%Jarre%';
• UPDATE WYKONAWCA_T SET WYKONAWCA_ID=2 WHERE
WYKONAWCA_IMIE LIKE '%Adamo%';
• Włączenie sprawdzenia ograniczenia
• ALTER TABLE WYKONAWCA_T ENABLE CONSTRAINT
PK_WYKONAWCA_T;
14
Normalizacja danych - tworzenie
słownika - drugie rozwiązanie
• Stosujemy trigger (wyzwalacz)
• Tworzymy sekwencję
create sequence SEQ_WYKONAWCA_T
• Tworzymy wyzwalacz, który używa tej sekwencji
create trigger WYK_T_trigger
before insert on WYKONAWCA_T for each row
begin
select SEQ_WYKONAWCA_T.nextval into :new.WYKONAWCA_ID from dual;
end;
Wyzwalacz został utworzony.
show error
Nie ma błędów.
Tom Kyte, How to auto increment a column - like a sqlserver Identity or Informix
serial, version 8.0.5,
http://asktom.oracle.com/pls/ask/f?p=4950:8:888505161037443817::NO::F4950
_P8_DISPLAYID,F4950_P8_CRITERIA:256815210563
Normalizacja danych - tworzenie
słownika - drugie rozwiązanie
• Usuwamy wiersze z tabeli WYKONAWCA_T
delete from WYKONAWCA_T;
• Wstawiamy dane do słownikowej tabeli
INSERT INTO WYKONAWCA_T (WYKONAWCA_IMIE )
SELECT DISTINCT WYKONAWCA WYKONAWCA_IMIE
FROM PIOSENKI_N;
• Wyświetlanie wprowadzonych danych
select WYKONAWCA_ID, WYKONAWCA_IMIE
from WYKONAWCA_T;
15
Normalizacja danych
• Mamy listy wykonawców w tabeli WYKONAWCA_T
• Teraz chcemy stworzyć listę piosenek w tabeli PIOSENKI_T,
pobierając z tabeli WYKONAWCA_T identyfikator
WYKONAWCA z kolumny WYKONAWCA_ID, a z tabeli
PIOSENKI_N lista PIOSENEK.
CREATE TABLE PIOSENKI_T as
SELECT w.WYKONAWCA_ID, p.PIOSENKA
FROM PIOSENKI_N p, WYKONAWCA_T w
WHERE p.WYKONAWCA=w.WYKONAWCA_IMIE;
Normalizacja danych
• Teraz chcemy dodawać piosenki do tabeli PIOSENKI_T i
jednocześnie uaktualniać, dodawać dane do tabeli
WYKONAWCY_T.
• Teraz musimy połączyć więżą referencyjną kolumny
WYKONAWCA_ID z tabeli PIOSENKI_T i WYKONAWCA_ID z
tabeli WYKONAWCY_T.
ALTER TABLE PIL.PIOSENKI_T ADD
CONSTRAINT WYKONAWCA_ID
FOREIGN KEY (WYKONAWCA_ID)
REFERENCES PIL.WYKONAWCA_T (WYKONAWCA_ID)
ENABLE VALIDATE;
16
Wstawianie danych do tabeli,
zależnej od tabeli referencyjnej
• Teraz przed dodaniem danych do tabeli PIOSENKI_T
sprawdzamy czy WYKONAWCA figuruje w tabeli
WYKONAWCA_T.
• Jeżeli nie istnieje wpis dodajemy wpis do tabeli
WYKONAWCA_T.
• Jeżeli spróbujemy dodać wpis z nieistniejącym numerem
wykonawcy WYKONAWCA_ID wystąpi błąd
INSERT INTO PIOSENKI_T ( WYKONAWCA_ID, PIOSENKA)
VALUES (11,'TEST');
ORA-02291: naruszono więzy integralności
(user.WYKONAWCA_ID) - nie znaleziono klucza nadrzędnego
Wstawianie danych do tabeli,
zależnej od tabeli referencyjnej
• Teraz przed dodaniem danych do tabeli PIOSENKI_T
sprawdzamy czy WYKONAWCA figuruje w tabeli
WYKONAWCA_T.
• Jeżeli nie istnieje wpis dodajemy wpis do tabeli
WYKONAWCA_T.
• Jeżeli spróbujemy dodać wpis z nieistniejącym numerem
wykonawcy WYKONAWCA_ID otrzymamy błąd
INSERT INTO PIOSENKI_T ( WYKONAWCA_ID, PIOSENKA)
VALUES (11,'TEST');
ORA-02291: naruszono więzy integralności
(user.WYKONAWCA_ID) - nie znaleziono klucza nadrzędnego
17
Wstawianie danych do tabeli,
zależnej od tabeli referencyjnej
• Wprowadzamy do tabeli WYKONAWCA_T imię i nazwisko
wykonawcy w kolumny WYKONAWCA_IMIE.
INSERT INTO WYKONAWCA_T (WYKONAWCA_IMIE)
VALUES ('Goran Bregovic');
• Następne wybieramy identyfikator WYKONAWCY WYKONAWCA_ID z tabeli WYKONAWCA_T.
SELECT * FROM WYKONAWCA_T;
• W tabeli WYKONAWCA_T artysta Goran Bregovic posiada
identyfikator WYKONAWCA_ID 7
INSERT INTO PIOSENKI_T ( WYKONAWCA_ID, PIOSENKA)
VALUES (7,'Djurdjevdan');
• 1 rows inserted
Wstawianie danych do tabeli,
zależnej od tabeli referencyjnej
• Innym możliwym rozwiązaniem jest stosowanie
„multi-table insert”,
który jest dostępny w Oracle9i oraz Oracle 10g.
INSERT ALL
INTO WYKONAWCA_T ( WYKONAWCA_IMIE) VALUES
(WYKONAWCA_IMIE)
INTO PIOSENKI_T (PIOSENKA) VALUES (PIOSENKA)
SELECT 'Enrique Iglesias' WYKONAWCA_IMIE, 'Be With You'
PIOSENKA
FROM dual;
• W tabeli PIOSENKI_T pole WYKONAWCA_ID jest puste.
18
Wstawianie danych do tabeli,
zależnej od tabeli referencyjnej
Widzimy, że do tabeli wykonawców możemy wprowadzać ile razy
chcemy imię i nazwisko tego samego wykonawcy.
W celu eliminacji tego zjawiska i przejmując, że
- nie istnieje dwóch wykonawców z tym samym imieniem i
nazwiskiem
- wprowadzamy zawsze w jednakowy sposób imię i nazwisko
wykonawcy możemy wprowadzić następujące zmiany.
Wyłączamy kontrolę referencyjnej integralności w celu usunięcia
wierszy
•
ALTER TABLE WYKONAWCA_T DROP PRIMARY KEY CASCADE;
Usuwamy danych o wykonawcy 'Enrique Iglesias’ z tabeli
WYKONAWCY_T.
•
DELETE FROM WYKONAWCA_T WHERE
WYKONAWCA_IMIE='Enrique Iglesias’;
Wstawianie danych do tabeli,
zależnej od tabeli referencyjnej
W celu zmiany klucza głównego z WYKONAWCA_ID na
WYKONAWCA_IMIE należy ponownie utworzyć tabelę
WYKONAWCA_T. Używamy tabeli tymczasowej
WYKONAWCA_1.
•
•
•
CREATE TABLE WYKONAWCA_1 as SELECT * FROM
WYKONAWCA_T;
DROP TABLE WYKONAWCA_T;
CREATE TABLE PIL.WYKONAWCA_T
(WYKONAWCA_ID INTEGER, WYKONAWCA_IMIE VARCHAR2(80),
CONSTRAINT PK_WYKONAWCA_T PRIMARY KEY
(WYKONAWCA_IMIE ));
19
Wstawianie danych do tabeli,
zależnej od tabeli referencyjnej
• Należy ponownie utworzyć wyzwalacza
CREATE OR REPLACE TRIGGER WYK_T_trigger
before insert on WYKONAWCA_T for each row
begin
select SEQ_WYKONAWCA_T.nextval into
:new.WYKONAWCA_ID from dual;
end;
Wstawianie danych do tabeli,
zależnej od tabeli referencyjnej
•
Wprowadzamy nie powtarzające się dane do tabeli WYKONAWCA_T,
które pobieramy z tabeli WYKONAWCA_1
• INSERT INTO WYKONAWCA_T
(WYKONAWCA_IMIE)
SELECT DISTINCT WYKONAWCA_IMIE
FROM WYKONAWCA_1;
5 rows inserted
Przy ponownej próbie wprowadzania danych z tabeli do tabeli
WYKONAWCA_T, które pobieramy z tabeli WYKONAWCA_1
otrzymujemy komunikat
BŁĄD w linii 1:
ORA-00001: naruszono więzy unikatowe (PIL.PK_WYKONAWCA_T)
20
Wstawianie danych do tabeli,
zależnej od tabeli referencyjnej
ALTER TABLE PIOSENKI_T ADD (
CONSTRAINT WYKONAWCA_ID FOREIGN KEY (WYKONAWCA_ID)
REFERENCES WYKONAWCA_T (WYKONAWCA_ID) DISABLE);
DELETE FROM WYKONAWCA_T WHERE
WYKONAWCA_IMIE='Enrique Iglesias'
DELETE FROM PIOSENKI_T WHERE PIOSENKA='Be With You';
Ćwiczenie
• Proszę zrobić model tabel dotyczących lotów.
- samoloty;
- rejsy
- samolot - rejs
• Tabele samoloty i rejsy będą tabelami słownikowymi, a tabela
samolot - rejs będzie powiązana referencyjne z tabelami
słownikowymi.
• Proszę zaprojektować tabele i wprowadzić do nich przykładowe
dane oraz zbudować powiązania referencyjne.
21
Dane dotyczące floty samolotów
Lp
1
2
3
4
5
6
7
8
9
10
Samolot
Boeing
Boeing
Boeing
Airbus
Airbus
Aero Alenia
Boeing
Boeing
FOKKER
Boeing
Model
737-400
B777-200
B757-200
A330-300
A300-600
ATR-72
B777-300
B747-300
100
B737-800
Liczba miejsc
170
358
180
305
247
66
388
405
100
189
Na początku lotnisko jest obsługiwane przez pierwszych 5
typów samolotów. Później następne 5 typy samolotów
zaczynają latać do danego portu.
http://www.747sp.com/Explained.asp
http://www.thaiair.com/Travel_Destination_Information/Our_Aircraft
http://www.jetonly.com/en/tub.htm
22
Download