Materiały szkoleniowe. Podstawy jzyka SQL. Prowadzcy Anna Pijanowska - Kunierz Paweł ołnierczyk



Podobne dokumenty
Materiały szkoleniowe. Podstawy języka SQL

Bazy danych. Plan wykładu. Zalenoci funkcyjne. Wykład 4: Relacyjny model danych - zalenoci funkcyjne. SQL - podzapytania A B

Technologie baz danych

Bazy danych. Plan wykáadu. Zale*noci funkcyjne. Wykáad 4: Relacyjny model danych - zale*noci funkcyjne. A B

Zadania SELECT do schematu EDS (EMP, DEPT, SALGRADE)

Bazy danych. Plan wykáadu. Powtórzenie BCNF i 3NF. Nowa forma redundancji. Wykáad 6: Postaci normalne. SQL - zapytania záo*one.

Bazy danych. Plan wykładu. Operacje w algebrze relacji. Pojcie algebry relacji. Wykład 8: Algebra relacji. SQL - cd

Bazy danych. Plan wykładu. Podstawy modeli relacyjnych. Diagramy ER. Wykład 3: Relacyjny model danych. SQL

Przestrzenne bazy danych Podstawy języka SQL

Język SQL. Rozdział 2. Proste zapytania

Bazy danych. Plan wykładu. Podzapytania - wskazówki. Podzapytania po FROM. Wykład 5: Zalenoci wielowartociowe. Sprowadzanie do postaci normalnych.

Podstawy języka SQL Co to jest SQL? Możliwości SQL SQL*Plus

Marek Rakowski Podstawy zdania SELECT Strona 1 z 12

Systemy GIS Tworzenie zapytań w bazach danych

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

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

Wprowadzenie do języka SQL

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

SQL (ang. Structured Query Language)

Wybór wszystkich danych: SELECT * FROM employee Wybór określonych kolumn lub wyrażeń: SELECT first_name, last_name, salary FROM employee

Autor: Joanna Karwowska

Przykłady wyrae uywanych w kwerendach i filtrach

TECHNOLOGIE BAZ DANYCH

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

Podstawowe zapytania SELECT (na jednej tabeli)

3. Podzapytania, łączenie tabel i zapytań

Lista zadań nr 1. Bazy danych laboratorium. dr inż. Grzegorz Bazydło, dr inż. Jacek Tkacz

