Всяка заявка, включваща повече от една таблица, изисква някаква форма на асоцииране за свързване на резултатите от таблица "А" с таблица "Б". Традиционният (ANSI-89) начин за това е да:
- Избройте таблиците, включени в разделен със запетая списък в клаузата FROM
-
Напишете връзката между таблиците в клаузата WHERE
SELECT * FROM TABLE_A a, TABLE_B b WHERE a.id = b.id
Ето заявката, пренаписана с помощта на синтаксис ANSI-92 JOIN:
SELECT *
FROM TABLE_A a
JOIN TABLE_B b ON b.id = a.id
От гледна точка на производителността:
Където се поддържа (Oracle 9i+, PostgreSQL 7.2+, MySQL 3.23+, SQL Server 2000+), няма полза за производителността от използването на който и да е синтаксис пред другия. Оптимизаторът ги вижда като една и съща заявка. Но по-сложните заявки могат да се възползват от използването на синтаксис ANSI-92:
- Възможност за управление на реда на ПРИСЪЕДИНЯВАНЕ – реда, в който таблиците се сканират
- Възможност за прилагане на критерии за филтриране на таблица преди присъединяване
От гледна точка на поддръжката:
Има много причини да използвате синтаксис ANSI-92 JOIN над ANSI-89:
- По-четливо, тъй като критериите JOIN са отделни от клаузата WHERE
- По-малко вероятно е да пропуснете критериите за JOIN
- Последователна поддръжка на синтаксис за JOIN типове, различни от INNER, което прави заявките лесни за използване в други бази данни
- Клаузата WHERE служи само за филтриране на декартовия продукт на присъединените таблици
От гледна точка на дизайна:
Синтаксисът на ANSI-92 JOIN е шаблон, а не антимодел:
- Целта на заявката е по-очевидна; колоните, използвани от приложението, са ясни
- Спазва правилото за модулност за използване на стриктно въвеждане, когато е възможно. Изричното е почти универсално по-добро.
Заключение
Липсата на познаване и/или комфорт, не виждам никаква полза от продължаването да използвам клаузата ANSI-89 WHERE вместо синтаксиса ANSI-92 JOIN. Някои може да се оплакват, че синтаксисът на ANSI-92 е по-подробен, но това го прави изричен. Колкото по-ясно е, толкова по-лесно е за разбиране и поддържане.