Innehåll
Subqueries är frågor som ligger inuti en annan. De låter dig skilja en del av meningen och ge ett mer läsbart alternativ till operationer som kan kräva komplexa föreningar och fackföreningar. Subqueries i MySQL kan returnera ett värde, rad, kolumn eller tabell med data.
Använd subqueries för att skapa mer läsbara och kompakta meningar (Thinkstock Images / Comstock / Getty Images)
Syntaxen
Den grundläggande syntaxen för en underfråga är som följer:
VÄLJ * FRÅN tabell1 VAR kolumnA = (VÄLJ kolumnB FRÅN tabell2) GÅ
Subqueries ska bestå av ett "SELECT", "INSERT", "UPDATE", "DELETE", "SET" eller "DO" -sättningen, och du kan inte ändra tabellen och använda den i underfrågan samtidigt. Subqueries används vanligtvis på höger sida av WHERE-klausulen, som kan innehålla någon av jämförelserna och de logiska operatörerna, såsom = (lika), <> (annorlunda), <= (mindre än eller lika),> = eller "MELLAN" (mellan två värden), "NOT", "OCH" och "ELLER". Du kan också använda sökorden "DISTINCT", "GROUP BY", "ORDER BY" och "LIMIT" och till och med i kombination med "JOIN" -förklaringar. Förutom de detaljerade begränsningarna finns det få begränsningar när du skriver underfrågor i MySQL.
Det finns inte ens en begränsning av antalet underfrågor som görs inom en mening. Du hittar mer information om underfrågor i MySQL-referenshandboken (se avsnittet "Resurser").
exempel
Antag att du har två tabeller: ett med för- och efternamn, adress och postnummer till medlemmar i en e-postlista, och en med städer, stater och postnummer. För att hitta namnen på medlemmar som bor i Brasilia kan flera "valda" meningar användas. Den första kommer att söka Brasiliens CEPs:
VÄLJ FRÅN FRÅN KODER WHERE state = "BRASILIA" GO
Använd sedan en "välj" för varje postnummer som hittades:
SELECT namn, efternamn FROM adresser WHERE cep = [codecep] GO
Denna metod är tidskrävande och lätt att göra misstag. Det är lätt att förlora en postnummer, särskilt om det finns för många av dem. Ett enklare sätt att slutföra denna uppgift är att använda den första meningen som en underfråga inom den andra:
VÄLJ namn, efternamn FROM adresser WHERE cep = (VÄLJ cep FRÅN koder WHERE state = "BRASILIA") GO
Den här frågan visar alla medlemmar i din e-postlista som bor i Brasilia.