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

В MySQL заявките защо да използвате присъединяване вместо къде?

Всяка заявка, включваща повече от една таблица, изисква някаква форма на асоцииране за свързване на резултатите от таблица "А" с таблица "Б". Традиционният (ANSI-89) начин за това е да:

  1. Избройте таблиците, включени в разделен със запетая списък в клаузата FROM
  2. Напишете връзката между таблиците в клаузата 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 е по-подробен, но това го прави изричен. Колкото по-ясно е, толкова по-лесно е за разбиране и поддържане.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция MySQL CRC32() – Примери

  2. Свързване на android с MS SQL SERVER 2008

  3. MySQL се присъединява с клауза where

  4. Ограничение на състоянието на MySQL IN

  5. Има ли начин да стартирате MySQL в паметта за тестови случаи на JUnit?