MySQL Handledning för underfråga med exempel
Vad är underfrågor?
En underfråga är en urvalsfråga som finns i en annan fråga. Den inre urvalsfrågan används vanligtvis för att bestämma resultaten av den yttre urvalsfrågan.
Låt oss titta på syntaxen för underfrågan –
Ett vanligt kundklagomål på MyFlix Video Library är det låga antalet filmtitlar. Ledningen vill köpa filmer för en kategori som har minst antal titlar.
Du kan använda en fråga som
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
Det ger ett resultat
Låt oss se hur den här frågan fungerar
Ovanstående är en form av Rad Sub-Query. I sådana underfrågor kan den inre frågan endast ge ETT resultat. De tillåtna operatorerna när du arbetar med radunderfrågor är [=, >, =, <=, ,!=, ]
Låt oss titta på ett annat exempel,
Anta att du vill ha namn och telefonnummer till medlemmar av personer som har hyrt en film och ännu inte lämnat tillbaka dem. När du har fått namn och telefonnummer ringer du upp dem för att ge en påminnelse. Du kan använda en fråga som
SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );
Låt oss se hur den här frågan fungerar
I det här fallet returnerar den inre frågan mer än ett resultat. Ovanstående är typ av Tkunna sub-query.
Hittills har vi sett två frågor, låt oss nu se ett exempel på trippelfråga!!!
Anta att ledningen vill belöna den högst betalande medlemmen.
Vi kan köra en fråga som
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
Ovanstående fråga ger följande resultat -
Underfrågor kontra gå med!
Vid jämförelse med Joins är underfrågor enkla att använda och lätta att läsa. De är inte så komplicerade som Fogar
Därför används det ofta av SQL nybörjare.
Men underfrågor har prestandaproblem. Att använda en join istället för en underfråga kan ibland ge dig upp till 500 gångers prestandaökning.
Givet ett val rekommenderas det att använda en JOIN över en underfråga.
Sub-Queries bör endast användas som en reservlösning när du inte kan använda en JOIN-operation för att uppnå ovanstående
Sammanfattning
- Underfrågor är inbäddade frågor i en annan fråga. Den inbäddade frågan är känd som den inre frågan och behållarfrågan är känd som den yttre frågan.
- Underfrågor är lätta att använda, erbjuder stor flexibilitet och kan enkelt delas upp i enstaka logiska komponenter som utgör frågan, vilket är mycket användbart när Testning och felsöka frågorna.
- MySQL stöder tre typer av underfrågor, skalära, rad- och tabellunderfrågor.
- Skalära underfrågor returnerar bara en enda rad och en kolumn.
- Radsubfrågor returnerar bara en enda rad men kan ha mer än en kolumn.
- Tabellunderfrågor kan returnera flera rader såväl som kolumner.
- Underfrågor kan också användas i INSERT-, UPDATE- och DELETE-frågor.
- För prestandaproblem, när det gäller att hämta data från flera tabeller, rekommenderas det starkt att använda JOINs istället för subqueries. Underfrågor bör endast användas med goda skäl.