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

Вложените скоби в клаузата FROM валиден ли е синтаксисът на Oracle SQL?

Законен е синтаксисът да използвате скоби в клауза за свързване в FROM и скобите do имат ефект.

Помислете за тази заявка:

WITH table_a AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 30),
     table_b as ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 20),
     table_c AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 10)
SELECT a.id, b.id, c.id
FROM   table_a a left join ( table_b b inner join table_c c ON c.id = b.id ) ON b.id = a.id 
ORDER BY 1,2,3;

Скобите ви позволяват да направите вътрешно свързване на таблици b и c и след това външно присъединяване към a .

Без скобите опитът да се изрази това като ляво съединение би бил невъзможен. Вие също няма да получите редове 11-30 от таблица a или иначе редове 11-20 на таблица c ще бъде null s (в зависимост от това как сте се опитали да го направите).

Имайте предвид, че горната заявка е еквивалентна на:

WITH table_a AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 30),
     table_b as ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 20),
     table_c AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 10)
SELECT a.id, b.id, c.id
FROM   table_b b inner join table_c c on c.id = b.id right join table_a a on a.id = b.id 
ORDER BY 1,2,3;

, което не изисква скоби. Така че, ако наистина искате да избегнете използването на скоби в FROM клауза, обикновено можете да го направите. Лично аз предпочитам LEFT JOIN метод със скоби вместо RIGHT JOIN .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да премахнете нулата, когато цялата част е нула в Oracle

  2. PreparedStatement се изпълнява успешно в oracle, но хвърля изключение в Microsoft SQL

  3. Oracle SQL GROUP BY не е помощен израз за GROUP BY

  4. Свържете се с Oracle чрез SSMA

  5. Хибернация:Генератор на ID, използващ инкремент и Oracle Schema