Oracle
 sql >> Baza danych >  >> RDS >> Oracle

niejawne sprzężenia wewnętrzne - czy są równe?

Zajmę się pytaniem, czy te nierówności są zawsze PRAWDA. Odpowiedź brzmi „nie”, nie w SQL. W większości przypadków są one równoważne. Problem pojawia się przy niejawnej konwersji typu.

W szczególności, jeśli a.id jest liczbą, a pozostałe kolumny są ciągami, wtedy mamy sytuację, w której:

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

Możesz zobaczyć to na tych db<>skrzypcach. Byłoby trywialne skonfigurować to za pomocą JOIN s, ale ponieważ nie zamierzam pisać kodu, który ma przecinki w FROM klauzula, pozostawię to ćwiczenie tobie.

W praktyce identyfikator używany do złączeń powinien być tego samego typu. Nie możesz nawet zadeklarować relacji klucza obcego, jeśli tak nie jest. Pomijając tę ​​najlepszą praktykę, te dwa zapytania nie są automatycznie równoważne.

Uwaga:byłoby to równie prawdziwe, gdybyś użył właściwego, wyraźnego, standardowego JOIN składnia, której gorąco zachęcam do nauki i używania wyłącznie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak odjąć lata od sysdate

  2. Kryteria hibernacji dla uzyskania rekordów, które mają rok 2012

  3. Uwzględnić nazwy kolumn w wynikach zapytania Oracle SQL?

  4. Chcesz utworzyć numery seryjne

  5. Mapowanie klucza obcego z niestandardową nazwą kolumny