Download as pdf or txt
Download as pdf or txt
You are on page 1of 60

Oracle Database 10g:

Podstawy języka SQL I

Tom III • Podręcznik uczestnika kursu


(Ćwiczenia dodatkowe)

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

O Literały napisowe 1-17


Korzystanie z literałów napisowych 1-18
Operator alternatywnego cudzysłowu (q) 1-19
Wiersze powtarzające się 1-20
iii
Wzajemne powiązanie między językiem SQL i środowiskiem iSQL*Plus 1-21
Instrukcje języka SQL a polecenia iSQL*Plus 1-22
Omówienie środowiska iSQL*Plus 1-23
Logowanie się do środowiska iSQL*Plus 1-24
Środowisko iSQL*Plus 1-25
Wyświetlanie struktury tabeli 1-26
Współdziałanie z plikami skryptów 1-28
Strona historii w środowisku iSQL*Plus 1-32
Konfigurowanie preferencji środowiska iSQL*Plus 1-34
Konfigurowanie lokalizacji wyników 1-35
Podsumowanie 1-36
Ćwiczenie 1: Omówienie 1-37
2 Ograniczanie i sortowanie danych
Cele 2-2
Ograniczanie wierszy za pomocą selekcji 2-3
Ograniczanie wybieranych wierszy 2-4
Korzystanie z klauzuli WHERE 2-5
Napisy i daty 2-6
Warunki porównania 2-7
Korzystanie z warunków porównania 2-8
Korzystanie z warunku BETWEEN 2-9
Korzystanie z warunku IN 2-10
n l y
Korzystanie z warunku LIKE 2-11
Korzystanie z warunków NULL 2-13
e O
Warunki logiczne 2-14
Korzystanie z operatora AND 2-15
U s
Korzystanie z operatora OR 2-16
Korzystanie z operatora NOT 2-17
Reguły pierwszeństwa 2-18 A I
Korzystanie z klauzuli ORDER BY 2-20
O
Sortowanie 2-21
Zmienne podstawiania 2-22
l &
a
Korzystanie ze zmiennej podstawiania („&”) 2-24

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

Zatwierdzanie danych 8-33


O
Stan danych po wykonaniu instrukcji ROLLBACK 8-34

Spójność odczytu 8-37


l &
Wycofanie na poziomie instrukcji 8-36

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

11 Zarządzanie obiektami za pomocą perspektyw słownika danych


Cele 11-2
Słownik danych 11-3
Struktura słownika danych 11-4
Jak korzystać z perspektyw słownika danych 11-6
Perspektywa USER_OBJECTS 11-7
Informacje o tabelach 11-9
Informacje o kolumnach 11-10
Informacje o więzach 11-12
Informacje o perspektywach 11-15
Informacje o sekwencjach 11-16
Informacje o synonimach 11-18
Dodawanie komentarzy do tabeli 11-19
Podsumowanie 11-20
Ćwiczenie 11: Omówienie 11-21

n l y
A Rozwiązania ćwiczeń

B Opisy i dane tabel


e O
C Składnia złączenia Oracle
U s
D Korzystanie ze środowiska SQL*Plus
A I
Indeks
O
Ćwiczenia dodatkowe
l &
a
Ćwiczenia dodatkowe: Opisy i dane tabel
n
te r
Ćwiczenia dodatkowe: Rozwiązania

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

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.

1. Dział kadr potrzebuje informacji o wszystkich maklerach zatrudnionych po 1997 roku.

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)

3. Z powodów budżetowych dział kadr potrzebuje raportu na temat projektowanych podwyżek


płac. Raport powinien wyświetlać podniesione o 10% płace wszystkich tych pracowników,
którzy nie otrzymują prowizji (płace zaokrąglić).

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)

4. Utworzyć raport o pracownikach i długościach czasu ich zatrudnienia. Wyświetlać nazwiska,


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
powinien być umieszczony pracownik zatrudniony najdłużej.

