zagadka o bazach

dzisiejsza zagadka to praktycznie crosspost z grupy newsowej pl.comp.bazy-danych, ale nie pamiętam dokładnie kto to wtedy pisał – jak się odezwie to oczywiście dam linka.

pytanie jest relatywnie proste.

mamy dwie tabele:

CREATE TABLE tab_a (
pole_a TEXT,
pole_b TEXT
);
 CREATE TABLE tab_b (
     pole_c TEXT
);

wstawiamy do nich testowe dane:

INSERT INTO tab_a (pole_a, pole_b) VALUES ('a', '1');
INSERT INTO tab_a (pole_a, pole_b) VALUES ('b', '2');
INSERT INTO tab_a (pole_a, pole_b) VALUES ('c', '3');
INSERT INTO tab_a (pole_a, pole_b) VALUES ('d', '4');
 
INSERT INTO tab_b (pole_c) VALUES ('e');
INSERT INTO tab_b (pole_c) VALUES ('f');

na razie nic trudnego. teraz – zaraz podam zapytanie o które chodzi, proszę – nie wykonuj tego u siebie. postaraj się domyśleć co to zapytanie zwróci:

SELECT
*
FROM
tab_a
WHERE
pole_a IN ( SELECT pole_a FROM tab_b );

i teraz – co to zapytanie zwróci:

  • nic, bo się wywali z błędem. jakim?
  • nic, zwróci zero rekordów, ale błędu nie będzie.
  • zwróci jakieś rekordy. jakie? ile?

prawda, że proste? na pewno?

4 thoughts on “zagadka o bazach”

  1. Pierwsza mysl — nic z bledem (nieznana kolumna w podzapytaniu). Druga mysl — produkt kartezjanski tab_a z jej kolumna pole_a, czyli 16 rekordow… i choc wyglada to podejrzanie, to postawie na ta druga mysl;-)

    Pozdrawiam,
    M.

    PS: czy ten layout na blogu to na stale, czy tymczasowo? literki troche za male.

  2. Wszystkie rekordy z tab_a. Mamy na tapecie podzapytanie skorelowane, które za każdym razem wybiera 2 pasujące wartości, i in zwróci true.

Comments are closed.