Język zapytań SQL- język relacyjnych baz danych



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

Język SQL, zajęcia nr 1

Projektowanie systemów baz danych

Paweł Rajba

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Wykład 5. SQL praca z tabelami 2

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

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

Wykład 8. SQL praca z tabelami 5

Hurtownia Świętego Mikołaja projekt bazy danych

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

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Oracle PL/SQL. Paweł Rajba.

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

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

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Systemy GIS Tworzenie zapytań w bazach danych

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

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Bazy danych - Materiały do laboratoriów VIII

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

Bazy Danych i Usługi Sieciowe

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

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Bazy danych 10. SQL Widoki

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

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

Aspekty aktywne baz danych

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

Bazy danych i usługi sieciowe

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

Bazy danych. Dr inż. Paweł Kasprowski

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

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

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

Autor: Joanna Karwowska

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

Język SQL podstawy zapytań

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Wykład 05 Bazy danych

Bazy danych Ćwiczenia projektowe

Bazy danych. Polecenia SQL

Wykład IV Modelowanie danych, projektowanie systemu informatycznego Modelowanie konceptualne implementacyjne Modelowanie pojęciowe na encjach

Wykład 6. SQL praca z tabelami 3

BAZA DANYCH SIECI HOTELI

1 Projekt fizyczny 1. 3 Perspektywy słownika danych Źródła 12

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

Język SQL, zajęcia nr 2

Oracle11g: Wprowadzenie do SQL

Przestrzenne bazy danych Podstawy języka SQL

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

SQL :: Data Definition Language

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

Oracle PL/SQL. Paweł Rajba.

Relacyjne bazy danych. Podstawy SQL

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

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Widok Connections po utworzeniu połączenia. Obszar roboczy

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń

15. Funkcje i procedury składowane PL/SQL

Zaawansowane bazy danych i hurtownie danych semestr I

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Podstawowe informacje o bazach danych. Technologie Informacyjne

Komunikacja z bazą danych psql

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

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

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

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

PODSTAWY BAZ DANYCH 13. PL/SQL

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Zarządzanie obiektami bazy danych Oracle11g

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

Bazy danych. dr inż. Arkadiusz Mirakowski

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

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

Kurs. Podstawy MySQL

Relacyjne bazy danych. Podstawy SQL

Jerzy Nawrocki, Wprowadzenie do informatyki

Bazy danych 7. SQL podstawy

Wykład :45 BD-1 W_3

Wyzwalacze TWORZENIE WYZWALACZY

Wprowadzenie do baz danych

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

Bazy danych wykład szósty Więzy i wyzwalacze. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

Administracja i programowanie pod Microsoft SQL Server 2000

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

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

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

Przykładowa baza danych BIBLIOTEKA

Inżynieria Programowania Laboratorium 3 Projektowanie i implementacja bazy danych. Paweł Paduch paduch@tu.kielce.pl

Cele. Definiowanie wyzwalaczy

PLAN WYKŁADU BAZY DANYCH PODSTAWOWE KWESTIE BEZPIECZEŃSTWA OGRANICZENIA DOSTĘPU DO DANYCH

Wykład 4. SQL praca z tabelami 1

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

Tworzenie baz danych i tabel

Transkrypt:

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 - 89 SQL - 92 - SQL 2 SQL - 92 - rozszerzony o ODBC w 1995 roku SQL - 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, 'pilczew@yahoo.com'); INSERT INTO user.student (ID_STUDENT, IMIE, NAZWISKO, PESEL, ADRES_E_MAIL) VALUES (2, 'ADAM', 'GALEWSKI', 710209211111, 'adamg@yahoo.com'); 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 Samolot Model Liczba miejsc 1 Boeing 737-400 170 2 Boeing B777-200 358 3 Boeing B757-200 180 4 Airbus A330-300 305 5 Airbus A300-600 247 6 Aero Alenia ATR-72 66 7 Boeing B777-300 388 8 Boeing B747-300 405 9 FOKKER 100 100 10 Boeing B737-800 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