5. Wyświetlać tych pracowników, których nazwiska zaczynają się na literę J, K, L lub M.

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.

7. Utworzyć raport wyświetlający nazwy działów, lokalizacje, nazwiska, stanowiska oraz


zarobki wszystkich tych pracowników, którzy pracują w konkretnej lokalizacji. Wyświetlać
monit o podanie lokalizacji. Na przykład po podaniu wartości „1800” zostaną wyświetlone
następujące wyniki:

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.

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.
Uporządkować wyniki malejąco według liczb pracownikó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-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.

12. Wyświetlać wszystkich pracowników, którzy zostali zatrudnieni w pierwszej połowie


miesiąca (przed 16.).

13. Utworzyć raport wyświetlający następujące informacje o wszystkich pracownikach:


nazwiska, zarobki oraz zarobki wyrażone w tysiącach dolarów.
Uwaga: Wyniki są kontynuowane na następnej stronie.
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-8
Ćwiczenia dodatkowe (kontynuacja)
13. (kontynuacja)

14. Wyświetlać wszystkich pracowników, którzy mają kierowników zarabiających ponad


15 000 USD. Wyświetlać następujące informacje: nazwiska pracowników, nazwiska
kierowników, zarobki kierowników oraz grupy zaszeregowania zarobków kierownikó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-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:

a. zatrudniają poniżej trzech pracowników:

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)

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.

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)

21. Utworzyć kalendarz rocznicowy w oparciu o daty zatrudnienia pracowników. Posortować


rocznice rosnąco.

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.

Poniżej podano diagram encji i atrybutów dla wypożyczalni wideo:

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

* data wstąp. O RENTAL

l &
utworzone
#* data rezerwacji
o akt. data zwrotu

n a dla o oczek. data zwr.

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.

Jeśli tabele zostaną utworzone i wypełnione danymi za pomocą skryptu


buildvid.sql, rozpocząć od punktu 6.b.

Oracle Database 10g: Podstawy języka SQL I ĆD-14


Ćwiczenia dodatkowe: Studium przypadku (kontynuacja)

1. Utworzyć tabele na podstawie podanych schematów. Wybrać odpowiednie typy danych oraz
upewnić się, że dodano więzy integralności.

a. Nazwa tabeli: MEMBER

Nazwa MEMBER_ LAST_ FIRST_NAME ADDRESS CITY PHONE JOIN_


kolumny ID NAME DATE
Typ PK
klucza
NULL/ NN,U NN NN
Unikat.
Wartość System
domyślna Date
Typ NUMBER VARCHAR2 VARCHAR2 VARCHAR2 VARCHAR2 VARCHAR2 DATE
danych
Długość 10 25 25 100 30 15

b. Nazwa tabeli: TITLE

Nazwa TITLE_ID TITLE DESCRIPTION RATING CATEGORY RELEASE_


DATE
kolumny
Typ
klucza
PK
n l y
NULL/
Unikat.
NN,U NN NN

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

Nazwa COPY_ID TITLE_ID STATUS


kolumny
Typ PK PK,FK
klucza
NULL/ NN,U NN,U NN
Unikat.
Więzy AVAILABLE,
CHECK DESTROYED,
RENTED,
RESERVED
Tabela TITLE
ref. FK
Kolumna TITLE_ID
ref. FK
Typ NUMBER NUMBER VARCHAR2
danych
Długość 10 10 15

d. Nazwa tabeli: RENTAL

Nazwa BOOK_ MEMBER_ COPY_ ACT_RET_ EXP_RET_ TITLE_ n l y


kolumny
Typ
DATE
PK
ID
PK,FK1
ID
PK,FK2
DATE DATE

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)

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.

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.

c. Zweryfikować istnienie sekwencji, sprawdzając słownik danych.

4. Dodać dane do tabel. Utworzyć skrypty dla poszczególnych, dodawanych zestawów danych.

