• Nie Znaleziono Wyników

Podzapytania to mechanizm, który

N/A
N/A
Protected

Academic year: 2021

Share "Podzapytania to mechanizm, który"

Copied!
18
0
0

Pełen tekst

(1)

Autor: Joanna Karwowska

(2)

1.

Podzapytania to mechanizm, który pozwala wykorzystać wyniki

jednego zapytania w innym

zapytaniu. Nazywane są również zapytaniami zagnieżdżonymi.

2.

Można je stosować w zapytaniach typu SELECT, INSERT, UPDATE,

DELETE, gdzie najczęściej są

wprowadzane do klauzuli WHERE bądź FROM.

3.

Możemy wyróżnić dwa główne typy

podzapytań: proste i skorelowane.

(3)

Wynikiem zapytania typu SELECT jest tablica zawierająca określone kolumny i dane.

Skoro jest to tablica, to możliwe jest

wykonanie na niej kolejnego zapytania typu SELECT.

Podzapytanie proste to takie podzapytanie, które jest wykonywane tylko raz, a jego wynik jest następnie wykorzystywany w zapytaniu głównym.

(4)

0gólna postać zapytania złożonego:

SELECT

kolumny_zapytania

FROM

(SELECT

kolumny_podzapytania

FROM

tablice

WHERE

warunki_podzapytania

) AS

nazwa

WHERE

warunki_zapytania;

Argument nazwa jest to nazwa tablicy

wynikowej zwróconej przez podzapytanie.

(5)

Ćw.1

Wykonaj złączenie(relację) tabel klienci i zamówienia wiążące klientów oraz ich zamówienia i użyj tego złączenia jako

podzapytania zapytania pobierającego dane

zamówień o wartości większej niż 15 zł. Wyniki posortuj względem wartości zamówień w

porządku rosnącym.

SELECT imie, nazwisko, wartosc, data

FROM

(SELECT imie, nazwisko, wartosc, data FROM klienci, zamowienia

WHERE klienci.id=zamowienia.klient_id ) AS klienci_zamowienia

WHERE wartosc>15 ORDER BY wartosc;

(6)

Wynikiem tego podzapytania będzie tabela:

(7)

Ćw.2

Wykonaj zapytanie proste do stwierdzenia, jaki jest identyfikator towaru, na który

zastało złożone zamówienie o najniższej wartości.

SELECT

towar_id

FROM

zamowienia

WHERE

wartosc=

(SELECT MIN(wartosc) FROM zamowienia);

(8)

Działanie tej instrukcji jest następujące:

najpierw wykonywane jest podzapytanie:

SELECT MIN(wartosc) FROM zamowienia;

a jego wynik (2.59) jest wstawiany do warunku klauzuli WHERE.

Następnie wykonywane jest zapytanie zewnętrzne, które przyjmie postać:

SELECT

towar_id

FROM

zamowienia

WHERE

wartosc=2.59;

(9)

Podzapytania skorelowane są wykonywane dla każdej wartości analizowanej przez

zapytanie główne.

Ich cechą charakterystyczną jest odwołanie

w zapytaniu skorelowanym do kolumny tabeli występującej w zapytaniu głównym.

Jeśli w obu zapytaniach występuje ta sama tabela, niezbędne jest użycie aliasu.

(10)

Ćw.

Napisz zapytanie pozwalające stwierdzić, które towary mają cenę wyższą niż średnia cena

w grupie, do której należą.

Aby wykonać to ćwiczenie, dla każdego towaru trzeba wyliczyć średnią cenę grupy i

porównać ją z ceną z kolumny cena.

Nie wystarczy zatem prosta instrukcja

warunkowa; trzeba będzie wykorzystać podzapytanie skorelowane.

(11)

SELECT id, nazwa, cena, grupa FROM towary

WHERE cena >

(SELECT AVG(cena)

FROM towary AS towary2

WHERE towary.grupa=towary2.grupa )

ORDER BY cena;

