Professional Documents
Culture Documents
Podstawy Języka SQL I Tom3
Podstawy Języka SQL I Tom3
Podstawy Języka SQL I Tom3
n l y
e O
U s
A I
O
l &
D17108PL11
na
Wydanie 1.1
te r
Sierpień 2004
D18985 I n
c l e
r a ®
O
Autor Copyright © 2004, Oracle. Wszelkie prawa zastrzeżone.
Nancy Greenberg Niniejsza dokumentacja zawiera informacje stanowiące chronioną własność firmy
Oracle Corporation. Podano je na warunkach umowy licencyjnej, określającej
ograniczenia dotyczące ich używania i udostępniania. Są one także chronione przez
Współpraca i weryfikacja obowiązujące prawo autorskie. Zabrania się odtwarzania (ang. reverse engineering)
techniczna oprogramowania. Jeśli ta dokumentacja jest dostarczana agencji rządowej USA
należącej do Departamentu Obrony, jest objęta „ograniczonymi prawami” i ma
Wayne Abbott zastosowanie następujące oświadczenie:
Christian Bauwens
Restricted Rights Legend
Perry Benson
Brian Boxx Use, duplication or disclosure by the Government is subject to restrictions for
Zarko Cesljas commercial computer software and shall be deemed to be Restricted Rights software
under Federal law, as set forth in subparagraph (c)(1)(ii) of DFARS 252.227-7013,
Dairy Chan
Rights in Technical Data and Computer Software (October 1988).
Laszlo Czinkoczki
Marjolein Dekkers Niniejszej dokumentacji ani żadnej jej części nie wolno powielać przy użyciu
Matthew Gregory jakichkolwiek środków w żadnej formie bez uprzedniej pisemnej zgody firmy Oracle
Corporation. Każde inne powielanie narusza prawo autorskie i może być ścigane
Stefan Grenstad przez prawo cywilne lub karne.
Joel Goodman
Rosita Hanoman Jeśli ta dokumentacja jest dostarczana agencji rządowej USA nienależącej do
Sushma Jagannath Departamentu Obrony, jest objęta „ograniczonymi prawami”, zgodnie z przepisami
FAR 52.227-14, Rights in Data-General, włącznie z poprawką III (lipiec 1987).
Angelika Krupp
Christopher Lawless Zastrzega się, że informacje zawarte w niniejszej dokumentacji mogą, bez
Marcelo Manzano powiadomienia, ulec zmianie. W wypadku pojawienia się jakichkolwiek wątpliwości
Isabelle Marchand dotyczących dokumentacji prosimy o pisemny kontakt z działem Education Products,
Oracle Corporation, 500 Oracle Parkway, Redwood Shores, CA 94065. Firma Oracle
Malika Marghadi Corporation nie gwarantuje, że ta dokumentacja nie zawiera błędów.
Valli Pataballa
Elspeth Payne Oracle i wszelkie odwołania do produktów Oracle są znakami towarowymi lub
Ligia Jasmin Robayo zastrzeżonymi znakami towarowymi firmy Oracle Corporation.
Bryan Roberts
Helen Robertson
Lata Shivaprasad
i mogą być nazwami towarowymi odpowiednich właścicieli.
n l y
Wszystkie inne nazwy produktów i firm są używane wyłącznie w celu identyfikacji
John Soltani
Priya Vennapusa
e O
Ken Woolfe
U s
Wydawca
Jobi Varghese
A I
O
l &
n a
te r
I n
c l e
r a
O
Spis treści
Wstęp
W Wprowadzenie
Cele lekcji W-2
Cele kursu W-3
Oracle10g W-4
Baza danych Oracle 10g W-6
Oracle Application Server 10g W-7
Oracle Enterprise Manager 10g Grid Control W-8
Systemy zarządzania relacyjnymi i obiektowo-relacyjnymi bazami danych W-9
Platforma internetowa Oracle W-10
Cykl opracowywania systemu W-11
Przechowywanie danych na różnych nośnikach W-13
Pojęcie relacyjnej bazy danych W-14
Definicja relacyjnej bazy danych W-15
Modele danych W-16
Model związków encji W-17
Konwencje modelowania związków encji W-19
Tworzenie powiązań między wieloma tabelami W-21
Terminologia związana z relacyjnymi bazami danych W-23
Właściwości relacyjnej bazy danych W-25
Komunikacja z systemem RDBMS za pomocą języka SQL W-26
System zarządzania relacyjnymi bazami danych firmy Oracle I-27
n l y
Instrukcje SQL W-28
Tabele używane podczas kursu W-29
e O
1
Podsumowanie W-30
Pobieranie danych za pomocą instrukcji SELECT
U s
Cele 1-2
Możliwości instrukcji SELECT 1-3
A I
Podstawowa instrukcja SELECT 1-4
Wybieranie wszystkich kolumn 1-5 O
Wybieranie określonych kolumn 1-6
l &
Pisanie instrukcji SQL 1-7
n a
Ustawienia domyślne nagłówków kolumn 1-8
te r
Wyrażenia arytmetyczne 1-9
Korzystanie z operatorów arytmetycznych 1-10
I n
Priorytety operatorów 1-11
Określanie wartości pustej (NULL) 1-12
l e
Wartości NULL w wyrażeniach arytmetycznych 1-13
c
Określanie aliasu kolumny 1-14
r a
Korzystanie z aliasów kolumn 1-15
Operator konkatencji 1-16
n
te r
Określanie wartości znakowych i wartości dat za pomocą zmiennych podstawiania 2-26
Określanie nazw kolumn, wyrażeń i tekstu 2-27
Korzystanie ze zmiennej podstawiania („&&”) 2-28
I n
Korzystanie z polecenia iSQL*Plus DEFINE 2-29
Korzystanie z polecenia VERIFY 2-30
l e
Podsumowanie 2-31
c
Ćwiczenie 2: Omówienie 2-32
r a
O
iv
3 Korzystanie z funkcji jednowierszowych w celu dostosowania wyników
Cele 3-2
Funkcje języka SQL 3-3
Dwa typy funkcji języka SQL 3-4
Funkcje jednowierszowe 3-5
Funkcje znakowe 3-7
Funkcje operujące wielkością liter 3-9
Korzystanie z funkcji operujących wielkością liter 3-10
Funkcje operujące znakami 3-11
Korzystanie z funkcji operujących znakami 3-12
Funkcje liczbowe 3-13
Korzystanie z funkcji ROUND 3-14
Korzystanie z funkcji TRUNC 3-15
Korzystanie z funkcji MOD 3-16
Praca z datami 3-17
Działania arytmetyczne na datach 3-20
Używanie operatorów arytmetycznych z datami 3-21
Funkcje dat 3-22
Korzystanie z funkcji dat 3-23
Ćwiczenie 3: Omówienie części 1 3-25
Funkcje konwersji 3-26
Niejawna konwersja typu danych 3-27
Jawna konwersja typu danych 3-29 n l y
Używanie funkcji TO_CHAR z datami 3-32
Elementy modelu formatu daty 3-33
e O
Używanie funkcji TO_CHAR z datami 3-37
Używanie funkcji TO_CHAR z liczbami 3-38
U s
Korzystanie z funkcji TO_NUMBER i TO_DATE 3-41
Format daty RR 3-43
A I
Przykład formatu daty RR 3-44
Funkcje zagnieżdżone 3-45 O
Funkcje ogólne 3-47
Funkcja NVL 3-48
l &
a
Korzystanie z funkcji NVL 3-49
n
te r
Korzystanie z funkcji NVL2 3-50
Korzystanie z funkcji NULLIF 3-51
I n
Korzystanie z funkcji COALESCE 3-52
Wyrażenia warunkowe 3-54
c l e
Wyrażenie CASE 3-55
Korzystanie z wyrażenia CASE 3-56
r a
Funkcja DECODE 3-57
Korzystanie z funkcji DECODE 3-58
O Podsumowanie 3-60
Ćwiczenie 3: Omówienie części 2 3-61
v
4 Tworzenie raportów dla danych agregowanych za pomocą funkcji grupowych
Cele 4-2
Co to są funkcje grupowe 4-3
Typy funkcji grupowych 4-4
Funkcje grupowe: składnia 4-5
Korzystanie z funkcji AVG i SUM 4-6
Korzystanie z funkcji MIN i MAX 4-7
Korzystanie z funkcji COUNT 4-8
Korzystanie ze słowa kluczowego DISTINCT 4-9
Funkcje grupowe a wartości NULL 4-10
Tworzenie grup danych 4-11
Tworzenie grup danych: składnia klauzuli GROUP BY 4-12
Korzystanie z klauzuli GROUP BY 4-13
Grupowanie według wielu kolumn 4-15
Korzystanie z klauzuli GROUP BY dla wielu kolumn 4-16
Niedozwolone zapytania korzystające z funkcji grupowych 4-17
Ograniczanie wyników grupowych 4-19
Ograniczanie wyników grupowych za pomocą klauzuli HAVING 4-20
Korzystanie z klauzuli HAVING 4-21
Zagnieżdżanie funkcji grupowych 4-23
Podsumowanie 4-24
Ćwiczenie 4: Omówienie 4-25
n l y
5 Wyświetlanie danych z wielu tabel
Cele 5-2
e O
Uzyskiwanie danych z wielu tabel 5-3
Typy złączeń 5-4
U s
Złączanie tabel za pomocą składni SQL:1999 5-5
Tworzenie złączeń naturalnych 5-6
A I
Pobieranie rekordów za pomocą złączeń naturalnych 5-7
O
Tworzenie złączeń za pomocą klauzuli USING 5-8
Złączanie nazw kolumn 5-9
l &
Pobieranie rekordów za pomocą klauzuli USING 5-10
n a
Kwalifikowanie niejednoznacznych nazw kolumn 5-11
Korzystanie z aliasów tabel 5-12
te r
Tworzenie złączeń za pomocą klauzuli ON 5-13
Pobieranie rekordów za pomocą klauzuli ON 5-14
I n
Tworzenie samozłączeń za pomocą klauzuli ON 5-15
Stosowanie dodatkowych warunków dla złączenia 5-17
l e
Tworzenie złączeń trójkierunkowych za pomocą klauzuli ON 5-18
c
Złączenia nierównościowe 5-19
r a
Pobieranie rekordów za pomocą złączeń nierównościowych 5-20
Złączenia zewnętrzne 5-21
O Złączenia INNER a złączenia OUTER 5-22
LEFT OUTER JOIN 5-23
RIGHT OUTER JOIN 5-24
vi
FULL OUTER JOIN 5-25
Iloczyny kartezjańskie 5-26
Generowanie iloczynu kartezjańskiego 5-27
Tworzenie złączeń krzyżowych 5-28
Podsumowanie 5-29
Ćwiczenie 5: Omówienie 5-30
6 Używanie zapytań podrzędnych do rozwiązywania zapytań
Cele 6-2
Używanie zapytania podrzędnego do rozwiązania problemu 6-3
Składnia zapytania podrzędnego 6-4
Korzystanie z zapytań podrzędnych 6-5
Wskazówki dotyczące korzystania z zapytań podrzędnych 6-6
Typy zapytań podrzędnych 6-7
Zapytania podrzędne jednowierszowe 6-8
Wykonywanie zapytań podrzędnych jednowierszowych 6-9
Korzystanie z funkcji grupowych w zapytaniu podrzędnym 6-10
Klauzula HAVING z zapytaniami podrzędnymi 6-11
Co jest nie tak z tą instrukcją? 6-12
Czy ta instrukcja zwróci jakieś wiersze? 6-13
Zapytania podrzędne wielowierszowe 6-14
l y
Korzystanie z operatora ANY w zapytaniach podrzędnych wielowierszowych 6-15
n
Korzystanie z operatora ALL w zapytaniach podrzędnych wielowierszowych 6-16
Wartości NULL w zapytaniu podrzędnym 6-17
Podsumowanie 6-19
e O
7
Ćwiczenie 6: Omówienie 6-20
Korzystanie z operatorów zbiorów
U s
Cele 7-2
Operatory zbiorów 7-3
A I
Tabele używane na potrzeby tej lekcji 7-4
Operator UNION 7-8 O
Korzystanie z operatora UNION 7-9
l &
Operator UNION ALL 7-11
n a
Korzystanie z operatora UNION AL 7-12
Operator INTERSECT 7-13
te r
Korzystanie z operatora INTERSECT 7-14
I n
Operator MINUS 7-15
Wskazówki dotyczące operatorów zbiorów 7-17
l e
Serwer Oracle a operatory zbiorów 7-18
c
Dopasowywanie instrukcji SELECT 7-19
r a
Dopasowywanie instrukcji SELECT: przykład 7-20
Ustalanie kolejności wierszy 7-21
O Podsumowanie 7-23
Ćwiczenie 7: Omówienie 7-24
vii
8 Operowanie danymi
Cele 8-2
Język operowania danymi 8-3
Dodawanie nowych wierszy do tabeli 8-4
Składnia instrukcji INSERT 8-5
Wstawianie nowych wierszy 8-6
Wstawianie wierszy z wartościami NULL 8-7
Wstawianie wartości specjalnych 8-8
Wstawianie określonych wartości dat 8-9
Tworzenie skryptu 8-10
Kopiowanie wierszy z innej tabeli 8-11
Zmienianie danych w tabeli 8-12
Składnia instrukcji UPDATE 8-13
Aktualizowanie wierszy w tabeli 8-14
Aktualizowanie dwóch kolumn za pomocą zapytania podrzędnego 8-15
Aktualizowanie wierszy na podstawie innej tabeli 8-16
Usuwanie wiersza z tabeli 8-17
Instrukcja DELETE 8-18
Usuwanie wierszy z tabeli 8-19
Usuwanie wierszy na podstawie innej tabeli 8-20
Instrukcja TRUNCATE 8-21
Korzystanie z zapytania podrzędnego w instrukcji INSERT 8-22
Transakcje bazy danych 8-24 n l y
Zalety instrukcji COMMIT i ROLLBACK 8-26
Sterowanie transakcjami 8-27
e O
Wycofywanie zmian do wskazanego punktu 8-28
Niejawne przetwarzanie transakcji 8-29
U s
A
Stan danych po wykonaniu instrukcji COMMIT 8-32 I
Stan danych przed wykonaniem instrukcji COMMIT lub ROLLBACK 8-31
a
Implementacja spójności odczytu 8-38
n
Podsumowanie 8-39
te r
Ćwiczenie 8: Omówienie 8-40
9
I n
Używanie instrukcji DDL do tworzenia tabel i zarządzania nimi
Cele 9-2
l e
Obiekty bazy danych 9-3
c
Reguły nazewnictwa 9-4
r a
Instrukcja CREATE TABLE 9-5
Odwoływanie się do tabel innych użytkowników 9-6
O Opcja DEFAULT 9-7
Tworzenie tabel 9-8
Typy danych 9-9
Typy danych daty i godziny 9-11
viii
Typ danych INTERVAL DAY TO SECOND 9-16
Nakładanie więzów 9-17
Wskazówki dotyczące więzów 9-18
Definiowanie więzów 9-19
Więzy NOT NULL 9-21
Więzy UNIQUE 9-22
Więzy PRIMARY KEY 9-24
Więzy FOREIGN KEY 9-25
Więzy FOREIGN KEY: słowa kluczowe 9-27
Więzy CHECK 9-28
CREATE TABLE: przykład 9-29
Naruszenia więzów 9-30
Tworzenie tabeli za pomocą zapytania podrzędnego 9-32
Instrukcja ALTER TABLE 9-34
Usuwanie tabeli 9-35
Podsumowanie 9-36
Ćwiczenie 9: Omówienie 9-37
10 Tworzenie innych obiektów schematu
Cele 10-2
Obiekty bazy danych 10-3
Co to jest perspektywa 10-4
Zalety perspektyw 10-5
n l y
Perspektywy proste i złożone 10-6
Tworzenie perspektywy 10-7
e O
Pobieranie danych z perspektywy 10-10
Modyfikowanie perspektywy 10-11
U s
Tworzenie perspektywy złożonej 10-12
I
Reguły wykonywania operacji DML na perspektywie 10-13
Korzystanie z klauzuli WITH CHECK OPTION 10-16A
O
Zabranianie wykonywania operacji DML 10-17
Usuwanie perspektywy 10-19
l &
Ćwiczenie 10: Omówienie części 1 10-20
Sekwencje 10-21
n a
Instrukcja CREATE SEQUENCE: składnia 10-23
te r
Tworzenie sekwencji 10-24
Pseudokolumny NEXTVAL i CURRVAL 10-25
I n
Korzystanie z sekwencji 10-27
Buforowanie wartości sekwencji 10-28
l e
Modyfikowanie sekwencji 10-29
c
Wskazówki dotyczące modyfikowania sekwencji 10-30
r a
Indeksy 10-31
Jak są tworzone indeksy 10-33
O Tworzenie indeksu 10-34
Wskazówki dotyczące tworzenia indeksów 10-35
Usuwanie indeksu 10-36
ix
Synonimy 10-37
Tworzenie i usuwanie synonimów 10-39
Podsumowanie 10-40
Ćwiczenie 10: Omówienie części 2 10-41
n l y
A Rozwiązania ćwiczeń
I n
c l e
r a
O
x
___________________
Ćwiczenia dodatkowe
___________________
n l y
e O
U s
A I
O
l &
na
te r
I n
c le
ra
O
Ćwiczenia dodatkowe
2. Dział kadr potrzebuje raportu wyświetlającego wszystkich tych pracowników, którzy dostają
prowizję. Wyświetlać nazwiska, stanowiska, zarobki oraz prowizje tych osób. Posortować
wyniki malejąco według zarobków.
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-2
Ćwiczenia dodatkowe (kontynuacja)
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-3
Ćwiczenia dodatkowe (kontynuacja)
n l y
e O
U s
A I
O
6. Utworzyć raport wyświetlający wszystkich pracowników i oznaczający otrzymywanie
&
przez nich prowizji za pomocą słów Yes i No. W zapytaniu użyć wyrażenia DECODE.
l
a
Uwaga: Wyniki są kontynuowane na następnej stronie.
n
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-4
Ćwiczenia dodatkowe (kontynuacja)
6. (kontynuacja)
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-5
Ćwiczenia dodatkowe (kontynuacja)
Te dodatkowe ćwiczenia mogą być wykonywane po omówieniu następujących tematów:
podstawowa instrukcja SELECT języka SQL, podstawowe polecenia języka iSQL*Plus,
funkcje języka SQL, złączenia, funkcje grupowe.
8. Znaleźć liczbę pracowników, których nazwiska kończą się na literę n. Rozwiązać to zadanie
na dwa sposoby.
9. Utworzyć raport wyświetlający nazwiska, lokalizacje oraz liczby pracowników dla każdego
l
działu. Upewnić się, że są wyświetlane także działy, w których nie ma pracowników.
n y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-6
Ćwiczenia dodatkowe (kontynuacja)
10. Dział kadr potrzebuje raportu wyświetlającego stanowiska obsadzone w działach 10. i 20.
Wyświetlać identyfikatory stanowisk w tych działach.
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-7
Ćwiczenia dodatkowe (kontynuacja)
Te dodatkowe ćwiczenia mogą być wykonywane po omówieniu następujących tematów:
podstawowa instrukcja SELECT języka SQL, podstawowe polecenia języka iSQL*Plus,
funkcje języka SQL, złączenia, funkcje grupowe, zapytania podrzędne.
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-9
Ćwiczenia dodatkowe (kontynuacja)
15. Wyświetlać numery działów, nazwy działów, liczby pracowników oraz średnie zarobki we
wszystkich działach razem z nazwiskami, zarobkami oraz stanowiskami osób zatrudnionych
w tych działach.
n l y
e O
U s
A I
O
l &
n
z najwyższymi średnimi zarobkami. a
16. Utworzyć raport wyświetlający numery działów oraz najniższe zarobki dla działów
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-10
Ćwiczenia dodatkowe (kontynuacja)
17. Utworzyć raport wyświetlający działy, w których nie pracują przedstawiciele handlowi.
Wyświetlać numery działów, nazwy działów oraz lokalizacje.
18. Utworzyć raport statystyczny dla działu kadr, wyświetlający numery działów, nazwy działów
oraz liczby zatrudnionych w nich pracowników dla wszystkich tych działów, które:
n l y
e O
U s
b. zatrudniają najwięcej pracowników:
A I
O
l &
n a
te r
c. zatrudniają najmniej pracowników:
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-11
Ćwiczenia dodatkowe (kontynuacja)
n l y
e O
U s
A I
O
20. Wyświetlać nazwiska wszystkich pracowników, którzy zostali zatrudnieni w tym dniu
&
tygodnia, w którym zatrudniono najwięcej osób.
l
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-12
Ćwiczenia dodatkowe (kontynuacja)
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-13
Ćwiczenia dodatkowe: Studium przypadku
W tym studium przypadku zostanie utworzony zbiór tabel bazy danych na potrzeby
wypożyczalni wideo. Po utworzeniu tabel zostaną do nich dodane rekordy. Następnie rekordy
zostaną zaktualizowane lub usunięte. Na koniec zostanie wygenerowany raport. W bazie danych
znajdują się tylko najistotniejsze tabele.
TITLE
dla #* id
RESERVATION * tytuł
#* data rez. przedmiot * opis
rezerwacji o ocena
dokonana dla o kategoria
o data wydania
dostępne jako
odpowiada kopia
za
TITLE_COPY
n l y
MEMBER
#* id
#* id
* stan
e O
* nazwisko
o imię
U s przedmiot
wypożyczenia
o adres
o miasto
o telefon
odpowiada
za
A I
na potrzeby
l &
utworzone
#* data rezerwacji
o akt. data zwrotu
te r
Uwaga: Aby utworzyć tabele, można wykonać polecenia zawarte w skrypcie buildtab.sql
I n
języka iSQL*Plus. Aby usunąć tabele, można wykonać polecenia zawarte w skrypcie
dropvid.sql języka iSQL*Plus. Następnie można wykonać polecenia zawarte w skrypcie
l e
buildvid.sql języka iSQL*Plus w celu utworzenia tabel i wstawienia do nich danych.
c
•
r a
Jeśli tabele zostaną utworzone za pomocą skryptu buildtab.sql, rozpocząć od punktu 4.
O
•
•
Jeśli tabele wideo zostaną usunięte za pomocą skryptu dropvid.sql, rozpocząć od punktu 1.
1. Utworzyć tabele na podstawie podanych schematów. Wybrać odpowiednie typy danych oraz
upewnić się, że dodano więzy integralności.
e O
Więzy
CHECK
G, PG, R,
NC17, NR
U s DRAMA,
COMEDY,
ACTION,
A I CHILD,
SCIFI,
O DOCUMEN
TARY
l&
Typ NUMBER VARCHAR2 VARCHAR2 VARCHAR2 VARCHAR2 DATE
danych
na
Długość 10 60 400 4 20
e r
I nt
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-15
Ćwiczenia dodatkowe: Studium przypadku (kontynuacja)
c. Nazwa tabeli: TITLE_COPY
e O ID
PK,FK2
klucza
Wartość System
U s
System Date
domyślna
Tabela
Date
MEMBER TITLE_
A I+ 2 days
TITLE_
ref. FK
Kolumna MEMBER_I
COPY
COPY_ O COPY
TITLE_ID
ref. FK D ID
l &
Typ
danych
DATE NUMBER
n a
NUMBER DATE DATE NUMBER
Długość 10
te r 10 10
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-16
Ćwiczenia dodatkowe: Studium przypadku (kontynuacja)
e. Nazwa tabeli: RESERVATION
Nazwa RES_ MEMBER_ TITLE_
kolumny DATE ID ID
Typ klucza PK PK,FK1 PK,FK2
NULL/ NN,U NN,U NN
Unikat.
Tabela MEMBER TITLE
ref. FK
Kolumna MEMBER_ID TITLE_ID
ref. FK
Typ danych DATE NUMBER NUMBER
Długość 10 10
2. Upewnić się, że tabele i więzy zostały utworzone poprawnie, sprawdzając słownik danych.
n l y
e O
U s
A I
O
l &
n a
…
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-17
Ćwiczenia dodatkowe: Studium przypadku (kontynuacja)
a. Numer członka dla tabeli MEMBER: zacząć od 101; nie zezwalać na przechowywanie
wartości w pamięci podręcznej. Nazwać sekwencję MEMBER_ID_SEQ.
a. Numer tytułu dla tabeli TITLE: zacząć od 92; nie zezwalać na przechowywanie wartości
w pamięci podręcznej. Nazwać sekwencję TITLE_ID_SEQ.
4. Dodać dane do tabel. Utworzyć skrypty dla poszczególnych, dodawanych zestawów danych.
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-18
Ćwiczenia dodatkowe: Studium przypadku (kontynuacja)
n a
Centrale
Mark Quick-to-See
te r 6921 King
Way
Lagos 63-559-7777 07-APR-1990
Audry
e In
Ropeburn 86 Chu Street Hong Kong 41-559-87 18-JAN-1991
Molly
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-19
Ćwiczenia dodatkowe: Studium przypadku (kontynuacja)
2 RENTED 2
2 AVAILABLE 2
3 RENTED 3
U s
Exp_Ret_Date
92
93
1
2
101
101 A
1 day ago
I
3 days ago 1 day ago
97 1 106
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-20
Ćwiczenia dodatkowe: Studium przypadku (kontynuacja)
l y
a. Dodać nowy tytuł. Film to „Interstellar Wars”, kategoria „PG”, zaliczany do kategorii
filmów fantastyczno-naukowych. Datą wydania jest 7 lipca 1977 r. Dodać opis
n
O
„Futuristic interstellar action movie. Can the rebels save the humans from the evil
empire?” Upewnić się, że dodano informacje o dwóch kopiach tego tytułu.
e
U s
b. Podać dane dotyczące dwóch rezerwacji. Pierwsza na nazwisko Carmen Velasquez, która
chce wypożyczyć „Interstellar Wars”. Druga na nazwisko Mark Quick-to-See, który chce
wypożyczyć „Soda Gang”.
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-21
Ćwiczenia dodatkowe: Studium przypadku (kontynuacja)
Title Price
Willie and Christmas Too
Alien Again
25
35
n l y
The Glob
My Day Off
35
35
e O
Miracles on Ice
Soda Gang
30
35
U s
Interstellar Wars 29
A I
O
b. Utworzyć skrypt o nazwie lab_apcs_7b.sql, zawierający instrukcję UPDATE
l &
aktualizującą filmy zgodnie z powyższą listą cen. Wykonać instrukcje umieszczone
w skrypcie. Uwaga: Na potrzeby tego ćwiczenia są niezbędne dostępne
numery TITLE_ID.
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-22
Ćwiczenia dodatkowe: Studium przypadku (kontynuacja)
8. Utworzyć raport wyświetlający historie wypożyczania dla wszystkich klientów. Upewnić się,
że w raporcie zawarto nazwiska klientów, wypożyczone filmy, daty wypożyczenia oraz
długości okresów wypożyczenia. Podsumować liczbę wypożyczeń dla wszystkich
klientów w rozważanym okresie. Zapisać instrukcje generujące ten raport w skrypcie
o nazwie lab_apcs_8.sql.
Uwaga: Otrzymane wyniki mogą się różnić.
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-23
n l y
e O
U s
A I
O
l &
n a
te r
I n
c le
ra
O
Oracle Database 10g: Podstawy języka SQL I ĆD-24
Ćwiczenia dodatkowe
n l y
e O
U s
A I
O
l &
na
te r
I n
c le
ra
O
Tabela COUNTRIES
DESCRIBE countries
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I — Tabele do ćwiczeń dodatkowych-2
Tabela DEPARTMENTS
DESCRIBE departments
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I — Tabele do ćwiczeń dodatkowych-3
Tabela EMPLOYEES
DESCRIBE employees
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I — Tabele do ćwiczeń dodatkowych-4
Tabela EMPLOYEES (kontynuacja)
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I — Tabele do ćwiczeń dodatkowych-5
Tabela JOBS
DESCRIBE jobs
n l y
e O
U s
A I
O
l &
n a
te r
I n
c le
r a
O
Oracle Database 10g: Podstawy języka SQL I — Tabele do ćwiczeń dodatkowych-6
Tabela JOB_GRADES
DESCRIBE job_grades
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I — Tabele do ćwiczeń dodatkowych-7
Tabela JOB_HISTORY
DESCRIBE job_history
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I — Tabele do ćwiczeń dodatkowych-8
Tabela LOCATIONS
DESCRIBE locations
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I — Tabele do ćwiczeń dodatkowych-9
Tabela REGIONS
DESCRIBE regions
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I — Tabele do ćwiczeń dodatkowych-10
___________________
Ćwiczenia dodatkowe:
Rozwiązania
___________________
n l y
e O
U s
A I
O
l &
na
te r
I n
c le
ra
O
Ćwiczenia dodatkowe: Rozwiązania
2. Dział kadr potrzebuje raportu wyświetlającego wszystkich tych pracowników, którzy dostają
prowizję. Wyświetlać nazwiska, stanowiska, zarobki oraz prowizje tych osób. Posortować
wyniki malejąco według zarobków.
SELECT last_name, job_id, salary, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary DESC;
A I
liczby przepracowanych lat oraz liczby pełnych przepracowanych miesięcy wszystkich
pracowników. Uporządkować wyniki według długości czasu pracy. Na pierwszym miejscu
O
powinien być umieszczony pracownik zatrudniony najdłużej.
SELECT last_name,
l &
TRUNC(MONTHS_BETWEEN(SYSDATE, hire_date) / 12) YEARS,
n a
TRUNC(MOD(MONTHS_BETWEEN(SYSDATE, hire_date), 12)) MONTHS
FROM employees
te r
ORDER BY years DESC, MONTHS desc;
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I
Rozwiązania ĆD-2
Ćwiczenia dodatkowe: Rozwiązania (kontynuacja)
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I
Rozwiązania ĆD-3
Ćwiczenia dodatkowe: Rozwiązania (kontynuacja)
Te dodatkowe ćwiczenia mogą być wykonywane po omówieniu następujących tematów:
podstawowa instrukcja SELECT języka SQL, podstawowe polecenia języka iSQL*Plus,
funkcje języka SQL, złączenia, funkcje grupowe.
8. Znaleźć liczbę pracowników, których nazwiska kończą się na literę n. Rozwiązać to zadanie
na dwa sposoby.
SELECT COUNT(*)
FROM employees
WHERE last_name LIKE '%n';
-- LUB
SELECT COUNT(*)
FROM employees
WHERE SUBSTR(last_name, -1) = 'n';
n l y
9. Utworzyć raport wyświetlający nazwiska, lokalizacje oraz liczby pracowników dla każdego
FROM
d.location_id, COUNT(e.employee_id)
employees e RIGHT OUTER JOIN departments d
U s
ON e.department_id = d.department_id
A
GROUP BY d.department_id, d.department_name, d.location_id;I
O
10. Dział kadr potrzebuje raportu wyświetlającego stanowiska obsadzone w działach 10. i 20.
&
Wyświetlać identyfikatory stanowisk w tych działach.
l
SELECT DISTINCT job_id
FROM employees
n a
WHERE department_id IN (10, 20);
te r
I n
11. Utworzyć raport wyświetlający stanowiska obsadzone w działach „Administration” oraz
„Executive”. Wyświetlać także liczby pracowników zatrudnionych na tych stanowiskach.
l e
Uporządkować wyniki malejąco według liczb pracowników.
c
SELECT e.job_id, count(e.job_id) FREQUENCY
FROM
r a
employees e JOIN departments d
O
ON e.department_id = d.department_id
WHERE d.department_name IN ('Administration', 'Executive')
GROUP BY e.job_id
ORDER BY FREQUENCY DESC;
e O
U s
15. Wyświetlać numery działów, nazwy działów, liczby pracowników oraz średnie zarobki we
w tych działach.
A I
wszystkich działach razem z nazwiskami, zarobkami oraz stanowiskami osób zatrudnionych
l &
NVL(TO_CHAR(AVG(e1.salary), '99999.99'), 'No average' ) avg_sal,
FROM
n a
e2.last_name, e2.salary, e2.job_id
departments d RIGHT OUTER JOIN employees e1
ON
r
d.department_id = e1.department_id
te
RIGHT OUTER JOIN employees e2
ON
n
d.department_id = e2.department_id
I
GROUP BY d.department_id, d.department_name, e2.last_name, e2.salary,
e2.job_id
c l e
ORDER BY d.department_id, employees;
r a
O
Oracle Database 10g: Podstawy języka SQL I
Rozwiązania ĆD-5
Ćwiczenia dodatkowe: Rozwiązania (kontynuacja)
16. Utworzyć raport wyświetlający numery działów oraz najniższe zarobki dla działów
z najwyższymi średnimi zarobkami.
SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id
HAVING AVG(salary) = (SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id);
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I
Rozwiązania ĆD-6
Ćwiczenia dodatkowe: Rozwiązania (kontynuacja)
17. Utworzyć raport wyświetlający działy, w których nie pracują przedstawiciele handlowi.
Wyświetlać numery działów, nazwy działów oraz lokalizacje.
SELECT *
FROM departments
WHERE department_id NOT IN(SELECT department_id
FROM employees
WHERE job_id = 'SA_REP'
AND department_id IS NOT NULL);
18. Utworzyć raport statystyczny dla działu kadr, wyświetlający numery działów, nazwy działów
oraz liczby zatrudnionych w nich pracowników dla wszystkich tych działów, które:
U s
c. zatrudniają najmniej pracowników:
SELECT d.department_id, d.department_name, COUNT(*) A I
FROM departments d JOIN employees e
O
ON d.department_id = e.department_id
l
GROUP BY d.department_id, d.department_name &
HAVING COUNT(*) = (SELECT MIN(COUNT(*))
FROM
n
employees a
r
GROUP BY department_id);
te
I n
19. Utworzyć raport, dla wszystkich pracowników wyświetlający numery pracowników,
nazwiska, zarobki, numery działów oraz średnie zarobki w tych działach.
c l e
SELECT e.employee_id, e.last_name, e.department_id, AVG(s.salary)
FROM
ON
r a
employees e JOIN employees s
e.department_id = s.department_id
O
GROUP BY e.employee_id, e.last_name, e.department_id;
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I
Rozwiązania ĆD-8
Ćwiczenia dodatkowe: Rozwiązania studium przypadku
1. Utworzyć tabele na podstawie podanych schematów. Wybrać odpowiednie typy danych oraz
upewnić się, że dodano więzy integralności.
(member_id NUMBER(10)
CONSTRAINT member_member_id_pk PRIMARY KEY,
last_name VARCHAR2(25)
CONSTRAINT member_last_name_nn NOT NULL,
first_name VARCHAR2(25),
address VARCHAR2(100),
city VARCHAR2(30),
phone VARCHAR2(15),
join_date DATE DEFAULT SYSDATE
CONSTRAINT member_join_date_nn NOT NULL);
n a
CREATE TABLE title_copy
copy_id
title_id
te r
NUMBER(10),
NUMBER(10)
I n
CONSTRAINT title_copy_title_if_fk REFERENCES title(title_id),
status VARCHAR2(15)
l e
CONSTRAINT title_copy_status_nn NOT NULL
c
CONSTRAINT title_copy_status_ck CHECK (status IN
r a
('AVAILABLE', 'DESTROYED','RENTED', 'RESERVED')),
CONSTRAINT title_copy_copy_id_title_id_pk
l &
table_name IN ('MEMBER', 'TITLE', 'TITLE_COPY',
a
'RENTAL', 'RESERVATION');
n
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I
Rozwiązania ĆD-10
Ćwiczenia dodatkowe: Rozwiązania studium przypadku (kontynuacja)
3. Utworzyć sekwencje w celu jednoznacznej identyfikacji wierszy w tabelach: MEMBER
oraz TITLE.
a. Numer członka dla tabeli MEMBER: zacząć od 101; nie zezwalać na przechowywanie
wartości w pamięci podręcznej. Nazwać sekwencję MEMBER_ID_SEQ.
CREATE SEQUENCE member_id_seq
START WITH 101
NOCACHE;
b. Numer tytułu dla tabeli TITLE: zacząć od 92; nie zezwalać na przechowywanie wartości
w pamięci podręcznej. Nazwać sekwencję TITLE_ID_SEQ.
CREATE SEQUENCE title_id_seq
START WITH 92
NOCACHE;
n l y
e O
U s
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I
Rozwiązania ĆD-11
Ćwiczenia dodatkowe: Rozwiązania studium przypadku (kontynuacja)
4. Dodać dane do tabel. Utworzyć skrypty dla poszczególnych, dodawanych zestawów danych.
a. Dodać tytuły filmów do tabeli TITLE. Utworzyć skrypt dodający informacje o filmach.
Zapisać utworzony skrypt w pliku o nazwie lab_apcs_4a.sql. Użyć sekwencji
do jednoznacznego identyfikowania tytułów. Daty wydań podawać w formacie
DD-MON-YYYY. Należy pamiętać o specjalnym traktowaniu apostrofu w polu
znakowym. Zweryfikować dodane rekordy.
INSERT INTO title(title_id, title, description, rating,
category, release_date)
VALUES (title_id_seq.NEXTVAL, 'Willie and Christmas Too',
'All of Willie''s friends make a Christmas list for
Santa, but Willie has yet to add his own wish list.',
'G', 'CHILD', TO_DATE('05-OCT-1995','DD-MON-YYYY')
/
INSERT INTO title(title_id , title, description, rating,
category, release_date)
VALUES (title_id_seq.NEXTVAL, 'Alien Again', 'Yet another
installment of science fiction history. Can the
heroine save the planet from the alien life form?',
'R', 'SCIFI', TO_DATE( '19-MAY-1995','DD-MON-YYYY'))
/
INSERT INTO title(title_id, title, description, rating,
VALUES
category, release_date)
(title_id_seq.NEXTVAL, 'The Glob', 'A meteor crashes
n l y
near a small American town and unleashes carnivorous
goo in this classic.', 'NR', 'SCIFI',
e O
/
TO_DATE( '12-AUG-1995','DD-MON-YYYY'))
O
luck and a lot ingenuity, a teenager skips school for
a day in New York.', 'PG', 'COMEDY',
/
l &
TO_DATE( '12-JUL-1995','DD-MON-YYYY'))
...
n a
COMMIT
/
SELECT title
te r
FROM title;
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I
Rozwiązania ĆD-12
Ćwiczenia dodatkowe: Rozwiązania studium przypadku (kontynuacja)
b. Dodać dane do tabeli MEMBER. Umieścić instrukcję INSERT w skrypcie o nazwie
lab_apcs_4b.sql, a następnie go wykonać. Upewnić się, że do dodawania
numerów członków jest używana sekwencja.
SET VERIFY OFF
INSERT INTO member(member_id, first_name, last_name,
address, city, phone, join_date)
VALUES (member_id_seq.NEXTVAL, '&first_name', '&last_name',
'&address', '&city', '&phone', TO_DATE('&join_date',
'DD-MM-YYYY');
COMMIT;
SET VERIFY ON
n a
INSERT
VALUES
te
(1, 96, 'AVAILABLE') r
INTO title_copy(copy_id, title_id,status)
/
INSERT
I n
INTO title_copy(copy_id, title_id,status)
VALUES
/
c l e
(1, 97, 'AVAILABLE')
r a
O
Oracle Database 10g: Podstawy języka SQL I
Rozwiązania ĆD-13
Ćwiczenia dodatkowe: Rozwiązania studium przypadku (kontynuacja)
d. Dodać następujące informacje o wypożyczeniach do tabeli RENTAL:
Uwaga: Numery tytułów mogą się różnić w zależności od numerów sekwencji.
INSERT INTO rental(title_id, copy_id, member_id,
book_date, exp_ret_date, act_ret_date)
VALUES (92, 1, 101, sysdate-3, sysdate-1, sysdate-2)
/
INSERT INTO rental(title_id, copy_id, member_id,
book_date, exp_ret_date, act_ret_date)
VALUES (93, 2, 101, sysdate-1, sysdate-1, NULL)
/
INSERT INTO rental(title_id, copy_id, member_id,
book_date, exp_ret_date, act_ret_date)
VALUES (95, 3, 102, sysdate-2, sysdate, NULL)
/
INSERT INTO rental(title_id, copy_id, member_id,
book_date, exp_ret_date,act_ret_date)
VALUES (97, 1, 106, sysdate-4, sysdate-2, sysdate-2)
/
COMMIT
/
n l y
Wyświetlać wszystkie wiersze z tej perspektywy. Uporządkować wyniki według tytułów.
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I
Rozwiązania ĆD-14
Ćwiczenia dodatkowe: Rozwiązania studium przypadku (kontynuacja)
6. Dokonać zmian danych w tabelach.
a. Dodać nowy tytuł. Film to „Interstellar Wars”, kategoria „PG”, zaliczany do kategorii
filmów fantastyczno-naukowych. Datą wydania jest 7 lipca 1977 r. Dodać opis
„Futuristic interstellar action movie. Can the rebels save the humans from the evil
empire?” Upewnić się, że dodano informacje o dwóch kopiach tego tytułu.
INSERT INTO title(title_id, title, description, rating,
category, release_date)
VALUES (title_id_seq.NEXTVAL, 'Interstellar Wars',
'Futuristic interstellar action movie. Can the
rebels save the humans from the evil empire?',
'PG', 'SCIFI', '07-JUL-77')
/
INSERT INTO title_copy (copy_id, title_id, status)
VALUES (1, 98, 'AVAILABLE')
/
INSERT INTO title_copy (copy_id, title_id, status)
VALUES (2, 98, 'AVAILABLE')
/
b. Podać dane dotyczące dwóch rezerwacji. Pierwsza na nazwisko Carmen Velasquez, która
chce wypożyczyć „Interstellar Wars”. Druga na nazwisko Mark Quick-to-See, który chce
INSERT
wypożyczyć „Soda Gang”.
INTO reservation (res_date, member_id, title_id) n l y
VALUES
/
(SYSDATE, 101, 98)
e O
INSERT
VALUES
INTO reservation (res_date, member_id, title_id)
(SYSDATE, 104, 97)
U s
/
8. Utworzyć raport wyświetlający historie wypożyczania dla wszystkich klientów. Upewnić się,
że w raporcie zawarto nazwiska klientów, wypożyczone filmy, daty wypożyczenia oraz
długości okresów wypożyczenia. Podsumować liczbę wypożyczeń dla wszystkich klientów
w rozważanym okresie. Zapisać instrukcje generujące ten raport w skrypcie o nazwie
lab_apcs_8.sql.
Uwaga: Otrzymane wyniki mogą się różnić.
SET ECHO OFF
SET VERIFY OFF
SELECT m.first_name||' '||m.last_name MEMBER, t.title,
FROM
r.book_date, r.act_ret_date - r.book_date DURATION
member m, title t, rental r
n l y
WHERE
AND
r.member_id = m.member_id
r.title_id = t.title_id
ORDER BY member;
e O
SET VERIFY ON
U s
SET ECHO ON
A I
O
l &
n a
te r
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I
Rozwiązania ĆD-16