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

неявни вътрешни съединения - равни ли са?

Ще разгледам въпроса дали тези неравенства са винаги вярно. Отговорът е "не", не в SQL. При повечето обстоятелства те са еквивалентни. Проблемът възниква при неявното преобразуване на типа.

По-специално, ако a.id е число, а другите колони са низове, тогава имате ситуацията, в която:

1 = '1'        -- true
1 = '1.00'     -- true
'1' = '1.00'   -- false

Можете да видите това на тази db<>цигулка. Би било тривиално да настроите това чрез JOIN s, но тъй като няма да пиша код, който има запетаи в FROM клауза, оставям това упражнение на вас.

На практика идентификаторът, използван за обединения, трябва да бъде от един и същи тип. Не можете дори да декларирате връзка с външен ключ, ако не са. Като изключим тази най-добра практика, двете заявки не са автоматично еквивалентни.

Забележка:Това би било също толкова вярно, ако сте използвали правилно, изрично, стандартно 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. Актуализирайте всички редове на таблицата след определено време

  2. Въпроси за интервю за Oracle

  3. ORA-08177:не може да сериализира достъпа за тази транзакция

  4. Как да нулирам последователност в Oracle?

  5. EF 4, как да добавя частични класове