Ponieważ oba zapytania bazują na tej samej tabeli, w zapytaniu skorelowanym tablica towary została przemianowana na towary2, tak, aby warunek w klauzuli WHERE miał

sens (inaczej miałby on postać

towary.grupa=towary.grupa)

.

(12)

INSERT INTO

tablica

(kolumny) (

SELECT

kolumny_podzapytania

FROM

tablice_podzapytania

WHERE

warunki_podzapytania

);

(13)

Tabelę

zam_tymczas

chcielibyśmy teraz wypełnić danymi pobieranymi z tabel zaprojektowanych na początku tematu.

Przygotowanie osobnych instrukcji INSERT dla każdego wiersza byłoby z pewnością bardzo czasochłonne, a jeśli w tabelach

klienci

i

zamówienia

byłoby więcej danych – praktycznie niewykonywane.

W takiej sytuacji najlepiej posłużyć się instrukcją typu INSERT wykorzystującą

odpowiednio przygotowane podzapytanie.

(14)

Ćw. Użyj podzapytania typu SELECT do

wypełnienia tabeli zam_tymczas danymi

poszczególnych zamówień (imię i nazwisko klienta oraz wartość zamówienia).

Aby wykonać to ćwiczenie należy użyć instrukcji:

INSERT INTO zam_tymczas(imie, nazwisko, wartosc)

(

SELECT imie, nazwisko, wartosc FROM klienci, zamowienia

WHERE klienci.id=zamowienia.klient_id );

(15)

Chcemy teraz z tabeli zam_tymczas3 usunąć wszystkie wpisy, które w kolumnie wartość mają wartość mniejszą niż średnia

arytmetyczna ze wszystkich zamówień z tabeli zamówienia.

DELETE FROM zam_tymczas3 WHERE wartosc <

(

SELECT AVG(wartosc) FROM zamowienia

);

(16)

Działanie tej instrukcji jest następujące:

najpierw wykonywane jest podzapytanie SELECT AVG(wartosc)

FROM zamowienia

a jego wynik (14.81) jest wstawiany do warunku klauzuli WHERE. Następnie

wykonywane jest instrukcja DELETE, która przyjmie postać:

DELETE FROM zam_tymczas3 WHERE wartosc < 14.81;

(17)

W efekcie działania tej instrukcji zostaną

usunięte te zamówienia, których wartość jest mniejsza niż 14,81.

(18)

Cytaty

Powiązane dokumenty

przykładem jest relacja koloru zdefiniowana na zbiorze wszystkich samochodów, gdzie dwa samochody są w tej relacji, jeśli są tego samego koloru.. Jeszcze inny przykład to

nierozsądnie jest ustawić się dziobem żaglówki w stronę wiatru – wtedy na pewno nie popłyniemy we właściwą stronę – ale jak pokazuje teoria (i praktyka), rozwiązaniem

W przestrzeni dyskretnej w szczególności każdy jednopunktowy podzbiór jest otwarty – dla każdego punktu możemy więc znaleźć taką kulę, że nie ma w niej punktów innych niż

Spoglądając z różnych stron na przykład na boisko piłkarskie, możemy stwierdzić, że raz wydaje nam się bliżej nieokreślonym czworokątem, raz trapezem, a z lotu ptaka

Bywa, że każdy element zbioru A sparujemy z innym elementem zbioru B, ale być może w zbiorze B znajdują się dodatkowo elementy, które nie zostały dobrane w pary.. Jest to dobra

Następujące przestrzenie metryczne z metryką prostej euklidesowej są spójne dla dowolnych a, b ∈ R: odcinek otwarty (a, b), odcinek domknięty [a, b], domknięty jednostronnie [a,

nierozsądnie jest ustawić się dziobem żaglówki w stronę wiatru – wtedy na pewno nie popłyniemy we właściwą stronę – ale jak pokazuje teoria (i praktyka), rozwiązaniem

W przestrzeni dyskretnej w szczególności każdy jednopunktowy podzbiór jest otwarty – dla każdego punktu możemy więc znaleźć taką kulę, że nie ma w niej punktów innych niż