Zapisać utworzony skrypt w pliku o nazwie lab_apcs_4a.sql. Użyć sekwencji


do jednoznacznego identyfikowania tytułów. Daty wydań podawać w formacie n y
a. Dodać tytuły filmów do tabeli TITLE. Utworzyć skrypt dodający informacje o filmach.
l
znakowym. Zweryfikować dodane rekordy.
e O
DD-MON-YYYY. Należy pamiętać o specjalnym traktowaniu apostrofu w polu

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)

Title Description Rating Category Release_date


Willie and All of Willie’s friends make a G CHILD 05-OCT-1995
Christmas Too Christmas list for Santa, but
Willie has yet to add his own
wish list.
Alien Again Yet another installation of R SCIFI 19-MAY-1995
science fiction history. Can
the heroine save the planet
from the alien life form?
The Glob A meteor crashes near a small NR SCIFI 12-AUG-1995
American town and unleashes
carnivorous goo in this classic.
My Day Off With a little luck and a lot of PG COMEDY 12-JUL-1995
ingenuity, a teenager skips
school for a day in New York.
Miracles on Ice A six-year-old has doubts PG DRAMA 12-SEP-1995
about Santa Claus, but she
discovers that miracles really
do exist.
Soda Gang After discovering a cache of NR ACTION 01-JUN-1995
drugs, a young couple find
themselves pitted against a
vicious gang.

b. Dodać dane do tabeli MEMBER. Umieścić instrukcję INSERT w skrypcie o nazwie n l y


lab_apcs_4b.sql, a następnie go wykonać. Upewnić się, że do dodawania numerów
członków jest używana sekwencja.
e O
First_
U s
Name
Carmen
Last_Name
Velasquez
Address
283 King
Street
City
Seattle
A I Phone
206-899-6666
Join_Date
08-MAR-1990

LaDoris Ngao 5 Modrany O


Bratislava 586-355-8882 08-MAR-1990

Midori Nagayama 68 Via


l & Sao Paolo 254-852-5764 17-JUN-1991

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

c l Urguhart 3035 Laurier Quebec 418-542-9988 18-JAN-1991

r a
O
Oracle Database 10g: Podstawy języka SQL I ĆD-19
Ćwiczenia dodatkowe: Studium przypadku (kontynuacja)

c. Dodać kopie następujących filmów do tabeli TITLE_COPY:


Uwaga: Na potrzeby tego ćwiczenia są niezbędne dostępne numery TITLE_ID.
Title Copy_Id Status Title Copy_Id

Willie and 1 AVAILABLE Willie and Christmas 1


Christmas Too Too
Alien Again 1 AVAILABLE Alien Again 1

2 RENTED 2

The Glob 1 AVAILABLE The Glob 1

My Day Off 1 AVAILABLE My Day Off 1

2 AVAILABLE 2

3 RENTED 3

Miracles on Ice 1 AVAILABLE Miracles on Ice 1

Soda Gang 1 AVAILABLE Soda Gang 1

d. Dodać następujące informacje o wypożyczeniach do tabeli RENTAL: n l y


Uwaga: Numery tytułów mogą się różnić w zależności od numerów sekwencji.
e O
Title_ Id Copy_Id Member_Id Book_date

U s
Exp_Ret_Date

92

93
1

2
101

101 A
1 day ago
I
3 days ago 1 day ago

1 day from now


O
95 3 102

l & 2 days ago Today

97 1 106

n a 4 days ago 2 days ago

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)

5. Utworzyć perspektywę o nazwie TITLE_AVAIL, wyświetlającą tytuły filmów, dostępność


kopii oraz ewentualne oczekiwane daty zwrotu w wypadku kopii wypożyczonych.
Wyświetlać wszystkie wiersze z tej perspektywy. Uporządkować wyniki według tytułów.
Uwaga: Otrzymane wyniki mogą się różnić.

