sql >> Databasteknik >  >> RDS >> Oracle

Hur fungerar Subquery i select-satsen i Oracle

Det är enkelt-

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

Det är ännu enklare när du använder en tabellkoppling så här:

  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;

Förklaring till underfrågan:

I huvudsak en underfråga i en select får ett skalärt värde och skickar det till huvudfrågan. En underfråga i select får inte passera mer än en rad och mer än en kolumn, vilket är en begränsning. Här skickar vi ett count till huvudfrågan, som, som vi vet, alltid bara skulle vara ett tal - ett skalärt värde. Om ett värde inte hittas returnerar underfrågan null till huvudfrågan. Dessutom kan en underfråga komma åt kolumner från from klausul i huvudfrågan, som visas i min fråga där employee.empid skickas från den yttre frågan till den inre frågan.

Redigera :

När du använder en underfråga i en select Oracle behandlar den i huvudsak som en vänsterkoppling (du kan se detta i förklaringsplanen för din fråga), med kardinaliteten för raderna bara en till höger för varje rad till vänster.

Förklaring till vänsteranslutningen

En vänsterkoppling är väldigt praktisk, speciellt när du vill ersätta select delfråga på grund av dess begränsningar. Det finns inga begränsningar här för antalet rader i tabellerna på vardera sidan av LEFT JOIN nyckelord.

För mer information läs Oracle Docs om delfrågor och vänsterkoppling eller vänster yttre koppling.



  1. SQL-server ignorera skiftläge i ett where-uttryck

  2. Forcera indexanvändning i Oracle

  3. Guide för CTE i SQL Server

  4. Hur man hämtar två kolumndata i A,B-format i Oracle