Underfrågor är frågor kapslas i en annan fråga . Underfrågor kan du separera varje del av meddelandet och ge en mer lättläst alternativ till att utföra operationer som skulle kräva komplexa kopplingar och fackföreningar utan underfrågor . MySQL underfrågor kan returnera ett enda värde , enkelrad , enstaka kolumn eller ett bord . Syntaxen
Den grundläggande syntaxen för en delfråga är här :
SELECT * FROM tabell WHERE Columna = ( SELECT columnb FROM table2 ) ,
Underfrågor måste vara en SELECT , INSERT , UPDATE , DELETE , SET eller DO uttalande , och du kan inte ändra en tabell och välj från den i underfråga .
Underfrågor vanligen finns på den högra sidan av WHERE , vilket kan innehålla någon av följande jämförelse och logiska operatorer : = ( lika) , <> (inte lika ) , <= ( mindre än eller lika ) , > = ( större än eller lika ) , < (mindre än ) , > , ( större än ) , mELLAN ( värde ligger mellan två värden ) NOT ( logiskt NOT ) , OCH ( logiskt AND ) ELLER ( logiskt ELLER ) . De kan också innehålla DISTINCT , GROUP BY , ORDER BY , och nyckelord gräns. De kan även användas tillsammans med gå med uttalanden. Andra än de restriktioner som ovan , det finns mycket få begränsningar som ställs på delfrågor inom MySQL .
P Det finns inte ens en begränsning på antalet delfrågor som kan hittas i ett uttalande . Så länge du placera varje underfråga inom parentes , kan du ha så många nästlade frågor som du behöver för att hitta dina uppgifter . Mer information om underfrågor kan hittas i MySQL Reference Manual ( se Resurser )
Exempel
Anta att du har två tabeller : . Den första innehåller förnamn , Senast namn , Gatuadress och postnummer av medlemmarna i din e-postlista , den andra innehåller Stad , stat och postnummer . Om du vill hitta namnen på de ledamöter som bor i Georgia , kan du använda flera select-satser . Det första påståendet skulle vara att hitta postnummer för Georgia :
SELECT zip från zipcode VAR state = "Georgien " ,
Då skulle utfärda en select-sats för varje postnummer returneras :
SELECT fname , lname FROM adress där zip = " [ postnummer ] ";
Denna metod är mycket tidskrävande och risk för fel . Det är lätt att missa ett postnummer , särskilt om det finns en hel del av dem
Ett enklare sätt att slutföra din uppgift skulle vara att utfärda det första meddelandet som en underfråga på det andra meddelandet : .
SELECT fname , lname FROM adress där zip = ( SELECT zip från zipcode VAR state = "Georgien " ) , .
Denna fråga returnerar alla medlemmar i din e-postlista som bor i Georgien med en query
Addera