? Programmerare och databasadministratörer använder Structured Query Language att skapa databaser och rapportera om informationen i dem . En SQL-sats kan innehålla komplexa villkorliga tester för att välja specifika uppsättningar data från tabeller i en databas . En korrelerade underfråga har två prov , kapslade i varandra , varje test beror på resultatet av den andra . SQL
flesta moderna relationsdatabaser införliva SQL för att lägga till och uppdatera data , skapa strukturer och samla information . SQL är baserad på teorier om data utvecklats under 1970 och kontinuerligt förfinats sedan dess . Den består av en uppsättning påståenden , inklusive SELECT , INSERT , skapa och ta bort , följt av olika klausuler som anger de uppgifter som hanteras och alternativ såsom sortering och gruppering . Den utbredda användningen av databaserna beror på att SQL : s flexibilitet och finess , det tillåter organisationer att analysera komplexa grupper av data på många sätt
Frågor och underfrågor
En SQL-kommando . att hämta data kallas en fråga , typiskt , programmerare använder SELECT för frågor , även om många av de regler för sökning av uppgifter som gäller även för INSERT , DELETE och UPDATE . En enkel SELECT-fråga kan visa innehållet i en datatabell , till exempel följande uttalande :
SELECT * FROM inventeringen,
Den här frågan visar alla poster i en tabell som heter " inventering ". du gör ett frågans resultat mer specifik genom att lägga till villkorliga tester , som i detta uttalande :
SELECT * FROM inventering WHERE warehouse_code = ' chicago5 ' ,
denna fråga visar bara inventering register från ett lager kod , chicago5 .
en delfråga är en fråga i en annan fråga . Följande uttalande listor inventering register för dessa objekt från lager i en viss region :
SELECT * FROM inventering WHERE warehouse_code IN ( SELECT warehouse_code från lager WHERE region = ' midwest ' ) ;
Observera att denna fråga har två SELECT-uttryck , en som visar inventering register , och ett annat som ger den viktigaste frågan med lager -koder .
korrelerad Subquery
en korrelerad underfråga , både huvud-och underordnade frågor drar data från samma tabell . Den inre fråga utför en mängdfunktion , t.ex. en statistik , och matar denna information till den yttre frågan , som använder det som grund för en jämförelse . Exempelvis ger detta korrelerade underfråga en lista över inventering register för dessa poster har priserna mer än ett lager genomsnittliga . Den yttre frågan passerar lagerinformation för den inre frågan , och den inre frågan skickar det genomsnittliga priset tillbaka till den yttre frågan :
SELECT part_number , pris , warehouse_code från lager i1 där priset > ( SELECT AVG ( pris ) från lager i2 WHERE warehouse_code.i1 = warehouse_code.i2 ) ; " . i2 "
två frågor använder Tabellalias " i1 " och även om de hänvisar till samma bord , med alias tillåter frågor att behandla det som två separata enheter .
prestandaproblem
för korrelerade underfrågor , utvärderar SQL inre frågan en gång för varje post i den yttre frågan . Som bordsstorlekar blir större , tar processen längre tid . Om du upptäcker att en korrelerad underfråga tar orimligt mycket tid att slutföra , överväga att använda en alternativ , såsom lastning en temporär tabell med mellanliggande resultat , sedan bearbeta den tillfälliga tabellen direkt mot huvudtabellen med en enkel underfråga . Även mindre elegant , kan det visa sig vara betydligt snabbare .