Vad är underfrågor?
En underfråga är en markerad fråga som finns i en annan fråga. Den inre väljfrågan används vanligtvis för att bestämma resultaten av den yttre väljfrågan.
Låt oss titta på underfrågans syntax -
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 denna fråga fungerar
Ovanstående är en form av radundersökning . I sådana underfrågor kan den inre frågan bara ge ETT resultat. De tillåtna operatörerna när de arbetar med radundersökningar är [=,>, =, <=,,! =,]
Låt oss titta på ett annat exempel,
Antag att du vill ha namn och telefonnummer till medlemmar av personer som har hyrt en film och ännu inte ska returnera 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 denna fråga fungerar
I det här fallet returnerar den inre frågan mer än ett resultat. Ovanstående är typ av T -underfråga y.
Hittills har vi sett två frågor, låt oss nu se ett exempel på trippel fråga !!!
Antag 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 mot anslutning!
När man jämför med Joins är underfrågor enkla att använda och lätta att läsa. De är inte så komplicerade som Joins
Därför används det ofta av SQL-nybörjare.
Men underfrågor har prestandafrågor. Att använda en join istället för en underfråga kan ibland ge dig upp till 500 gånger prestandaförbättring.
Med ett val rekommenderas det att du använder JOIN över en underfråga.
Underfrågor bör endast användas som 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 containerfrågan kallas den yttre frågan.
- Underfrågor är enkla 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 vid testning och felsökning av frågorna.
- MySQL stöder tre typer av underfrågor, skalär-, rad- och tabellundersökningar.
- Scalar-underfrågor returnerar endast en rad och en kolumn.
- Radunderfrågor returnerar bara en enda rad men kan ha mer än en kolumn.
- Tabellundersökningar kan returnera flera rader såväl som kolumner.
- Underfrågor kan också användas i INSERT, UPDATE och DELETE-frågor.
- För prestandafrågor rekommenderas det starkt att använda JOINs istället för underfrågor när det gäller att få data från flera tabeller. Underfrågor bör endast användas med goda skäl.