Oracle
 sql >> база данни >  >> RDS >> Oracle

Как работи подзаявката в оператора select в oracle

Това е просто-

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

Още по-лесно е, когато използвате присъединяване на таблица по следния начин:

  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;

Обяснение за подзаявката:

По същество подзаявка в select получава скаларна стойност и я предава на основната заявка. Подзаявка в select не е разрешено да преминава повече от един ред и повече от една колона, което е ограничение. Тук предаваме count към основната заявка, която, както знаем, винаги би била само число - скаларна стойност. Ако стойност не бъде намерена, подзаявката връща null към основната заявка. Освен това подзаявката може да има достъп до колони от from клауза на основната заявка, както е показано в моята заявка, където employee.empid се предава от външната заявка към вътрешната.

Редактиране :

Когато използвате подзаявка в select клауза, Oracle по същество го третира като ляво присъединяване (можете да видите това в плана за обяснение на вашата заявка), като кардиналността на редовете е само един вдясно за всеки ред вляво.

Обяснение за лявото присъединяване

Лявото присъединяване е много удобно, особено когато искате да замените select подзаявка поради нейните ограничения. Тук няма ограничения за броя на редовете на таблиците от двете страни на LEFT JOIN ключова дума.

За повече информация прочетете Oracle Docs относно подзаявките и лявото присъединяване или лявото външно присъединяване.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PL/SQL програма за отпечатване на данни за служителите

  2. Леко приключение за покупка

  3. PLSQL Вмъкване в с подзаявка и клауза за връщане

  4. Работата ми със 11g Optimizer Stats се отказа от мен – коригирано

  5. listnagg функция?