Я поддерживаю хранимые процедуры ( MySQL имеет поддержку хранимых процедур с 5.0 ) с точки зрения безопасности - преимущества -
Недостатки -
В зависимости от которого идет сторона "="" (+), она обозначает ЛЕВОЕ ВНЕШНЕЕ или ПРАВИЛЬНОЕ Внешнее объединение (в этом случае, это - левое внешнее объединение). Это - старый синтаксис Oracle, который иногда предпочитается людьми, которые изучили его сначала, так как им нравится этот, это делает их код короче.
Лучший для не использования его, хотя, для пользы удобочитаемости.
Как другие заявили, (+)
, синтаксис является устаревшим, собственным синтаксисом, что Oracle раньше в течение многих лет выполняла те же результаты как OUTER JOIN
. Я предполагаю, что они приняли свой собственный синтаксис, прежде чем SQL-92 выбрал стандартный синтаксис.
эквивалентный запрос к тому, который Вы показали, с помощью стандартного синтаксиса SQL OUTER JOIN
(который теперь поддерживается всеми основными реализациями RDBMS) был бы следующим:
SELECT
Table1.Category1,
Table1.Category2,
COUNT(*) AS Total,
COUNT(Table2.Stat) AS Stat
FROM Table1
LEFT OUTER JOIN Table2 ON (Table1.PrimaryKey = Table2.ForeignKey)
GROUP BY Table1.Category1, Table1.Category2;
, Что означает:
Table1
включены в результат запроса. Table2
, включайте те строки (повторяющий содержание от Table1
, если существует несколько строк соответствия в Table2
). Table2
, используйте NULL
для всех из [1 110] столбцы в результате запроса. Это - не ANSI, оставленный нотацию внешнего объединения. Начиная с Oracle9i, запутывающий синтаксис внешнего объединения с помощью †(+) ’ нотация был заменен синтаксисом внешнего объединения ISO 99.