sql – structured query language (3)

13
Wykład 7 Prowadzący: dr Paweł Drozda SQL – Structured Query Language (3)

Upload: dextra

Post on 16-Jan-2016

54 views

Category:

Documents


0 download

DESCRIPTION

SQL – Structured Query Language (3). Wykład 7 Prowadzący: dr Paweł Drozda. Plan wykładu. Podzapytania Perspektywy. Podzapytania. Można stosować dla klauzuli: WHERE HAVING FROM Taka sama postać jak zwykłe zapytanie – ujęte w nawiasy Podzapytanie jako prawy argument predykatów - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: SQL – Structured Query Language (3)

Wykład 7

Prowadzący: dr Paweł Drozda

SQL – Structured Query Language (3)

Page 2: SQL – Structured Query Language (3)

PodzapytaniaPerspektywy

dr Paweł Drozda

Plan wykładu

Page 3: SQL – Structured Query Language (3)

Można stosować dla klauzuli:WHEREHAVINGFROM

Taka sama postać jak zwykłe zapytanie – ujęte w nawiasy

Podzapytanie jako prawy argument predykatów=, <, <=, >, >=, <>, IN, NOT IN

dr Paweł Drozda

Podzapytania

Page 4: SQL – Structured Query Language (3)

Liczba wyników Wierszowe – wynikiem podzapytania jest pojedynczy

wiersz Tablicowe – wynikiem podzapytania jest wiele wierszy

Zależność od wierszy zapytania głównego Zwykłe – gdy podzapytanie nie zależy od zapytania

głównego Skorelowane – gdy zapytanie wykorzystuje elementy

zapytania głównego

dr Paweł Drozda

Typy Podzapytań

Page 5: SQL – Structured Query Language (3)

Wierszowe SELECT * FROM pracownik WHERE zarobki = (SELECT

MAX(zarobki ) FROM pracownik);

TablicoweSELECT * FROM pracownik WHERE id_pracownika NOT IN

(SELECT prowadzacy FROM przedmioty);SELECT * FROM student WHERE nazwisko LIKE ‘%a%’ AND

nrindeksu IN (SELECT student FROM oceny WHERE ocena=5);

INSERT INTO student(imie, nazwisko, adres, rok, telefon) SELECT imie, nazwisko, adres, 1, 997 from kandydaci;

dr Paweł Drozda

Podzapytania – przykłady (1)

Page 6: SQL – Structured Query Language (3)

ZwykłeSELECT tytul, autor FROM ksiazki WHERE cena =

(SELECT MAX(cena) from ksiazki);

SkorelowaneSELECT a.imie, a.nazwisko, a.zarobki, a.stanowisko

FROM pracownik a WHERE zarobki = (SELECT MAX(b.zarobki) FROM pracownik b WHERE b.stanowisko = a.stanowisko);

dr Paweł Drozda

Podzapytania – przykłady(2)

Page 7: SQL – Structured Query Language (3)

ALL – dla wszystkich elementów podzapytania warunek musi być spełniony

SELECT imie, nazwisko FROM pracownik WHERE zarobki > ALL (SELECT zarobki FROM pracownik WHERE stanowisko = ‘adiunkt’);

ANY(SOME) – co najmniej dla jednego elementu podzapytania warunek musi być spełniony

SELECT imie, nazwisko FROM pracownik WHERE zarobki > ANY (SELECT zarobki FROM pracownik WHERE stanowisko = ‘adiunkt’);

dr Paweł Drozda

Podzapytania – kwantyfikatory (1)

Page 8: SQL – Structured Query Language (3)

EXISTS – kwantyfikator egzystencjalny „istnieje”SELECT nazwisko FROM pracownik WHERE EXISTS (SELECT

‘x’ FROM przedmioty WHERE przedmioty.prowadzacy = pracownik.id_pracownika);

NOT EXISTS – kwantyfikator uniwersalny z negacją „dla każdego nieprawda że”SELECT nazwisko FROM pracownik WHERE NOT EXISTS

(SELECT ‘x’ FROM przedmioty WHERE przedmioty.prowadzacy = pracownik.id_pracownika);

dr Paweł Drozda

Podzapytania – kwantyfikatory (2)

Page 9: SQL – Structured Query Language (3)

Po FROM SELECT a.stanowisko, 100*a.liczbaprac/b.liczbaprac as

‘procPracowników’, 100*a.zarob/b.zarob as ‘procZarobkow’ FROM (SELECT stanowisko, COUNT(*) AS liczbaprac, SUM(zarobki) as zarob FROM pracownik GROUP BY stanowisko) a, (SELECT COUNT(*) AS liczbaprac, SUM(zarobki) AS zarob FROM pracownik) b;

Tworzenie tabeli (po AS)CREATE TABLE nowa (Imie varchar(30), Nazwisko

varchar(30)) AS SELECT imie, nazwisko FROM pracownik WHERE zarobki >4000;

dr Paweł Drozda

Podzapytania – tworzenie tabel

Page 10: SQL – Structured Query Language (3)

Nazwana tabelaNie może istnieć samodzielnie – dane pobiera z

tabel bazowych (stworzonych przez CREATE TABLE) lub innych perspektyw

W MySQL może posłużyć do zapamiętywania wykonywanych zapytań

Gdy dane są aktualizowane w tabeli bazowej – odzwierciedlenie w perspektywie

Gdy struktura tabeli bazowych się zmienia – brak odzwierciedlenia w perspektywie

dr Paweł Drozda

Perspektywy (1)

Page 11: SQL – Structured Query Language (3)

Określają widok na bazę danych dla pewnych grup użytkowników

Możliwe usuwanie, dodawanie, aktualizacja danych w perspektywie – dane w tabeli bazowej również zmieniana

dr Paweł Drozda

Perspektywy (2)

Page 12: SQL – Structured Query Language (3)

Tworzenie – składnia:CREATE [OR REPLACE] VIEW nazwa AS zapytanie;

Przykład:CREATE OR REPLACE VIEW Pierwszy AS SELECT

nazwisko FROM Student WHERE rok=1;

Usuwanie – składnia:DROP VIEW nazwa [RESTRICT/ CASCADE];

Opcja sprawdzania (WITH CHECK OPTION) – sprawdza czy warunek podany w perspektywie nie zostaje zmieniony przez modyfikację bądź dodanie nowej krotki

dr Paweł Drozda

Perspektywy – SQL (1)

Page 13: SQL – Structured Query Language (3)

PrzykładCREATE VIEW bogacze AS SELECT * FROM Pracownik

WHERE zarobki > 4000 WITH CHECK OPTION;INSERT INTO bogacze(nazwisko, imie , zarobki) VALUES

(‘Biedak’, ‘Jan’, 2000); - takie zapytanie zwróci błądINSERT INTO bogacze(nazwisko, imie , zarobki) VALUES

(‘Bogaty’, ‘Stefan’, 5000); - krotka zostanie dodanaUPDATE bogacze SET zarobki = zarobki – 400; - co się

stanie dla zarobków pomiędzy 4000 – 4400?

dr Paweł Drozda

Perspektywy – SQL (2)