Ich lerne Training Kit Exam 70 461 und die nächste Abfrage nicht verstanden wird:Funktionieren korrelierte Unterabfragen wie eine Schleife?
SELECT
categoryid
,productid
,productname
,unitprice
FROM Production.Products AS P1
WHERE
unitprice =
(SELECT MIN(unitprice)
FROM Production.Products AS P2
WHERE P2.categoryid = P1.categoryid);
Wie funktionierts?
, wenn ich nicht die haben WHERE-Klausel dann werde ich 1 Ergebnis wie folgt:
SELECT
categoryid
,productid
,productname
,unitprice
FROM Production.Products AS P1
WHERE unitprice =
(SELECT MIN(unitprice)
FROM Production.Products AS P2);
und dann
categoryid productid productname unitprice
----------- ---------- -------------- ----------
4 33 Product ASTMN 2.50
aber wenn die erste Abfrage dann ausgeführt wird, erhalte ich:
categoryid productid productname unitprice
----------- ---------- -------------- ----------
1 24 Product QOGNU 4.50
2 3 Product IMEHJ 10.00
3 19 Product XKXDO 9.20
4 33 Product ASTMN 2.50
5 52 Product QSRXF 7.00
6 54 Product QAQRL 7.45
7 74 Product BKAZJ 10.00
8 13 Product POXFU 6.00
Ich verstehe es nicht.
Wie funktioniert das?
ist es wie eine Schleife in einer Schleife?
categoryid 1 was ist die äußere Abfrage und dann loop innere Abfrage zu erhalten categoryid 1? 8 mal bis categoryid 8?
Ich kann nicht fortfahren, ohne dies zu verstehen.
Ich arbeite mit SQL Server mit Northwind als das Buch folgt.
Geben Sie Beispieldaten auch ... –
Wenn Sie verstehen möchten, wie eine Abfrage funktioniert, dann müssen Sie über Ausführungspläne lernen. Ein guter Ausgangspunkt ist die Generierung in SSMS (https://technet.microsoft.com/en-us/library/ms178071(v=sql.105).aspx). –
Fragen Sie nach logisch oder physisch? Wenn das physikalisch ist, ist das vom Optimierer abhängig. SQL ist deklarativ. Eine korrelierte Unterabfrage kann als verschachtelte Schleifen ausgeführt werden oder nicht. Das Beispiel, das Sie angeben, kann das obere Segmentsegment verwenden. http://sqlblog.com/blogs/paul_white/archive/2010/07/28/the-segment-top-query-optimization.aspx –