6. Dokonać zmian danych w tabelach.

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)

7. Dokonać modyfikacji w jednej z tabel.

a. Wykonać skrypt o nazwie lab_apcs_7a.sql, dodający kolumnę PRICE do tabeli


TITLE w celu przechowywania cen zakupu filmów. Zweryfikować dokonane
modyfikacje.

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

Opisy i dane tabel

n l y
e O
U s
A I
O
l &
na
te r
I n
c le
ra
O
Tabela COUNTRIES

DESCRIBE countries

SELECT * FROM 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

SELECT * FROM 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

SELECT * FROM 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

SELECT * FROM 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

SELECT * FROM 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

SELECT * FROM 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

SELECT * FROM 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

SELECT * FROM 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

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.

1. Dział kadr potrzebuje informacji o wszystkich maklerach zatrudnionych po 1997 roku.


SELECT *
FROM employees
WHERE job_id = 'ST_CLERK'
AND hire_date > '31-DEC-1997';

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;

3. Z powodów budżetowych dział kadr potrzebuje raportu na temat projektowanych podwyżek


płac. Raport powinien wyświetlać podniesione o 10% płace wszystkich tych pracowników,
którzy nie otrzymują prowizji (płace zaokrąglić).
SELECT 'The salary of '||last_name||' after a 10% raise is '
n l y
FROM
|| ROUND(salary*1.10) "New salary"
employees
WHERE commission_pct IS NULL;
e O
U s
4. Utworzyć raport o pracownikach i długościach czasu ich zatrudnienia. Wyświetlać nazwiska,

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)

5. Wyświetlać tych pracowników, których nazwiska zaczynają się na literę J, K, L lub M.


SELECT last_name
FROM employees
WHERE SUBSTR(last_name, 1,1) IN ('J', 'K', 'L', 'M');

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.
SELECT last_name, salary,
decode(commission_pct, NULL, 'No', 'Yes') commission
FROM 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
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.

7. Utworzyć raport wyświetlający nazwy działów, lokalizacje, nazwiska, stanowiska oraz


zarobki wszystkich tych pracowników, którzy pracują w konkretnej lokalizacji. Wyświetlać
monit o podanie lokalizacji.
SELECT d.department_name, d.location_id, e.last_name, e.job_id, e.salary
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND d.location_id = &dept_no;

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

SELECT d.department_id, d.department_name,


e O
działu. Upewnić się, że są wyświetlane także działy, w których nie ma pracowników.

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;

Oracle Database 10g: Podstawy języka SQL I


Rozwiązania ĆD-4
Ć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, zapytania podrzędne.

12. Wyświetlać wszystkich pracowników, którzy zostali zatrudnieni w pierwszej połowie


miesiąca (przed 16.).
SELECT last_name, hire_date
FROM employees
WHERE TO_CHAR(hire_date, 'DD') < 16;

13. Utworzyć raport wyświetlający następujące informacje o wszystkich pracownikach:


nazwiska, zarobki oraz zarobki wyrażone w tysiącach dolarów.
SELECT last_name, salary, TRUNC(salary, -3)/1000 Thousands
FROM employees;

14. Wyświetlać wszystkich pracowników, którzy mają kierowników zarabiających ponad


15 000 USD. Wyświetlać następujące informacje: nazwiska pracowników, nazwiska
kierowników, zarobki kierowników oraz grupy zaszeregowania zarobków kierowników.
SELECT e.last_name, m.last_name manager, m.salary, j.grade_level
FROM employees e JOIN employees m
ON
JOIN
ON
e.manager_id = m.employee_id
job_grades j
m.salary BETWEEN j.lowest_sal AND j.highest_sal n l y
AND m.salary > 15000;

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

SELECT d.department_id, d.department_name,


O
count(e1.employee_id) employees,

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:

a. zatrudniają poniżej trzech pracowników:


