Ten artykuł wyjaśnia na temat nierelowanych i skorelowanych podquery w SQL Server (Transact-SQL) na przykładzie.
skorelowane podzapytanie
skorelowane podzapytanie jest podzapytaniem, którego wartość zależy od zapytania zewnętrznego. Skorelowane podzapytanie jest wykonywane wielokrotnie, raz dla każdego wiersza wybranego przez podzapytanie.
w skorelowanym podzapytaniu podzapytanie zostanie wykonane raz, a wynikowa wartość zostanie zamieniona na klauzulę WHERE zapytania zewnętrznego.
uwaga: nie można wykonać skorelowanego zapytania podrzędnego niezależnie od zapytania zewnętrznego.
stwórzmy dwie tabele, aby zrozumieć skorelowane podquery w SQL Server (T-SQL).
tabela produktów:
1
2
3
4
5
6
7
8
9
10
11
|
Utwórz tabelę productsstable
(
Identyfikator klucza podstawowego int,
Nazwa nvarchar(50),
Cena int,
Szczegółowe informacje na temat nvarchar(150)
)
wstaw do Produktówstabilne wartości (1, 'Laptop’, 30000, 'laptop dla użytkowników domowych’)
wstaw do Produktówstabilne wartości (2, 'Pralka’, 20000, 'maszyna z przednim obciążeniem w kolorze białym’)
wstaw do Produktówstabilne wartości (3, 'TV’, 22000, ’32-calowy telewizor HD LED’)
insert into productstable values (4, 'lodówka’, 30000, '190 ltr lodówka z podwójnymi drzwiami’)
|
tabela rekordów sprzedaży:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
Utwórz tabelę salerecordtable
(
Identyfikator klucza podstawowego int,
Identyfikator produktu int,
Sprzedający liczba int,
SaleDate Date
)
Insert into SaleRecordTable Values (2, 3, ’10-10-2016′)
Insert into SaleRecordTable Values (3, 5, ’10-10-2016′)
Insert into SaleRecordTable Values (2, 2, ’11-10-2016′)
Insert into SaleRecordTable Values (4, 6, ’11-10-2016′)
Insert into SaleRecordTable Values (2, 6, ’12-10-2016′)
Insert into SaleRecordTable Values (4, 6, ’13-10-2016′)
|
zapytanie pobierze całość sprzedanego produktu z tabeli rekordów sprzedaży. W subquery pobierane są dane dotyczące wszystkich sprzedanych produktów dla każdego id produktu Tabeli produktów.
1
2
3
4
|
–correlated subquery
Select Name,
(Select SUM(SoldQuantity) from SaleRecordTable where ProductId = ProductsTable.ID) jako „całkowita liczba sprzedanych”
z productsstable
|
1
2
3
4
|
–Non correlated query
Select ID, Name, Details
From ProductsTable
Where ID = (Select ProductID from SaleRecordTable Where SaleDate =’10-10-2016′ AND ProductID =2)
|
Wyjście:
jeśli uruchomisz subquery niezależnie, tym razem nie otrzymasz żadnego błędu. Wynik będzie następujący:
mam nadzieję, że ten artykuł pomógł Ci zrozumieć skorelowane i nierelowane podquery w SQL Server. Proszę publikować swoje komentarze dla zapytań i opinii. Dzięki za przeczytanie.
- Bio
- Latest Posts
najnowsze posty gyanendu Shekhar (Zobacz wszystkie)
- używanie przezroczystego materiału w Unity 3D – 8 lutego 2021
- rozpoczęcie pracy z zestawem narzędzi UI : Unity 3D tutorial – 30 grudnia 2020
- używanie zdarzeń w Unity 3D – 2 maja 2020