sql >> Databáze >  >> RDS >> Oracle

Jak funguje poddotaz v příkazu select v oracle

Je to jednoduché-

SELECT empname,
       empid,
       (SELECT COUNT (profileid)
          FROM profile
         WHERE profile.empid = employee.empid)
           AS number_of_profiles
  FROM employee;

Je to ještě jednodušší, když použijete spojení tabulky takto:

  SELECT e.empname, e.empid, COUNT (p.profileid) AS number_of_profiles
    FROM employee e LEFT JOIN profile p ON e.empid = p.empid
GROUP BY e.empname, e.empid;

Vysvětlení dílčího dotazu:

V podstatě poddotaz v select získá skalární hodnotu a předá ji hlavnímu dotazu. Dílčí dotaz v select nesmí projít více než jedním řádkem a více než jedním sloupcem, což je omezení. Zde předáváme count na hlavní dotaz, který, jak víme, by byl vždy pouze číslo- skalární hodnota. Pokud hodnota není nalezena, poddotaz vrátí null na hlavní dotaz. Navíc může poddotaz přistupovat ke sloupcům z from klauzule hlavního dotazu, jak je ukázáno v mém dotazu, kde employee.empid je předán z vnějšího dotazu do vnitřního dotazu.

Upravit :

Když použijete poddotaz v select klauzule, Oracle s tím v podstatě zachází jako s levým spojením (můžete to vidět v plánu vysvětlení pro váš dotaz), přičemž mohutnost řádků je pouze jeden napravo pro každý řádek vlevo.

Vysvětlení levého spojení

Levé spojení je velmi užitečné, zvláště když chcete nahradit select poddotaz kvůli jeho omezením. Neexistují zde žádná omezení počtu řádků tabulek na obou stranách LEFT JOIN klíčové slovo.

Další informace naleznete v části Oracle Docs o dílčích dotazech a levém spojení nebo levém vnějším spojení.



  1. Jak vypočítat tržby v MySQL

  2. SQLite a inicializace databáze

  3. Instalace Postgis:geometrie typu neexistuje

  4. Jak odstranit mezery z řetězce v MySQL