SELECT d.department_id, d.department_name, COUNT(*)
FROM departments d JOIN employees e
ON d.department_id = e.department_id
GROUP BY d.department_id, d.department_name
HAVING COUNT(*) < 3;

b. zatrudniają najwięcej pracowników:


SELECT d.department_id, d.department_name, COUNT(*)
FROM
ON
departments d JOIN employees e
d.department_id = e.department_id
n l y
GROUP BY d.department_id, d.department_name
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
FROM employees
e O
GROUP BY department_id);

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;

Oracle Database 10g: Podstawy języka SQL I


Rozwiązania ĆD-7
Ćwiczenia dodatkowe: Rozwiązania (kontynuacja)
20. Wyświetlać nazwiska wszystkich pracowników, którzy zostali zatrudnieni w tym dniu
tygodnia, w którym zatrudniono najwięcej osób.
SELECT last_name, TO_CHAR(hire_date, 'DAY') day
FROM employees
WHERE TO_CHAR(hire_date, 'Day') =
(SELECT TO_CHAR(hire_date, 'Day')
FROM employees
GROUP BY TO_CHAR(hire_date, 'Day')
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
FROM employees
GROUP BY TO_CHAR(hire_date, 'Day')));

21. Utworzyć kalendarz rocznicowy w oparciu o daty zatrudnienia pracowników. Posortować


rocznice rosnąco.
SELECT last_name, TO_CHAR(hire_date, 'Month DD') BIRTHDAY
FROM employees
ORDER BY TO_CHAR(hire_date, 'DDD');

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.

a. Nazwa tabeli: MEMBER


CREATE TABLE member

(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);

b. Nazwa tabeli: TITLE


CREATE TABLE title
(title_id NUMBER(10)
CONSTRAINT title_title_id_pk PRIMARY KEY,
title VARCHAR2(60)
CONSTRAINT title_title_nn NOT NULL,
description VARCHAR2(400)
n l y
CONSTRAINT title_description_nn NOT NULL,
rating VARCHAR2(4)
e O
CONSTRAINT title_rating_ck CHECK
(rating IN ('G', 'PG', 'R', 'NC17', 'NR')),
category VARCHAR2(20)
U s
CONSTRAINT title_category_ck CHECK
(category IN ('DRAMA', 'COMEDY', 'ACTION',
A I
'CHILD', 'SCIFI', 'DOCUMENTARY')),
release_date DATE); O
l &
c. Nazwa tabeli: TITLE_COPY

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

O PRIMARY KEY (copy_id, title_id));

Oracle Database 10g: Podstawy języka SQL I


Rozwiązania ĆD-9
Ćwiczenia dodatkowe: Rozwiązania studium przypadku (kontynuacja)
d. Nazwa tabeli: RENTAL
CREATE TABLE rental
(book_date DATE DEFAULT SYSDATE,
member_id NUMBER(10)
CONSTRAINT rental_member_id_fk REFERENCES member(member_id),
copy_id NUMBER(10),
act_ret_date DATE,
exp_ret_date DATE DEFAULT SYSDATE + 2,
title_id NUMBER(10),
CONSTRAINT rental_book_date_copy_title_pk
PRIMARY KEY (book_date, member_id, copy_id,title_id),
CONSTRAINT rental_copy_id_title_id_fk
FOREIGN KEY (copy_id, title_id)
REFERENCES title_copy(copy_id, title_id));

e. Nazwa tabeli: RESERVATION


CREATE TABLE reservation
(res_date DATE,
member_id NUMBER(10)
CONSTRAINT reservation_member_id REFERENCES member(member_id),
title_id NUMBER(10)
CONSTRAINT reservation_title_id REFERENCES title(title_id),
CONSTRAINT reservation_resdate_mem_tit_pk PRIMARY KEY
(res_date, member_id, title_id));
n l y
O
2. Upewnić się, że tabele i więzy zostały utworzone poprawnie, sprawdzając słownik danych.
e
SELECT
FROM
table_name
user_tables
U s
WHERE table_name IN ('MEMBER', 'TITLE', 'TITLE_COPY',
'RENTAL', 'RESERVATION');
A I
SELECT O
constraint_name, constraint_type, table_name
FROM
WHERE
user_constraints

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;

