Do tej pory rozważaliśmy podzapytania odnoszące się do kolumn (podzapytania skalarne), tzn. podzapytania, które zwracają pojedynczą wartość kolumny. Podzapytanie wierszowe jest takim podzapytaniem, które zwraca jeden wiersz, i tym samym może zwrócić więcej niż jedną wartość kolumny. Na przykład patrz Listing 1.0 lub 2.0. W obydwu przypadkach wartośc zapytania jest równa TRUE jeśli tylko tablica tab2 zawiera wiersz, w którym col1 = 1, i col2 = 2. Wyrażenie (1,2) i ROW(1,2) są czasem nazywane konstruktorami wierszowymi. Są też poprawne w troche innym kontekście. Na przykład, następne dwa zapytania są składniowo równoważne:(lisitng 3.0) Normalnie, konstruktorów wieszowych używa się w celu porównania z podzapytaniami, które zwracają wartości dówch lub więcej kolumn. Na przykład, wykonanie nastepującego zapytania: (patrz listing 4.0) da nam wynik: "wszystkie wiersze, w tablicy tab1 które istnieją też w tablicy tab2".
Listing
SELECT * FROM tab1 WHERE (1,2) = (SELECT col1, col2 FROM tab2);
--Listing 2.0
SELECT * FROM tab1 WHERE ROW(1,2) = (SELECT col1, col2 FROM tab2);
--Listing 3.0
SELECT * FROM tab1 WHERE (col1,col2) = (1,1);
SELECT * FROM tab1 WHERE col1 = 1 AND col2 = 1;
--Listing 4.0
SELECT col1,col2,col3
FROM tab1
WHERE (col1,col2,col3) IN
(SELECT col1,col2,col3 FROM tab2);
Ranga: Administrator serwisu Punktów: 0