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 –

MySQL Underfråga

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

MySQL Underfråga

Låt oss se hur den här frågan fungerar

MySQL Underfråga

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 );


MySQL Underfråga

Låt oss se hur den här frågan fungerar

MySQL Underfråga

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 -

MySQL Underfråga

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

Underfrågor kontra sammanfogningar

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.