c. Zweryfikować istnienie sekwencji, sprawdzając słownik danych.


SELECT sequence_name, increment_by, last_number
FROM user_sequences
WHERE sequence_name IN ('MEMBER_ID_SEQ', 'TITLE_ID_SEQ');

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'))

INSERT INTO title(title_id, title, description, rating,


U s
VALUES
category, release_date)
A I
(title_id_seq.NEXTVAL, 'My Day Off', 'With a little

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

c. Dodać kopie następujących filmów do tabeli TITLE_COPY:


Uwaga: Na potrzeby tego ćwiczenia są niezbędne dostępne numery TITLE_ID.
INSERT INTO title_copy(copy_id, title_id, status)
VALUES (1, 92, 'AVAILABLE')
/
INSERT INTO title_copy(copy_id, title_id, status)
VALUES (1, 93, 'AVAILABLE')
/
INSERT
VALUES
/
INTO title_copy(copy_id, title_id, status)
(2, 93, 'RENTED')
n l y
INSERT
VALUES
INTO title_copy(copy_id, title_id, status)
(1, 94, 'AVAILABLE')
e O
/;
INSERT INTO title_copy(copy_id, title_id, status)
U s
VALUES
/
INSERT
(1, 95, 'AVAILABLE')

INTO title_copy(copy_id, title_id,status) A I


VALUES (2, 95, 'AVAILABLE')
O
/
INSERT
l &
INTO title_copy(copy_id, title_id,status)
VALUES
/
(3, 95, 'RENTED')

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
/

5. Utworzyć perspektywę o nazwie TITLE_AVAIL, wyświetlającą tytuły filmów, dostępność


kopii oraz ewentualne oczekiwane daty zwrotu w wypadku kopii wypożyczonych.

n l y
Wyświetlać wszystkie wiersze z tej perspektywy. Uporządkować wyniki według tytułów.

Uwaga: Otrzymane wyniki mogą się różnić.


e O
CREATE VIEW title_avail AS
SELECT t.title, c.copy_id, c.status, r.exp_ret_date
U s
FROM
ON
title t JOIN title_copy c
t.title_id = c.title_id
FULL OUTER JOIN rental r
A I
ON
AND
c.copy_id = r.copy_id
c.title_id = r.title_id; O
l &
SELECT
FROM
*
title_avail
n a
ORDER BY title, copy_id;

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
/

7. Dokonać modyfikacji w jednej z tabel. A I


O
l &
a. Wykonać skrypt o nazwie lab_apcs_7a.sql, dodający kolumnę PRICE
do tabeli TITLE w celu przechowywania cen zakupu filmów. Zweryfikować
dokonane modyfikacje.
n a
ALTER TABLE title
ADD (price NUMBER(8,2));
te r
DESCRIBE title
I n
c l e
r a
O
Oracle Database 10g: Podstawy języka SQL I
Rozwiązania ĆD-15
Ćwiczenia dodatkowe: Rozwiązania studium przypadku (kontynuacja)
b. Utworzyć skrypt o nazwie lab_apcs_7b.sql, zawierający instrukcję UPDATE
aktualizującą filmy zgodnie z dostarczoną listą cen. Wykonać instrukcje
umieszczone w skrypcie.
Uwaga: Na potrzeby tego ćwiczenia są niezbędne dostępne numery TITLE_ID.
SET ECHO OFF
SET VERIFY OFF
UPDATE title
SET price = &price
WHERE title_id = &title_id;
SET VERIFY OFF
SET ECHO OFF

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

You might also like