Bazy danych SQL. Wstp. SQL (Structured( Query Language) strukturalny jzyk zapyta

Oracle11g: Wprowadzenie do SQL

Bazy danych. Plan wykładu. Dekompozycja relacji. Anomalie. Wykład 5: Projektowanie relacyjnych schematów baz danych. SQL - funkcje grupujce

Autor: Joanna Karwowska

Zadania do wykonaj przed przyst!pieniem do pracy:

Relacyjne bazy danych. Podstawy SQL

Bazy danych. Plan wykładu. Złczenia tabel. Perspektywy cd. Wykład 9: Programowanie aplikacji baz danych po stronie serwera. Sekwencje Wyzwalacze

Wprowadzenie do baz danych

Wyświetl imie i nazwisko ucznia, nazwę przedmiotu z którego otrzymał ocenę niedostateczną. Nazwij tę kwerendę oceny niedostateczne.

PODZAPYTANIE (SUBSELECT)

Szkolenie Oracle SQL podstawy. Terminy lutego 2010 First Minute! 1100zł!

Bazy danych. Plan wykładu. Proces modelowania i implementacji bazy danych. Elementy ERD. Wykład 2: Diagramy zwizków encji (ERD)

Bazy danych. Plan wykładu. Pierwsza posta normalna. Druga posta normalna. Wykład 7: Sprowadzanie do postaci normalnych. DDL, DML

Język SQL. instrukcja laboratoryjna. Politechnika Śląska Instytut Informatyki. laboratorium Bazy Danych

Laboratorium Bazy danych SQL 3 1

Bazy danych Podstawy teoretyczne

Aliasy Select p.first_name, p.salary, j.job_title from employees p, jobs j where p.job_id=j.job_id;

Relacyjne bazy danych. Podstawy SQL

Funkcje analityczne SQL CUBE (1)

Wykład 7 Implementacja języka SQL w systemach baz danych Oracle sortowanie, funkcje agregujące i podzapytania.

Bazy danych. Plan wykładu. Przetwarzanie zapyta. Etapy przetwarzania zapytania. Wykład 12: Optymalizacja zapyta. Etapy przetwarzanie zapytania

Wykład 5. SQL praca z tabelami 2

Hurtownie danych - przegląd technologii

sqlplus [ użytkownik [ / hasło ] ]

Standard SQL/XML. Wprowadzenie do XQuery

RELACYJNE BAZY DANYCH TEORIA. Bazy danych to uporzdkowany zbiór informacji z okrelonej dziedziny lub tematyki przeznaczony do wyszukiwania

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Wybór EUROPEAN będzie rozpoznawał dzień przed miesiącem, natomiast US miesiąc przed dniem.

Paweł Rajba

Bazy danych 2. Wykład 4 Structured Query Language (SQL)

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Zadania z SQLa (MS SQL Server)

Tworzenie bazy danych Biblioteka tworzenie tabel i powiza, manipulowanie danymi. Zadania do wykonani przed przystpieniem do pracy:

Typy bazy danych Textract

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych

Relacji między tabelami klucze obce. Schemat bazy danych, wczytanej z pliku create_tables.sql. Klucz obcy jako ograniczenie dla kolumny

SQL - Structured Query Language. strukturalny język zapytań

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

SQL, LIKE, IN, CASE, EXISTS. Marcin Orchel

obsług dowolnego typu formularzy (np. formularzy ankietowych), pobieranie wzorców formularzy z serwera centralnego,

Struktura bazy danych

System midzybankowej informacji gospodarczej Dokumenty Zastrzeone MIG DZ ver Aplikacja WWW ver. 2.1 Instrukcja Obsługi

Lista zadań nr Wyświetlić imię i nazwisko dla każdego pracownika z departamentu DEP T NO o numerze 000.

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

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

Zastosowanie programu Microsoft Excel do analizy wyników nauczania

Bazy danych. Plan wykładu. Zależności funkcyjne. Wykład 2: Relacyjny model danych - zależności funkcyjne. Podstawy SQL.

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

Sposoby przekazywania parametrów w metodach.

Bazy danych. Plan wykáadu. Proces modelowania i implementacji bazy danych. Elementy ERD

Bazy danych. Plan wykładu. Proces modelowania i implementacji bazy danych. Elementy ERD. Wykład 2: Diagramy zwizków encji (ERD)

Technologie baz danych

Kwerendy (zapytania) wybierające

Widok Connections po utworzeniu połączenia. Obszar roboczy

Autor: Joanna Karwowska

SQL Structured Query Language

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

1 DML - zapytania, część II Grupowanie Operatory zbiorowe DML - modyfikacja 7. 3 DCL - sterowanie danymi 9.

Bazy danych. Polecenia SQL

Bazy danych. Zaliczenie. Literatura. Strony WWW. Wykáad 1: Wprowadzenie do baz danych

Bazy danych. Plan wykładu. Definicja zalenoci funkcyjnych. Zalenoci funkcyjne. Wykład 4: Relacyjny model danych - zalenoci funkcyjne.

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

Projektowanie systemów baz danych

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

geometry a w przypadku istnienia notki na marginesie: 1 z 5

SQL praca z tabelami 4. Wykład 7

Podstawy języka SQL cz. 2

Grupowanie i funkcje agregacji

Ćwiczenie zapytań języka bazy danych PostgreSQL

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

Model relacyjny. Wykład II

Instrukcja obsługi programu Pilot PS 5rc

Elementy baz danych w edytorze tekstu. Elementy baz danych w arkuszu kalkulacyjnym. Jednorodna tabela jako ródło danych:

Transkrypt:

Materiały szkoleniowe Podstawy jzyka SQL Prowadzcy Anna Pijanowska - Kunierz Paweł ołnierczyk

Spis treci Zawarto tabel wykorzystywanych na kursie 5 Zawarto tabeli DEPT 6 Zawarto tabeli EMP 6 Zawarto tabeli SALGRADE 6 Budowa tabel wykorzystywanych na kursie 7 Relacyjny model danych 9 Operatory relacyjne 10 Własnoci relacyjnej bazy danych 10 Przegld jzyka SQL 13 Zasady SQL 14 wiczenia 28 Funkcje grupowe 31 Stosowanie funkcji grupowych 32 Klauzula GROUP BY 33 Wybierane wyraenia a funkcje grupowe 34 Klauzula HAVING 35 Kolejno wystpowania klauzul 36 wiczenia 37 Wybieranie danych z wielu tabel 39 Złczenie równociowe 40 Złczenia nierównociowe 41 wiczenia 43 Inne metody łczenia tabel 47 Złczenia zewntrzne 48 Połczenie tabeli samej ze sob 48 Operatory zbiorowe 49

wiczenia 52 Podzapytania 55 Podzapytania zagniedone 56 Podzapytania zwracajce jeden wiersz 56 Podzapytania zwracajce wiele wierszy 57 wiczenia 62 Jzyk definiowania danych 63 Struktury danych ORACLE 64 Tworzenie tabel 64 Warunki integralnoci 65 Tworzenie tabeli przez zapytanie 70 Zmiana definicji tabeli 71 Jzyk manipulowania danymi 75 Wstawianie wierszy 76 Modyfikacja wierszy 77 Usuwanie wierszy 77 Transakcje 78 Perspektywy 81 Perspektywy 82 Tworzenie perspektyw 82 Usuwanie perspektywy 83 Uytkownicy i uprawnienia 85 Zarzdzanie uytkownikami 86 Uprawnienia w bazie Oracle 87 Role 90

Zawarto tabel wykorzystywanych na kursie

Zawarto tabeli DEPT DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON Zawarto tabeli EMP EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ---------- --------- --------- -------- --------- --------- --------- 7839 KING PRESIDENT 81/11/17 5000 10 7698 BLAKE MANAGER 7839 81/05/01 2850 30 7782 CLARK MANAGER 7839 81/06/09 2450 10 7566 JONES MANAGER 7839 81/04/02 2975 20 7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30 7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30 7844 TURNER SALESMAN 7698 81/09/08 1500 0 30 7900 JAMES CLERK 7698 81/12/03 950 30 7521 WARD SALESMAN 7698 81/02/22 1250 500 30 7902 FORD ANALYST 7566 81/12/03 3000 20 7369 SMITH CLERK 7902 80/12/17 800 20 7788 SCOTT ANALYST 7566 82/12/09 3000 20 7876 ADAMS CLERK 7788 83/01/12 1100 20 7934 MILLER CLERK 7782 82/01/23 1300 10 Zawarto tabeli SALGRADE GRADE LOSAL HISAL --------- --------- --------- 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999

Budowa tabel wykorzystywanych na kursie Podczas kursu bdziemy korzysta z uprzednio utworzonych tabel opisujcych zatrudnionych w pewnej firmie, ich wynagrodzenia i miejsca pracy. Firma dzieli si na departamenty. Kady pracownik naley do pewnej grupy zaszeregowania, w zalenoci od wysokoci pensji, któr otrzymuje. Tabela DEPT tabela zawierajca wszystkie departamenty Kolumna DEPTNO DNAME LOC Opis Departament number unikalny numer departamentu Nazwa departamentu przechowywana w zapisie duymi literami Lokalizacja departamentu (miasto w którym znajduje si departament) Tabela EMP wykaz wszystkich pracowników Kolumna EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO Opis Employee number unikalny numer pracownika Nazwisko pracownika przechowywane w zapisie duymi literami Etat, stanowisko pracy Identyfikator szefa (czyli EMPNO we wierszu szefa) Data zatrudnienia Pensja Prowizja naliczona od pocztku roku, dotyczy pracowników zatrudnionych na stanowisku SALESMAN Numer departamentu w którym zatrudniony jest pracownik. Warto w tym polu musi odpowiada jednemu i tylko jednemu wierszowi w tabeli DEPT

Tabela SALGRADE tabela widełek zaszeregowania Kolumna GRADE LOSAL HISAL Opis Numer grupy zaszeregowania LOW SALARY dolna granica widełek płacowych dla stawki zaszeregowania GRADE HIGH SALARY górna granica widełek

Relacyjny model danych

Relacyjna baza danych jest to zbiór dwuwymiarowych tabel. Z modelem relacyjnym powizane s nastpujce pojcia: tabela, kolumna, wiersz, pole. Model relacyjny opiera si na pojciach zaczerpnitych z algebry. Pojcia te to: relacja, operator działajcy na relacjach i dajcy w wyniku relacje. Relacje przedstawiane s w postaci tabel, za wybieranie danych z tabel to wynik działania operatorów relacyjnych na tych tabelach. Operatory relacyjne Wyróniamy nastpujce operatory relacyjne: SELEKCJA PROJEKCJA ILOCZYN KARTEZJASKI ZŁCZENIE SUMA ZBIOROWA CZ WSPÓLNA RÓNICA ZBIOROWA pobieranie danych z relacji, w wyniku otrzymujemy wszystkie wiersze, które spełniaj zadany warunek operacja pobrania wszystkich wierszy, ale tylko wskazanych kolumn z tych wierszy wynik połczenia kady z kadym wierszy z dwóch relacji połczenie dwóch relacji poprzez pewne kryterium łczace niektóre wiersze z obu relacji wszystkie wiersze z obu relacji wiersze wspólne dla obu relacji wiersze, które wystpuj w jednej, a nie wystpuj w drugiej relacji Własnoci relacyjnej bazy danych Relacyjna baza danych ma nastpujce własnoci: baza jest widziana przez uytkownika jako zbiór tabel, nazwy tabel w bazie musz by unikalne, tabele składaj si wierszy i kolumn, jzykiem słucym do operowania na bazie danych jest jzyk nieproceduralny oparty na algebrze relacji. Obecnie standardem jest SQL.

Tabele w relacyjnej bazie danych maj nastpujce własnoci: wiersze w tabeli musz by róne, w tabeli nie ma kolumn o tej samej nazwie, kolejno wierszy jest nieokrelona, kolejno kolumn jest nieokrelona, wartoci pól powinny by elementarne.

Przegld jzyka SQL

SQL jest oparty na wyraeniach jzyka angielskiego. Jest jzykiem deklaratywnym podajemy tylko, co naley wykona, ale nie specyfikujemy w jaki sposób. Jzyk SQL słuy do nastpujcych celów: specyfikowania zapyta, operowania danymi DML (Data Modification Language) wstawiania, modyfikowania i usuwania danych z bazy danych, definiowania danych DDL (Data Definition Language) dodawania do bazy nowych obiektów, sterowania danymi DCL (Data Control Language) okrelania praw dostpu do danych. Zasady SQL Zapisywanie polece SQL Polecenia SQL mog by rozmieszczone w kilku liniach. Koniec polecenia SQL zaznacza si rednikiem. Zaleca si umieszczanie klauzul od nowej linii. Mona uywa tabulacji. Nie wolno dzieli słowa pomidzy linie. Obojtne, czy uywamy małych czy wielkich liter, chyba e sprawdzamy zawarto pola. Podstawowy blok zapyta SQL Za pomoc polecenia uzyskujemy informacje z bazy. Polecenie składa si co najmniej z klauzuli SELECTi klauzuli FROM. W klauzuli SELECT wymieniamy interesujce nas kolumny. W klauzuli FROM wskazujemy, skd pobra dane. Aby pobra nazwiska pracowników oraz ich zawód, napiszemy: SELECT ENAME, JOB ; ENAME JOB ---------- --------- KING PRESIDENT BLAKE MANAGER CLARK MANAGER JONES MANAGER MARTIN SALESMAN ALLEN SALESMAN

TURNER JAMES WARD FORD SMITH SCOTT ADAMS MILLER SALESMAN CLERK SALESMAN ANALYST CLERK ANALYST CLERK CLERK Nazwy kolumn oddzielamy przecinkami. Aby wybra wszystko z danej tabeli wpisujemy * (gwiazdk) zamiast listy kolumn. SELECT * ; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---- ---------- --------- ---------- --------- ---------- ---------- ---------- 7839 KING PRESIDENT 81/11/17 5000 10 7698 BLAKE MANAGER 7839 81/05/01 2850 30 7782 CLARK MANAGER 7839 81/06/09 2450 10 7566 JONES MANAGER 7839 81/04/02 2975 20 7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30 7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30 7844 TURNER SALESMAN 7698 81/09/08 1500 0 30 7900 JAMES CLERK 7698 81/12/03 950 30 7521 WARD SALESMAN 7698 81/02/22 1250 500 30 7902 FORD ANALYST 7566 81/12/03 3000 20 7369 SMITH CLERK 7902 80/12/17 800 20 7788 SCOTT ANALYST 7566 82/12/09 3000 20 7876 ADAMS CLERK 7788 83/01/12 1100 20 7934 MILLER CLERK 7782 82/01/23 1300 10 W klauzuli SELECT mog te by uyte: wyraenia arytmetyczne, aliasy (nazwy zastpcze) kolumn, konkatenacja, literały. Wyraenia arytmetyczne W wyraeniu arytmetycznym mog wystpowa nazwy kolumn, stałe wartoci liczbowe oraz operatory arytmetyczne: + dodawanie - odejmowanie * mnoenie / dzielenie Przykład SELECT ENAME, SAL*12 ; ENAME SAL*12 ---------- ---------- KING 60000 BLAKE 34200

CLARK 29400 JONES 35700 MARTIN 15000 ALLEN 19200 TURNER 18000 JAMES 11400 WARD 15000 FORD 36000 SMITH 9600 SCOTT 36000 ADAMS 13200 MILLER 15600 W wyraeniach zachowywany jest nastpujcy priorytet działa: mnoenie, dzielenie, dodawanie, odejmowanie. Np. w wyraeniu arytmetycznym 250 +12*34 najpierw zostanie obliczona warto wyraenia 12*24, a do wyniku zostanie dodana warto 250. Kolejno wykonywania działa mona zmieni przy pomocy nawiasów. Na przykład w wyraeniu arytmetycznym (250 +12)*34 najpierw zostanie obliczona warto wyraenia 250+12, a wynik zostanie pomnoony przez 34. Aliasy kolumn Domylne nagłówki kolumn moemy zastpi innymi nazwami, które bd bardziej znaczce. Mona uywa polskich liter. Alias podaje si bezporednio po nazwie kolumny, której nazw chcemy zmieni. Spacje w aliasie nie s dopuszczane, mona natomiast utworzy alias ze spacj biorc cało w podwójne apostrofy. Przykład SELECT ENAME NAZWISKO, SAL*12 WYNAGR, COMM PROWIZJA ; NAZWISKO WYNAGR PROWIZJA ---------- ---------- ---------- KING 60000 BLAKE 34200 CLARK 29400 JONES 35700 MARTIN 15000 1400 ALLEN 19200 300 TURNER 18000 0 JAMES 11400 WARD 15000 500 FORD 36000 SMITH 9600 SCOTT 36000 ADAMS 13200 MILLER 15600

Operator konkatenacji Operator konkatenacji ( ) pozwala na łczenie kolumny z kolumn, literałem, wyraeniem arytmetycznym lub wartoci stał. Argumenty s łczone i tworz jedna kolumn wynikow. Aby połczy kolumny EMPNO i ENAME i opatrzy je tytułem PRACOWNIK, napiszemy: SELECT EMPNO ENAME PRACOWNIK ; PRACOWNIK -------------------------------------------------- 7839KING 7698BLAKE 7782CLARK 7566JONES 7654MARTIN 7499ALLEN 7844TURNER 7900JAMES 7521WARD 7902FORD 7369SMITH 7788SCOTT 7876ADAMS 7934MILLER Literały Oprócz kolumn na licie SELECT mog znajdowa si literały (cigi znaków lub liczby). Wtedy dla kadego wiersza zostanie wypisana ta sama warto literału: SELECT ENAME PRACOWNIK, ' PRACUJE W DEPARTAMENCIE', DEPTNO DEPARTAMENT ; PRACOWNIK 'PRACUJE W DEPARTAMENCIE' DEPARTAMENT ----------- ------------------------- ----------- KING 'PRACUJE W DEPARTAMENCIE' 10 BLAKE 'PRACUJE W DEPARTAMENCIE' 30 CLARK 'PRACUJE W DEPARTAMENCIE' 10 JONES 'PRACUJE W DEPARTAMENCIE' 20 MARTIN 'PRACUJE W DEPARTAMENCIE' 30 ALLEN 'PRACUJE W DEPARTAMENCIE' 30 TURNER 'PRACUJE W DEPARTAMENCIE' 30 JAMES 'PRACUJE W DEPARTAMENCIE' 30 WARD 'PRACUJE W DEPARTAMENCIE' 30 FORD 'PRACUJE W DEPARTAMENCIE' 20 SMITH 'PRACUJE W DEPARTAMENCIE' 20 SCOTT 'PRACUJE W DEPARTAMENCIE' 20 ADAMS 'PRACUJE W DEPARTAMENCIE' 20 MILLER 'PRACUJE W DEPARTAMENCIE' 10

Obsługa wartoci NULL Jeli warto wiersza w kolumnie jest nieokrelona, to mówimy, e na ona warto NULL. Nie jest to tosame z wartoci 0. Warto wyraenia w którym bdzie wystpowa warto NULL równie bdzie NULL. Dlatego te wyraenie SAL*12+COMM zwróci NULL tam, gdzie COMM było równe NULL. SELECT ENAME, SAL*12+COMM ; ENAME SAL*12+COM ---------- ---------- KING BLAKE CLARK JONES MARTIN 16400 ALLEN 19500 TURNER 18000 JAMES WARD 15500 FORD SMITH SCOTT ADAMS MILLER Aby w wyraeniu potraktowa warto NULL jako warto rón od NULL, trzeba uy funkcji NVL. SELECT ENAME, SAL*12+NVL(COMM,0) ROCZNE_WYN ; ENAME ROCZNE_WYN ---------- ---------- KING 60000 BLAKE 34200 CLARK 29400 JONES 35700 MARTIN 16400 ALLEN 19500 TURNER 18000 JAMES 11400 WARD 15500 FORD 36000 SMITH 9600 SCOTT 36000 ADAMS 13200 MILLER 15600 W powyszym przykładzie wartoci róne od NULL zachowuj swoj warto, za wartoci NULL zostan potraktowane jak 0. Drugi parametr funkcji NVL okrela, na jak warto naley zamieni warto NULL: NVL(DATA,'85/09/01') NVL(NUMBER, 10) NVL(MIASTO,'KRAKÓW')

Eliminacja duplikatów Domylnie wywietlane s wyniki zapytania bez eliminowania powtarzajcych si wartoci, np.: SELECT DEPTNO ; DEPTNO ---------- 10 30 10 20 30 30 30 30 30 20 20 20 20 10 Słowo kluczowe DISTINCT Eliminacj powtarzajcych si wartoci uzyskujemy stosujc słowo kluczowe DISTINCT w klauzuli SELECT. SELECT DISTINCT DEPTNO ; DEPTNO ---------- 10 20 30 Mona te zada wyspecyfikowania wzajemnie rónych list wartoci poprzez podanie w klauzuli SELECT wielu nazw kolumn. Słowo kluczowe odnosi si do wszystkich nazw kolumn wystpujcych w klauzuli SELECT. SELECT DISTINCT JOB, DEPTNO ; JOB DEPTNO --------- ---------- ANALYST 20 CLERK 10 CLERK 20 CLERK 30 MANAGER 10

MANAGER 20 MANAGER 30 PRESIDENT 10 SALESMAN 30 Klauzula ORDER BY Aby okreli kolejno, w jakiej bd zwracane wyniki, naley uy klauzuli ORDER BY (uporzdkuj wg). Klauzula ORDER BY musi by ostatni klauzul polecenia. SELECT ENAME, JOB ORDER BY ENAME; ENAME JOB ---------- --------- ADAMS CLERK ALLEN SALESMAN BLAKE MANAGER CLARK MANAGER FORD ANALYST JAMES CLERK JONES MANAGER KING PRESIDENT MARTIN SALESMAN MILLER CLERK SCOTT ANALYST SMITH CLERK TURNER SALESMAN WARD SALESMAN Domylnie dane s sortowane w porzdku rosncym ( ) od najmniejszych do najwikszych liczb, od wczeniejszych do póniejszych dat, za cigi znakowe s sortowane wg ustawie NLS (okrelanych przy tworzeniu bazy danych). Aby odwróci kolejno sortowania naley uy słowa ( ) uytego bezporednio po nazwie kolumny wyspecyfikowanej w klauzuli ORDER BY. SELECT ENAME, JOB, HIREDATE ORDER BY HIREDATE DESC; ENAME JOB HIREDATE ---------- --------- --------- ADAMS CLERK 83/01/12 SCOTT ANALYST 82/12/09 MILLER CLERK 82/01/23 JAMES CLERK 81/12/03 FORD ANALYST 81/12/03 KING PRESIDENT 81/11/17 MARTIN SALESMAN 81/09/28 TURNER SALESMAN 81/09/08 CLARK MANAGER 81/06/09 BLAKE MANAGER 81/05/01 JONES MANAGER 81/04/02 WARD SALESMAN 81/02/22 ALLEN SALESMAN 81/02/20 SMITH CLERK 80/12/17

Mona sortowa według kilku kolumn, wtedy po słowie kluczowym naley poda nazwy kolumn, po których chcemy sortowa. SELECT ENAME, JOB, DEPTNO ORDER BY DEPTNO, ENAME; ENAME JOB DEPTNO ---------- --------- ---------- CLARK MANAGER 10 KING PRESIDENT 10 MILLER CLERK 10 ADAMS CLERK 20 FORD ANALYST 20 JONES MANAGER 20 SCOTT ANALYST 20 SMITH CLERK 20 ALLEN SALESMAN 30 BLAKE MANAGER 30 JAMES CLERK 30 MARTIN SALESMAN 30 TURNER SALESMAN 30 WARD SALESMAN 30 Nazwy kolumn, po których sortujemy, musz by wyspecyfikowane w klauzuli SELECT. Sortowanie dotyczy tylko wyniku zapytania wywietlanego na ekranie. Dane w tabelach nie s sortowane. Klauzula WHERE Klauzula WHERE odpowiada operacji selekcji. Klauzula ta specyfikuje kryteria doboru wierszy. Klauzula WHERE, o ile jest, musi wystpowa bezporednio po klauzuli FROM. Operatory w klauzuli WHERE mog by dwojakiego rodzaju: operatory logiczne, operatory SQL. Operatory logiczne Dane znakowe i cigi znaków w klauzuli WHERE musz by ujte w pojedyncze apostrofy. Przy porównywaniu znaków Oracle rozrónia małe i wielkie litery.

Aby wybra nazwiska, zawód i numer departamentu dla wszystkich zatrudnionych na stanowisku CLERK, napiszemy: SELECT ENAME, JOB, DEPTNO WHERE JOB='CLERK'; ENAME JOB DEPTNO ---------- --------- ---------- JAMES CLERK 30 SMITH CLERK 20 ADAMS CLERK 20 MILLER CLERK 10 Aby wybra wszystkich zatrudnionych po 01.01.1982r., napiszemy: SELECT ENAME, JOB, DEPTNO WHERE HIREDATE>'82/01/01' ENAME JOB DEPTNO ---------- --------- ---------- SCOTT ANALYST 20 ADAMS CLERK 20 MILLER CLERK 10 Mona w klauzuli WHERE porównywa dla kadego wiersza wartoci dwóch kolumn. Np. eby wybra wszystkich, którzy otrzymuj wysz prowizj ni pensj, napiszemy: SELECT ENAME, JOB, DEPTNO WHERE COMM>SAL; ENAME JOB DEPTNO ---------- --------- ---------- MARTIN SALESMAN 30 Operatory SQL Wyróniamy 4 operatory SQL, działajce na wszystkich typach danych: (lista), Operator BETWEEN...AND Operator słuy do sprawdzenia, czy warto znajduje si w podanym przedziale (wliczajc w to krace przedziału). Górna granica musi nastpowa po dolnej.

Aby wybra wszystkich, którzy zarabiaj od 1000 do 1500, wliczajc w to tych, którzy zarabiaj 1000 i 1500, napiszemy: SELECT ENAME, JOB, DEPTNO WHERE SAL BETWEEN 1000 AND 1500; ENAME JOB DEPTNO ---------- --------- ---------- MARTIN SALESMAN 30 TURNER SALESMAN 30 WARD SALESMAN 30 ADAMS CLERK 20 MILLER CLERK 10 Operator IN Operator słuy do sprawdzania, czy dana warto znajduje si na wyspecyfikowanej licie. Aby wybra podwładnych osób o identyfikatorach 7839 i 7902, napiszemy: SELECT ENAME, JOB, DEPTNO WHERE MGR IN (7839,7902); ENAME JOB DEPTNO ---------- --------- ---------- BLAKE MANAGER 30 CLARK MANAGER 10 JONES MANAGER 20 SMITH CLERK 20 Dane znakowe wystpujce na licie naley uj w pojedyncze apostrofy. Operator LIKE Operator słuy do wybierania wartoci odpowiadajcych podanemu wzorcowi. Wzorzec tworz dwa specjalne symbole: % (znak procent) odpowiada dowolnemu cigowi znaków, _ (znak podkrelenia) odpowiada dokładnie jednemu dowolnemu znakowi. Aby wybra osoby, które jako drug liter w nazwisku maj liter "A", napiszemy: SELECT ENAME, JOB, DEPTNO WHERE ENAME LIKE '_A%'; ENAME JOB DEPTNO ---------- --------- ---------- MARTIN SALESMAN 30 JAMES CLERK 30 WARD SALESMAN 30

Aby wybra osoby, których nazwisko składa si z piciu liter, napiszemy: SELECT ENAME, JOB, DEPTNO WHERE ENAME LIKE ' '; ENAME JOB DEPTNO ---------- --------- ---------- BLAKE MANAGER 30 CLARK MANAGER 10 JONES MANAGER 20 ALLEN SALESMAN 30 JAMES CLERK 30 SMITH CLERK 20 SCOTT ANALYST 20 ADAMS CLERK 20 Operator IS NULL Operator słuy do wyszukiwania wartoci NULL. Aby wybra dane o osobach, które nie posiadaj szefa, napiszemy: SELECT ENAME, JOB, DEPTNO WHERE MGR IS NULL; ENAME JOB DEPTNO ---------- --------- ---------- KING PRESIDENT 10 Nie mona napisa w klauzuli WHERE warunku MGR=NULL, gdy wtedy Oracle nie wyszuka adnych wartoci. Operatory negacji Operatory negacji słu do zaprzeczania warunkom w klauzuli WHERE.!= nie jest równy (VAX, UNIX, PC) ^=, _= nie jest równy (IBM) <> nie jest równy (wszystkie systemy operacyjne) kolumna= nie jest równy kolumna> nie jest wikszy nie jest w podanym przedziale nie jest w zbiorze nie jest zgodny z mask nie jest NULL Aby wybra wszystkie osoby, które nie zarabiaj wicej ni 2000, napiszemy:

SELECT ENAME, SAL WHERE NOT SAL>2000; ENAME SAL ---------- ---------- MARTIN 1250 ALLEN 1600 TURNER 1500 JAMES 950 WARD 1250 SMITH 800 ADAMS 1100 MILLER 1300 Aby wybra osoby, które nie otrzymuj prowizji, napiszemy: SELECT ENAME, JOB, COMM WHERE COMM IS NOT NULL ENAME JOB COMM ---------- --------- ---------- MARTIN SALESMAN 1400 ALLEN SALESMAN 300 TURNER SALESMAN 0 WARD SALESMAN 500 Tworzenie złoonych kryteriów Do budowania warunków złoonych słu operatory (i) oraz (lub). Warunek (X Y) jest prawdziwy wtedy i tylko wtedy, gdy X jest prawdziwy i Y jest prawdziwy. Warunek (X Y) jest prawdziwy wtedy i tylko wtedy, gdy X jest prawdziwy lub Y jest prawdziwy. Operator ma wikszy priorytet ni operator. Aby wybra wszystkich pracowników zatrudnionych na stanowisku 'MANAGER' i zarabiajcych wicej ni 2000, napiszemy: SELECT ENAME, JOB, SAL WHERE SAL>2000 AND JOB='MANAGER' NAME JOB SAL ---------- --------- ---------- BLAKE MANAGER 2850 CLARK MANAGER 2450 JONES MANAGER 2975 Poniewa operator ma wyszy priorytet ni operator, to poniszy przykład znajdzie nam wszystkie osoby zatrudnione na stanowisku 'CLERK' oraz te osoby zatrudnione na stanowisku 'MANAGER', których zarobki przekraczaj 1000.

SELECT ENAME, JOB, SAL WHERE SAL>1000 AND JOB='MANAGER' OR JOB='CLERK'; ENAME JOB SAL ---------- --------- ---------- BLAKE MANAGER 2850 CLARK MANAGER 2450 JONES MANAGER 2975 JAMES CLERK 950 SMITH CLERK 800 ADAMS CLERK 1100 MILLER CLERK 1300 Poniszy przykład, w którym zastosowano nawiasy zmieniajce kolejno wykonywania działa wybierze tylko osoby zatrudnione na stanowisku 'CLERK' lub na stanowisku 'MANAGER', które przy tym zarabiaj wicej ni 1000. SELECT ENAME, JOB, SAL WHERE SAL>1000 AND (JOB='MANAGER' OR JOB='CLERK'); ENAME JOB SAL ---------- --------- ---------- BLAKE MANAGER 2850 CLARK MANAGER 2450 JONES MANAGER 2975 ADAMS CLERK 1100 MILLER CLERK 1300 Hierarchia operatorów W kadym wyraeniu, o ile nawiasy nie wskazuj inaczej, operacje s wykonywane poczwszy od operatorów o najwyszym priorytecie. Jeli dwa operatory o tym samym priorytecie wystpuj obok siebie, to s one wykonywane od lewej do prawej. 1. =, <>, <=, >=, >,<,,,, 2. 3. 4. Aby zapis był bardziej przejrzysty i w celu uniknicia błdów, zaleca si stosowanie nawiasów. Krótki opis polece właciwych dla SQL*Plus Pod SQL*Plus najczciej uruchamiamy skrypty SQL-owe. Najczciej uywane polecenia:

SPOOL plik; @plik ed plik SPOOL OFF DESC CONNECT EXIT wszystkie polecenia SQL do czasu wydania rozkazu SPOOL OFF bd zapisywane do pliku plik uruchomienie skryptu plik edycja pliku plik w domylnym edytorze koczy wysyłanie danych do pliku wywietla opis struktury tabeli zmiana podłczenia do bazy wyjcie z programu

wiczenia 1.Wybierz wszystkie dane z tablicy SALGRADE. GRADE LOSAL HISAL --------- --------- --------- 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999 2. Wybierz wszystkie dane z tablicy EMP. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ---------- --------- --------- -------- --------- --------- --------- 7839 KING PRESIDENT 81/11/17 5000 10 7698 BLAKE MANAGER 7839 81/05/01 2850 30 7782 CLARK MANAGER 7839 81/06/09 2450 10 7566 JONES MANAGER 7839 81/04/02 2975 20 7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30 7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30 7844 TURNER SALESMAN 7698 81/09/08 1500 0 30 7900 JAMES CLERK 7698 81/12/03 950 30 7521 WARD SALESMAN 7698 81/02/22 1250 500 30 7902 FORD ANALYST 7566 81/12/03 3000 20 7369 SMITH CLERK 7902 80/12/17 800 20 7788 SCOTT ANALYST 7566 82/12/09 3000 20 7876 ADAMS CLERK 7788 83/01/12 1100 20 7934 MILLER CLERK 7782 82/01/23 1300 10 3. Wybierz wszystkie dane o pracownikach, których zarobki mieszcz si w przedziale <1000,2000>. ENAME DEPTNO SAL ---------- --------- --------- MARTIN 30 1250 ALLEN 30 1600 TURNER 30 1500 WARD 30 1250 ADAMS 20 1100 MILLER 10 1300 4. Wybierz numery i nazwy departamentów, sortujc według nazw departamentów. DEPTNO DNAME --------- -------------- 10 ACCOUNTING 40 OPERATIONS 20 RESEARCH 30 SALES

5. Wybierz wszystkie, wzajemnie róne stanowiska pracy. JOB --------- ANALYST CLERK MANAGER PRESIDENT SALESMAN 6. Wybierz dane o pracownikach zatrudnionych w departamentach 10 i 20 w kolejnoci alfabetycznej ich nazwisk. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ---------- --------- --------- -------- --------- --------- --------- 7876 ADAMS CLERK 7788 83/01/12 1100 20 7782 CLARK MANAGER 7839 81/06/09 2450 10 7902 FORD ANALYST 7566 81/12/03 3000 20 7566 JONES MANAGER 7839 81/04/02 2975 20 7839 KING PRESIDENT 81/11/17 5000 10 7934 MILLER CLERK 7782 82/01/23 1300 10 7788 SCOTT ANALYST 7566 82/12/09 3000 20 7369 SMITH CLERK 7902 80/12/17 800 20 7. Wybierz nazwiska i stanowiska pracy wszystkich pracowników z departamentu 20 zatrudnionych na stanowisku CLERK. ENAME JOB ---------- --------- SMITH CLERK ADAMS CLERK 8. Wybierz nastpujce informacje o wszystkich pracownikach, którzy posiadaj szefa. ENAME JOB SAL ---------- --------- --------- BLAKE MANAGER 2850 CLARK MANAGER 2450 JONES MANAGER 2975 MARTIN SALESMAN 1250 ALLEN SALESMAN 1600 TURNER SALESMAN 1500 JAMES CLERK 950 WARD SALESMAN 1250 FORD ANALYST 3000 SMITH CLERK 800 SCOTT ANALYST 3000 ADAMS CLERK 1100 MILLER CLERK 1300 9. Wybierz nazwiska i całkowite, roczne zarobki wszystkich pracowników. ENAME RENUMERATION ---------- ------------ KING 60000 BLAKE 34200 CLARK 29400 JONES 35700 MARTIN 16400 ALLEN 19500 TURNER 18000

JAMES 11400 WARD 15500 FORD 36000 SMITH 9600 SCOTT 36000 ADAMS 13200 MILLER 15600 10. Wybierz nastpujce dane o tych pracownikach, którzy zostali zatrudnieni w 1982 roku. ENAME DEPTNO HIREDATE ---------- --------- --------- SCOTT 20 09-DEC-82 MILLER 10 23-JAN-82 11. Wybierz nazwiska, roczn pensj oraz prowizj tych wszystkich pracowników, których miesiczna pensja przekracza prowizj. Wyniki posortuj według malejcych zarobków. Jeli dwóch lub wicej pracowników ma tak sam pensj, uporzdkuj dane o nich według nazwisk zgodnie z alfabetem. ENAME ANNUAL_SAL COMM ---------- ---------- --------- ALLEN 19200 300 TURNER 18000 0 WARD 15000 500 12. Spowoduj wywietlenie nastpujcych wyników. Kto, gdzie, kiedy? ------------------------------------------------------------------------------- KING pracuje na stanowisku PRESIDENT w zespole 10 od 17-NOV-81 BLAKE pracuje na stanowisku MANAGER w zespole 30 od 01-MAY-81 CLARK pracuje na stanowisku MANAGER w zespole 10 od 09-JUN-81 JONES pracuje na stanowisku MANAGER w zespole 20 od 02-APR-81 MARTIN pracuje na stanowisku SALESMAN w zespole 30 od 28-SEP-81 ALLEN pracuje na stanowisku SALESMAN w zespole 30 od 20-FEB-81 TURNER pracuje na stanowisku SALESMAN w zespole 30 od 08-SEP-81 JAMES pracuje na stanowisku CLERK w zespole 30 od 03-DEC-81 WARD pracuje na stanowisku SALESMAN w zespole 30 od 22-FEB-81 FORD pracuje na stanowisku ANALYST w zespole 20 od 03-DEC-81 SMITH pracuje na stanowisku CLERK w zespole 20 od 17-DEC-80 SCOTT pracuje na stanowisku ANALYST w zespole 20 od 09-DEC-82 ADAMS pracuje na stanowisku CLERK w zespole 20 od 12-JAN-83 MILLER pracuje na stanowisku CLERK w zespole 10 od 23-JAN-82

Funkcje grupowe

Funkcje grupowe słu do działania na grupach wierszy. Wynikiem funkcji grupowej jest pojedyncza warto dla całej grupy. Jeli nie wyspecyfikujemy inaczej, wszystkie wiersze tabeli s traktowane jako jedna grupa. Funkcja AVG ([ ] wyraenie) COUNT ([ ] wyraenie) MAX ([ ] wyraenie) MIN ([ ] wyraenie) STDDEV ([ ] wyraenie) SUM ([ ] wyraenie) VARIANCE ([ ] wyraenie) Wynik funkcji warto rednia wyrae, NULL nie jest uwzgldniane ilo wystpie wartoci wyrae rónych od NULL, gwiazdka (*) uyta w miejscu wyraenia powoduje obliczenia iloci wszystkich wierszy łcznie z duplikatami i wartociami NULL maksymalna warto wyraenia minimalna warto wyraenia odchylenie standardowe wyrae, bez uwzgldniania wartoci NULL suma wartoci wyrae, bez uwzgldniania wartoci NULL wariancja wyrae, bez uwzgldniania wartoci NULL Kwalifikator ogranicza działanie funkcji grupowych do rónych wartoci argumentów. Kwalifikator jest domylny funkcje grupowe nie eliminuj duplikatów. Argumentami funkcji grupowych s liczby, a w przypadku funkcji MAX, MIN i COUNT take daty, znaki i cigi znaków. Wszystkie funkcje grupowe, za wyjtkiem COUNT(*) ignoruj wartoci NULL. Stosowanie funkcji grupowych Aby obliczy redni zarobek w firmie, napiszemy: SELECT AVG(SAL) ; AVG(SAL) ---------- 2073,21429 Zwrómy uwag, e została zwrócona jedna warto dla wszystkich wierszy. Cała firma jest tu traktowana jako jedna grupa.

Mona nałoy na to polecenie warunek w klauzuli WHERE, np. aby znale minimalny zarobek na stanowisku 'MANAGER', napiszemy: SELECT MIN(SAL) WHERE JOB='MANAGER'; MIN(SAL) ---------- 2450 Aby znale, ilu pracowników pracuje w departamencie 10, napiszemy: SELECT COUNT(*) WHERE DEPTNO=10; COUNT(*) ---------- 3 Klauzula GROUP BY Do podzielenia wierszy tablicy na grupy uywamy klauzuli GROUP BY. Pojedyncz grup stanowi wszystkie wiersze, dla których wartoci podane w klauzuli GROUP BY s identyczne. Aby obliczy rednie zarobki w kadym departamencie, napiszemy: SELECT DEPTNO, AVG(SAL) GROUP BY DEPTNO; DEPTNO AVG(SAL) ---------- ---------- 10 2916,66667 20 2175 30 1566,66667 Przed grupowaniem moemy wyeliminowa pewne wiersze za pomoc klauzuli WHERE: SELECT JOB, MAX(SAL) WHERE JOB<>'CLERK' GROUP BY JOB; JOB MAX(SAL) --------- ---------- ANALYST 3000 MANAGER 2975 PRESIDENT 5000 SALESMAN 1600 W klauzuli GROUP BY mona poda kilka wyrae, wtedy wiersze bd grupowane w mniejszych grupach.

Aby obliczy minimalny zarobek w kadym departamencie w podziałem na stanowiska, napiszemy: SELECT DEPTNO, JOB, MIN(SAL) GROUP BY DEPTNO, JOB; DEPTNO JOB MIN(SAL) ---------- --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 3000 20 CLERK 800 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 1250 Wybierane wyraenia a funkcje grupowe Ponisze polecenie spowoduje obliczenie rednich zarobków w departamentach. Nie bdzie jednak zbyt uyteczne, bo nie bdzie widoczne, która rednia odpowiada któremu departamentowi. SELECT AVG(SAL) GROUP BY DEPTNO; AVG(SAL) ---------- 2916,66667 2175 1566,66667 Aby poprawi to polecenie, umiemy na licie wyboru klauzuli SELECT take numer departamentu: SELECT DEPTNO, AVG(SAL) GROUP BY DEPTNO; DEPTNO AVG(SAL) ---------- ---------- 10 2916,66667 20 2175 30 1566,66667 Na licie wyboru klauzuli SELECT mog wystpowa tylko i wyłcznie nazwy kolumn, które s przedmiotem działania klauzuli GROUP BY, chyba, e wystpuj one jako argument funkcji grupujcej.

Klauzula HAVING Do wybierania interesujcych nas grup słuy klauzula HAVING. W klauzuli HAVING umieszczamy warunek wyraony za pomoc funkcji grupowej. Aby wybra rednie zarobki dla grup zawodowych, gdzie maksymalne zarobki s wysze ni 2000, napiszemy: SELECT JOB, AVG(SAL) GROUP BY JOB HAVING MAX(SAL)>2000; JOB AVG(SAL) --------- ---------- ANALYST 3000 MANAGER 2758,33333 PRESIDENT 5000 Klauzula HAVING moe poprzedza klauzul GROUP BY lub odwrotnie. Czasami to samo kryterium mona wyrazi zarówno za pomoc klauzuli HAVING jak i klauzuli WHERE. SELECT JOB, AVG(SAL) HAVING JOB<>'CLERK' GROUP BY JOB; JOB AVG(SAL) --------- ---------- ANALYST 3000 MANAGER 2758,33333 PRESIDENT 5000 SALESMAN 1400 lub SELECT JOB, AVG(SAL) WHERE JOB<>'CLERK' GROUP BY JOB; JOB AVG(SAL) --------- ---------- ANALYST 3000 MANAGER 2758,33333 PRESIDENT 5000 SALESMAN 1400 W takiej sytuacji bardziej efektywne jest umieszczenie warunku w klauzuli WHERE.

Kolejno wystpowania klauzul Wymagany porzdek klauzul jest nastpujcy: 1. SELECT lista wyrae 2. FROM tabela 3. WHERE warunek selekcji wierszy 4. HAVING warunek selekcji grup 5. ORDER BY wyraenia 6. ;

wiczenia 1. Znajd minimaln pensje w firmie. MINIMUM --------- 800 2. Znajd minimaln, maksymaln i redni pensj w firmie. MIN(SAL) MAX(SAL) AVG(SAL) --------- --------- --------- 800 5000 2073,2143 3. Oblicz minimaln, maksymaln pensje dla kadego stanowiska pracy. JOB MINIMALNA_PENSJA MAKSYMALNA_PENSJA --------- ---------------- ----------------- ANALYST 3000 3000 CLERK 800 1300 MANAGER 2450 2975 PRESIDENT 5000 5000 SALESMAN 1250 1600 4. Oblicz, ilu pracowników jest kierownikami (MANAGER). MANAGERS --------- 3 5. Znajd rednie miesiczne pensje oraz rednie roczne zarobki dla kadego stanowiska. Uwzgldnij prowizje. JOB AVSAL AVCOMP --------- --------- --------- ANALYST 3000 36000 CLERK 1037,5 12450 MANAGER 2758,3333 33100 PRESIDENT 5000 60000 SALESMAN 1400 17350 6. Znajd rónice midzy najwysz i najnisz pensj. DIFFERENCE ---------- 4200 7. Znajd departamenty zatrudniajce powyej trzech pracowników. DEPTNO COUNT(*) --------- --------- 20 5 30 6

8. Sprawd, czy wszystkie numery pracowników s rzeczywicie róne (uywajc grupowania). 9. Podaj najnisze pensje wypłacane podwładnym swoich kierowników. Wyeliminuj grupy o minimalnych zarobkach niszych ni 1000. Uporzdkuj według pensji. MGR MIN(SAL) --------- --------- 7788 1100 7782 1300 7839 2450 7566 3000 5000

Wybieranie danych z wielu tabel

Złczenie równociowe Chcemy uzyska nastpujc informacj: dla kadego pracownika znale jego nazwisko, zawód (tabela EMP) i nazw departamentu, w którym pracuje (tabela DEPT). W obu tych tabelach wystpuje kolumna DEPTNO, okrelajca numer departamentu i zawierajca takie same wartoci, mówice o zwizku pomidzy tymi tabelami. Zwizek oparty o relacj równoci nazywamy zwizkiem równociowym (equi-join). Warunek równoci zapisuje si jak zwykły warunek, z tym, e wartoci do porównania s pobierane z rónych tabel. Aby powiza ze sob logicznie tabele EMP i DEPT, napiszemy: SELECT ENAME, JOB, DNAME, DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO; ENAME JOB DNAME ---------- --------- -------------- KING PRESIDENT ACCOUNTING BLAKE MANAGER SALES CLARK MANAGER ACCOUNTING JONES MANAGER RESEARCH MARTIN SALESMAN SALES ALLEN SALESMAN SALES TURNER SALESMAN SALES JAMES CLERK SALES WARD SALESMAN SALES FORD ANALYST RESEARCH SMITH CLERK RESEARCH SCOTT ANALYST RESEARCH ADAMS CLERK RESEARCH MILLER CLERK ACCOUNTING Razem z informacjami pobranymi z tablicy EMP otrzymujemy nazwy departamentów pobrane z tablicy DEPT. Wiersze tabeli EMP s łczone z takimi wierszami tabeli DEPT, dla których warto EMP.DEPTNO pokrywa si z DEPT.DEPTNO. Poprzedzenie nazwy kolumny nazw tabeli jest wymagane tylko wtedy, gdy w tabelach wymienionych w klauzuli FROM wystpuje kolumna o tej samej nazwie (DEPTNO). Podanie samej nazwy kolumny byłoby niejednoznaczne. Chocia warto tego pola dla obu tabeli jest taka sama, to ze wzgldów składniowych wymagane jest wskazanie tabeli z której bdzie pobrana warto. W poniszym przykładzie w klauzuli SELECT jest wymagane odwołanie do tablicy DEPT: SELECT DEPT.DEPTNO, ENAME, JOB, DNAME, DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO ORDER BY DEPT.DEPTNO; DEPTNO ENAME JOB DNAME ---------- ---------- --------- -------------- 10 KING PRESIDENT ACCOUNTING 10 CLARK MANAGER ACCOUNTING

10 MILLER CLERK ACCOUNTING 20 JONES MANAGER RESEARCH 20 SCOTT ANALYST RESEARCH 20 ADAMS CLERK RESEARCH 20 SMITH CLERK RESEARCH 20 FORD ANALYST RESEARCH 30 BLAKE MANAGER SALES 30 MARTIN SALESMAN SALES 30 ALLEN SALESMAN SALES 30 TURNER SALESMAN SALES 30 JAMES CLERK SALES 30 WARD SALESMAN SALES Aliasy tabel Aliasy, czyli nazwy zastpcze, ułatwiaj pisanie zapyta. Aliasy definiuje si w klauzuli FROM. Obowizuj one jedynie w zapytaniu, w którym s zdefiniowane. Naley uywa aliasów take w klauzuli SELECT, mimo i tekstowo wystpuje ona wczeniej ni klauzula FROM. Przykład uycia aliasów: SELECT D.DEPTNO, ENAME, DNAME E, DEPT D WHERE E.DEPTNO=D.DEPTNO ORDER BY D.DEPTNO; Jeli alias zostanie zdefiniowany dla tabeli, to oryginalnej nazwy tabeli nie wolno ju uywa w tym zapytaniu. Złczenia nierównociowe Złczenia nierównociowe (non-equi-join) nie s oparte o relacj równoci. Zwizek pomidzy wierszami dwóch tabel okrela si poprzez zastosowanie innego operatora ni równo. Na przykład zwizek pomidzy tabelami EMP i SALGRADE jest oparty na nastpujcych zasadach: okrelenie stawki zaszeregowania pracownika polega na wskazaniu do jakiego przedziału (LOSAL, HISAL) nale jego zarobki. Do utworzenia tego warunku zastosujemy operator. SELECT ENAME, SAL, S.GRADE E, SALGRADE S WHERE SAL BETWEEN LOSAL AND HISAL; ENAME SAL GRADE ---------- ---------- ---------- JAMES 950 1 SMITH 800 1 ADAMS 1100 1 MARTIN 1250 2 WARD 1250 2 MILLER 1300 2 ALLEN 1600 3

TURNER 1500 3 BLAKE 2850 4 CLARK 2450 4 JONES 2975 4 FORD 3000 4 SCOTT 3000 4 KING 5000 5 Reguły łczenia tabel Ogólna zasada łczenia tabel: Minimalna liczba warunków łczcych = liczba tabel 1

wiczenia 1. Wybierz nazwiska oraz nazwy departamentów wszystkich pracowników, w kolejnoci alfabetycznej nazw departamentów. ENAME DNAME ---------- -------------- KING ACCOUNTING CLARK ACCOUNTING MILLER ACCOUNTING JONES RESEARCH SCOTT RESEARCH ADAMS RESEARCH SMITH RESEARCH FORD RESEARCH BLAKE SALES MARTIN SALES ALLEN SALES TURNER SALES JAMES SALES WARD SALES 2. Wybierz nazwiska wszystkich pracowników wraz z numerami i nazwami departamentów, w których s zatrudnieni. ENAME DEPTNO DNAME ---------- --------- -------------- KING 10 ACCOUNTING BLAKE 30 SALES CLARK 10 ACCOUNTING JONES 20 RESEARCH MARTIN 30 SALES ALLEN 30 SALES TURNER 30 SALES JAMES 30 SALES WARD 30 SALES FORD 20 RESEARCH SMITH 20 RESEARCH SCOTT 20 RESEARCH ADAMS 20 RESEARCH MILLER 10 ACCOUNTING 3. Dla pracowników o miesicznej pensji 1500 podaj ich nazwiska, miejsca usytuowania ich departamentów oraz nazwy tych departamentów. ENAME LOCATION DNAME ---------- ------------- -------------- KING NEW YORK ACCOUNTING BLAKE CHICAGO SALES CLARK NEW YORK ACCOUNTING JONES DALLAS RESEARCH ALLEN CHICAGO SALES FORD DALLAS RESEARCH SCOTT DALLAS RESEARCH

4. Utwórz nastpujc list pracowników z zaszeregowaniem ich do klas zarobkowych. ENAME JOB SAL GRADE ---------- --------- --------- --------- JAMES CLERK 950 1 SMITH CLERK 800 1 ADAMS CLERK 1100 1 MARTIN SALESMAN 1250 2 WARD SALESMAN 1250 2 MILLER CLERK 1300 2 ALLEN SALESMAN 1600 3 TURNER SALESMAN 1500 3 BLAKE MANAGER 2850 4 CLARK MANAGER 2450 4 JONES MANAGER 2975 4 FORD ANALYST 3000 4 SCOTT ANALYST 3000 4 KING PRESIDENT 5000 5 5. Wybierz informacj o pracownikach, których zarobki odpowiadaj klasie 3. ENAME JOB SAL GRADE ---------- --------- --------- --------- ALLEN SALESMAN 1600 3 TURNER SALESMAN 1500 3 6. Wybierz pracowników zatrudnionych w Dallas. ENAME SAL LOCATION ---------- --------- ------------- JONES 2975 DALLAS FORD 3000 DALLAS SMITH 800 DALLAS SCOTT 3000 DALLAS ADAMS 1100 DALLAS 7.Podaj nastpujce dane o wszystkich pracownikach, z wyjtkiem tych, którzy pracuj na stanowisku CLERK. Uporzdkuj je według malejcych zarobków. ENAME JOB SAL GRADE DNAME ---------- --------- --------- --------- -------------- JAMES CLERK 950 1 SALES SMITH CLERK 800 1 RESEARCH ADAMS CLERK 1100 1 RESEARCH MARTIN SALESMAN 1250 2 SALES WARD SALESMAN 1250 2 SALES MILLER CLERK 1300 2 ACCOUNTING ALLEN SALESMAN 1600 3 SALES TURNER SALESMAN 1500 3 SALES BLAKE MANAGER 2850 4 SALES CLARK MANAGER 2450 4 ACCOUNTING JONES MANAGER 2975 4 RESEARCH FORD ANALYST 3000 4 RESEARCH SCOTT ANALYST 3000 4 RESEARCH KING PRESIDENT 5000 5 ACCOUNTING

8. Przygotuj nastpujce dane o wszystkich pracownikach osigajcych dochody do $36000 (włcznie) oraz tych, którzy pracuj na stanowisku CLERK. ENAME JOB ANNUAL_SAL DEPTNO DNAME GRADE ---------- --------- ---------- --------- -------------- --------- JAMES CLERK 11400 30 SALES 1 SMITH CLERK 9600 20 RESEARCH 1 ADAMS CLERK 13200 20 RESEARCH 1 MILLER CLERK 15600 10 ACCOUNTING 2 FORD ANALYST 36000 20 RESEARCH 4 SCOTT ANALYST 36000 20 RESEARCH 4 KING PRESIDENT 60000 10 ACCOUNTING 5

Inne metody łczenia tabel

Złczenia zewntrzne Podczas łczenia tabel wiersz w tabeli nie majcy swojego odpowiednika w drugiej tabeli nie zostanie wybrany. Np. w przykładzie łczenia tabeli EMP i DEPT poprzez kolumn DEPNO nie został wybrany wiersz tabeli DEPT, gdzie DEPTNO=40 (departament OPERATIONS), poniewa nikt nie pracuje w tym departamencie. Spróbujmy poprawi to złczenie tak, aby został równie wybrany departament 40. Uczynimy to za pomoc złczenia zewntrznego (outer-join), gdzie wiersz w tabeli DEPT, który nie ma swojego odpowiednika w tabeli EMP zostanie połczony z wierszem tabeli EMP zawierajcym same wartoci NULL (mimo, e wiersz taki w rzeczywistoci nie istnieje). Złczenie zewntrzne oznaczamy znakiem (+) po tej stronie równoci, która dotyczy tabeli z niepełn informacj. SELECT ENAME, D.DEPTNO, DNAME E, DEPT D WHERE E.DEPTNO(+)=D.DEPTNO; ENAME DEPTNO DNAME ---------- ---------- -------------- KING 10 ACCOUNTING CLARK 10 ACCOUNTING MILLER 10 ACCOUNTING JONES 20 RESEARCH SCOTT 20 RESEARCH ADAMS 20 RESEARCH SMITH 20 RESEARCH FORD 20 RESEARCH BLAKE 30 SALES MARTIN 30 SALES ALLEN 30 SALES TURNER 30 SALES JAMES 30 SALES WARD 30 SALES 40 OPERATIONS Operator złczenia zewntrznego moe wystpowa tylko po jednej stronie równoci. Połczenie tabeli samej ze sob Dziki aliasom moemy połczy tabel sam ze sob. Rozpatrzmy nastpujcy przykład chcemy wybra pracowników, którzy zarabiaj mniej od swoich kierowników: SELECT E.ENAME NAZW_PR, E.SAL PENS_PR, M.ENAME NAZW_SZ, M.SAL PENS_SZ E, EMP M WHERE E.MGR=M.EMPNO AND E.SAL<M.SAL;

NAZW_PR PENS_PR NAZW_SZ PENS_SZ ---------- ---------- ---------- ---------- BLAKE 2850 KING 5000 CLARK 2450 KING 5000 JONES 2975 KING 5000 MARTIN 1250 BLAKE 2850 ALLEN 1600 BLAKE 2850 TURNER 1500 BLAKE 2850 JAMES 950 BLAKE 2850 WARD 1250 BLAKE 2850 SMITH 800 FORD 3000 ADAMS 1100 SCOTT 3000 MILLER 1300 CLARK 2450 Jak wida w klauzuli FROM, odwołalimy si dwukrotnie do tej samej tabeli za pomoc dwóch aliasów E i M. Operatory zbiorowe Operatory zbiorowe uywane s do działa na wynikach dwóch lub wicej zapyta. Wane jest, aby wszystkie zapytania, na których bdziemy uywa operatorów zbiorowych zwracały te samy typy wierszy, np.: (liczba, cig znaków, cig znaków, data). Operator UNION Operator zbiorowy jest uywany do tworzenia sumy dwóch zbiorów wierszy (wyników zapytania ). Aby otrzyma wszystkie, wzajemnie róne wiersze zwracane w wyniku dwóch polece, napiszemy: SELECT JOB WHERE DEPTNO=30 UNION SELECT JOB WHERE DEPTNO=10 JOB --------- CLERK MANAGER PRESIDENT SALESMAN Operacja (podobnie jak inne operatory zbiorowe) powoduje automatyczn eliminacj duplikatów. Aby otrzyma w wyniku wszystkie wiersze z obu tabel naley uy operatora.

Operator INTERSECT Operator zbiorowy (przecicie zbiorów) powoduje wybranie wierszy wspólnych dla wyników obu zapyta. SELECT JOB WHERE DEPTNO=30 INTERSECT SELECT JOB WHERE DEPTNO=20 JOB --------- CLERK MANAGER Operator MINUS Operator zbiorowy (rónica zbiorów) powoduje wybranie wierszy zwracanych przez pierwszy rozkaz, nie zwracanych przez rozkaz drugi. SELECT JOB WHERE DEPTNO=30 MINUS SELECT JOB WHERE DEPTNO=20 JOB --------- SALESMAN Zapytanie moe si składa z wicej ni dwóch zapyta połczonych operatorami zbiorowymi. W takim przepadku najwyszy priorytet ma operator, potem operatory i (równe priorytety). W przypadkach wtpliwych najlepiej stosowa nawiasy. Klauzula ORDER BY w zapytaniach z operatorami zbiorowymi W zapytaniach z operatorami zbiorowymi mona uy klauzuli ORDER BY. Odnosi si ona zawsze do wyniku zapytania i moe by uyta tylko raz. Umieszcza si j zawsze na kocu zapytania. Poniewa na listach wyboru polece nazwy mog by róne, w klauzuli ORDER BY specyfikuje si nie nazw kolumny, tylko jej pozycj.

SELECT EMPNO, ENAME, SAL UNION SELECT ID, NAME, SALARY _HISTORY ORDER BY 2; Wyniki powyszego zapytania zostan posortowane wg kolumny drugiej, czyli wg nazwisk pracowników.

wiczenia 1. Znajd departament w którym nikt nie jest zatrudniony. DEPTNO DNAME --------- -------------- 40 OPERATIONS 2. Obok numeru i nazwiska pracownika podaj numer i nazwisko jego kierownika. EMPNO ENAME MGRNO MGR_NAME --------- ---------- --------- ---------- 7698 BLAKE 7839 KING 7782 CLARK 7839 KING 7566 JONES 7839 KING 7654 MARTIN 7698 BLAKE 7499 ALLEN 7698 BLAKE 7844 TURNER 7698 BLAKE 7900 JAMES 7698 BLAKE 7521 WARD 7698 BLAKE 7902 FORD 7566 JONES 7369 SMITH 7902 FORD 7788 SCOTT 7566 JONES 7876 ADAMS 7788 SCOTT 7934 MILLER 7782 CLARK 3. Zmodyfikuj rozwizanie poprzedniego zadania w ten sposób, aby wywietli take informacje o pracowniku KING, który nie posiada szefa. EMPNO ENAME MGRNO MGR_NAME --------- ---------- --------- ---------- 7839 KING 7698 BLAKE 7839 KING 7782 CLARK 7839 KING 7566 JONES 7839 KING 7654 MARTIN 7698 BLAKE 7499 ALLEN 7698 BLAKE 7844 TURNER 7698 BLAKE 7900 JAMES 7698 BLAKE 7521 WARD 7698 BLAKE 7902 FORD 7566 JONES 7369 SMITH 7902 FORD 7788 SCOTT 7566 JONES 7876 ADAMS 7788 SCOTT 7934 MILLER 7782 CLARK 4. Znajd takie stanowisko pracy (JOB), które było obsadzone zarówno w pierwszej połowie 1982 roku jak i w pierwszej połowie 1983 roku. JOB --------- CLERK

5. Znajd tych pracowników, którzy zostali zatrudnieniu przed przyjciem do pracy ich kierowników. EMPLOYEE HIREDATE MANAGER HIREDATE ---------- --------- ---------- --------- BLAKE 01-MAY-81 KING 17-NOV-81 CLARK 09-JUN-81 KING 17-NOV-81 JONES 02-APR-81 KING 17-NOV-81 ALLEN 20-FEB-81 BLAKE 01-MAY-81 WARD 22-FEB-81 BLAKE 01-MAY-81 SMITH 17-DEC-80 FORD 03-DEC-81 6. Podaj inny sposób rozwizania zadania 1. DEPTNO DNAME --------- -------------- 40 OPERATIONS

Podzapytania

Podzapytania zagniedone Podzapytanie to polecenie zagniedone w innym poleceniu. kolumna_1, kolumna_2, tabela kolumna = ( kolumna tabela warunek); Podzapytanie to wewntrzny wykonywany w pierwszej kolejnoci, po to, aby jego wynik został uyty do wykonania zapytania zewntrznego. Podzapytania zwracajce jeden wiersz Podzapytania zwracajce pojedyncz warto mona traktowa jak zwykłe wyraenie. Aby znale pracowników zarabiajcych powyej redniej, moemy postpi nastpujco: 1. znale redni pensj: SELECT AVG(SAL) ; AVG(SAL) ---------- 2073,21429 2. znale pracowników, których pensja jest wysza ni obliczona w poprzednim zapytaniu pensja rednia. SELECT ENAME, JOB, SAL WHERE SAL>(wynik zapytania z punktu 1) Powysze dwa rozkazy mona połczy w jeden: SELECT ENAME, JOB, SAL WHERE SAL>(SELECT AVG(SAL) ); ENAME JOB SAL ---------- --------- ---------- KING PRESIDENT 5000 BLAKE MANAGER 2850 CLARK MANAGER 2450 JONES MANAGER 2975

FORD ANALYST 3000 SCOTT ANALYST 3000 Aby znale wszystkich zatrudnionych na tym samym stanowisku co SMITH, napiszemy: SELECT ENAME, JOB WHERE JOB=(SELECT JOB WHERE ENAME='SMITH'); ENAME JOB ---------- --------- JAMES CLERK SMITH CLERK ADAMS CLERK MILLER CLERK Podzapytania zwracajce wiele wierszy Jeli w firmie pracowałoby wicej osób o nazwisku SMITH, to poprzednie podzapytanie nie miałoby sensu. Co wicej zapytanie wewntrzne zamiast pojedynczej wartoci zwróciłoby kolumn wartoci, co prowadziłoby do błdu w zewntrznym zapytaniu. Przekształmy to zapytanie tak, aby wyszukiwało wszystkie osoby zatrudnione na stanowiskach, na których pracuje jakikolwiek SMITH. SELECT ENAME, JOB WHERE JOB IN (SELECT JOB WHERE ENAME='SMITH'); Spróbujmy teraz znale pracowników, których pensja jest na licie najwyszych zarobków w departamentach. SELECT ENAME, SAL, DEPTNO WHERE SAL IN (SELECT MAX(SAL) GROUP BY DEPTNO); ENAME SAL DEPTNO ---------- ---------- ---------- BLAKE 2850 30 FORD 3000 20 SCOTT 3000 20 KING 5000 10 Rozwamy teraz sytuacj, e w firmie pracuje osoba, której zarobki pokrywaj si z najwikszym zarobkiem w danym departamencie, ona jednak pracuje w innym departamencie. Powysze zapytanie wypisze tak osob, jako e nie został nałoony warunek, aby osoba pracowała w departamencie, z którego pochodzi najwysza pensja.

Warunek, w którym porównujemy wiele wartoci Spróbujmy przerobi powysze zapytanie: SELECT ENAME, SAL, DEPTNO WHERE (SAL,DEPTNO) IN (SELECT MAX(SAL), DEPTNO GROUP BY DEPTNO); ENAME SAL DEPTNO ---------- ---------- ---------- BLAKE 2850 30 FORD 3000 20 SCOTT 3000 20 KING 5000 10 Powysze zapytanie wybierze nam osoby, które zarabiaj najwicej w swoich działach został nałoony take warunek, aby osoba wybierana pracowała w dziale, do którego naley najwysza pensja. Kolumny na licie wyboru wewntrznego (w klauzuli WHERE lub HAVING) musz wystpowa w kolejnoci i typach zgodnych z kolejnoci i typami wystpujcymi w klauzuli SELECT zewntrznego polecenia. Operatory ALL i ANY Operatory i mona stosowa w podzapytaniach zwracajcych wicej ni jeden wiersz. Podaje si je w klauzulach WHERE i HAVING razem z operatorami porównywania. Operator wiersz zostanie wybrany, jeli wyraenie jest zgodne co najmniej z jedn wartoci wybran w podzapytaniu. SELECT ENAME, SAL, DEPTNO WHERE SAL > ANY (SELECT DISTINCT SAL WHERE DEPTNO=10); ENAME SAL DEPTNO ---------- ---------- ---------- KING 5000 10 BLAKE 2850 30 CLARK 2450 10 JONES 2975 20 ALLEN 1600 30 TURNER 1500 30 FORD 3000 20 SCOTT 3000 20 Najniszy zarobek w departamencie 10 wynosi 1300. Zapytanie wybierze wszystkich, którzy zarabiaj wicej ni 1300.

Aby nie były wybierane wielokrotnie te same zarobki (3000 jest wiksze i od 1300 i od 2450 zostałoby wybrane dwukrotnie), czsto stosuje si razem z operatorami i słowo kluczowe. SELECT ENAME, SAL, DEPTNO WHERE DEPTNO=10; ENAME SAL DEPTNO ---------- ---------- ---------- KING 5000 10 CLARK 2450 10 MILLER 1300 10 Operator warunek musi by spełniony przez wszystkie wartoci wybrane w podzapytaniu. Wybierzmy wszystkich pracowników, którzy zarabiaj wicej ni ktokolwiek w departamencie 30: SELECT ENAME, SAL, DEPTNO WHERE SAL > ALL (SELECT DISTINCT SAL WHERE DEPTNO=30) ORDER BY SAL; ENAME SAL DEPTNO ---------- ---------- ---------- JONES 2975 20 FORD 3000 20 SCOTT 3000 20 KING 5000 10 Najwyszy zarobek w departamencie 30 wynosi 2850. Zapytanie wybierze wszystkich, którzy zarabiaj wicej ni 2850. Klauzula HAVING z zagniedonymi zapytaniami Podzapytania mog wystpowa równie w klauzuli HAVING (przypominamy klauzula HAVING odnosi si do grup wierszy). Nie istnieje limit na liczb poziomów zagniedania podzapyta. Aby wybra zawody, w których rednia płaca jest wysza ni rednia płaca w zawodzie 'MANAGER', napiszemy: SELECT JOB, AVG(SAL) HAVING AVG(SAL) > (SELECT AVG(SAL) WHERE JOB='MANAGER') GROUP BY JOB; JOB AVG(SAL) --------- ---------- ANALYST 3000 PRESIDENT 5000

Aby wybra stanowisko, na którym s najnisze rednie zarobki, napiszemy: SELECT JOB, AVG(SAL) HAVING AVG(SAL) = (SELECT MIN(AVG(SAL)) GROUP BY JOB) GROUP BY JOB; JOB AVG(SAL) --------- ---------- CLERK 1037,5 Sortowanie danych w podzapytaniu W podzapytaniu nie moe wystpowa klauzula ORDER BY. Klauzula ORDER BY moe wystpi tylko raz dla całego zapytania i wtedy musi pojawi si jako ostatnia. Zapytania skorelowane Blok skorelowany jest szczególnym przypadkiem zagniedonego zapytania. Zwykłe podzapytanie jest wykonywane raz, na samym pocztku, a do jego wyników odwołuje si zapytanie zewntrzne. W przypadku zapytania skorelowanego podzapytanie jest wykonywane dla kadego wiersza z zapytania zewntrznego. Aby znale osoby, które zarabiaj mniej ni wynosi rednia w ich zawodach, napiszemy: SELECT ENAME, SAL, DEPTNO, AVG(SAL) E WHERE SAL < (SELECT AVG(SAL) WHERE JOB=E.JOB) ORDER BY JOB; ENAME SAL DEPTNO ---------- ---------- ---------- JAMES 950 30 SMITH 800 20 CLARK 2450 10 MARTIN 1250 30 WARD 1250 30 Operator EXIST W przypadku zapyta skorelowanych czasami interesuje nas tylko, czy wiersz spełniajcy podane warunki istnieje. Wtedy stosujemy operator.

Aby za pomoc operatora znale pracowników, którzy maj podwładnych, napiszemy: SELECT ENAME, SAL, DEPTNO E WHERE EXISTS (SELECT EMPNO WHERE EMP.MGR=E.EMPNO) ORDER BY DEPTNO; ENAME SAL DEPTNO ---------- ---------- ---------- KING 5000 10 CLARK 2450 10 JONES 2975 20 SCOTT 3000 20 FORD 3000 20 BLAKE 2850 30 Aby znale departament, w którym nikt nie pracuje: SELECT DNAME, DEPTNO FROM DEPT D WHERE NOT EXISTS (SELECT 1 E WHERE E.DEPTNO=D.DEPTNO) ORDER BY DEPTNO; DNAME DEPTNO -------------- ---------- OPERATIONS 40 Zauwamy, e zapytanie wewntrzne nie musi zwraca adnej wartoci z tabeli, istotne jest, czy w ogóle zostanie zwrócony wiersz, a nie jego zawarto.

wiczenia 1. Znajd pracowników zarabiajcych maksymalna pensj na ich stanowiskach pracy. Uporzdkuj ich według malejcych zarobków. JOB ENAME SAL --------- ---------- --------- PRESIDENT KING 5000 ANALYST FORD 3000 ANALYST SCOTT 3000 MANAGER JONES 2975 SALESMAN ALLEN 1600 CLERK MILLER 1300 2. Znajd pracowników zarabiajcych minimaln pensj na ich stanowiskach pracy. Uporzdkuj ich według wzrastajcych pensji. JOB ENAME SAL --------- ---------- --------- CLERK SMITH 800 SALESMAN MARTIN 1250 SALESMAN WARD 1250 MANAGER CLARK 2450 ANALYST FORD 3000 ANALYST SCOTT 3000 PRESIDENT KING 5000 3 Wska dla kadego departamentu ostatnio zatrudnionych pracowników. Uporzdkuj według dat zatrudnienia. DEPTNO ENAME HIREDATE --------- ---------- --------- 30 JAMES 03-DEC-81 10 MILLER 23-JAN-82 20 ADAMS 12-JAN-83 4. Podaj nastpujce dane o pracownikach, których zarobki przekraczaj redni ich departamentów. Uporzdkuj według numerów departamentów. ENAME SALARY DEPTNO ---------- --------- --------- KING 5000 10 JONES 2975 20 FORD 3000 20 SCOTT 3000 20 BLAKE 2850 30 ALLEN 1600 30 5. Stosujc podzapytanie, znajd departamenty, w których nikt nie pracuje. DEPTNO DNAME --------- -------------- 40 OPERATIONS