Python не имеет тех же типов как C/C++, который, кажется, Ваш вопрос.
Попытка это:
>>> i = 123
>>> type(i)
<type 'int'>
>>> type(i) is int
True
>>> i = 123456789L
>>> type(i)
<type 'long'>
>>> type(i) is long
True
>>> i = 123.456
>>> type(i)
<type 'float'>
>>> type(i) is float
True
различие между интервалом и долго уходит в Python 3.0, все же.
AFAIK, нотация (+)
присутствует только для обратной совместимости, потому что Oracle представила ее до того, как был введен стандарт ANSI для объединений. Он специфичен для Oracle, и вам следует избегать его использования в новом коде, когда доступна эквивалентная версия, соответствующая стандартам.
Похоже, между ними есть различия, а нотация (+)
имеет ограничения, которые синтаксис соединения ANSI не имеет. Сами Oracle рекомендуют не использовать нотацию (+)
.
Полное описание здесь, в Справочнике по языку Oracle® Database SQL.
11g Release 1 (11.1) :
Oracle рекомендует использовать синтаксис предложения
FROM
OUTER JOIN
вместо оператора соединения Oracle. Запросы внешнего соединения, использующие оператор соединения Oracle(+)
, подчиняются следующим правилам и ограничениям, которые не применяются к синтаксису предложенияFROM
OUTER JOIN
:
- Вы не можете указать оператор
(+)
в блоке запроса, который также содержит синтаксис соединения предложенияFROM
.- Оператор
(+)
может появляться только в предложенииWHERE
или в контексте левой корреляции (при указании предложенияTABLE
) в предложенииFROM
и может применяться только в столбец таблицы или представления.- Если A и B соединены несколькими условиями соединения, вы должны использовать оператор
(+)
во всех этих условиях. Если вы этого не сделаете, Oracle Database вернет только строки, полученные в результате простого соединения, но без предупреждения или ошибки, чтобы сообщить вам, что у вас нет результатов внешнего соединения.(+) Оператор
не создает внешнее соединение, если вы указываете одну таблицу во внешнем запросе, а другую таблицу во внутреннем запросе.- Вы не можете использовать оператор
(+)
для внешнего соединения таблицу к себе, хотя самостоятельные соединения допустимы.Например, следующий оператор недопустим:
SELECT employee_id, manager_id ОТ сотрудников ГДЕ employee.manager_id (+) = employee.employee_id;
Однако следующее самосоединение допустимо:
SELECT e1.employee_id, e1.manager_id, e2.employee_id ОТ сотрудников e1, сотрудников e2 ГДЕ e1.manager_id (+) = e2.employee_id;
- Оператор
(+)
может применяться только к столбцу, а не к произвольному выражению. Однако произвольное выражение может содержать один или несколько столбцов, помеченных оператором(+)
.- Условие
WHERE
, содержащее оператор(+)
, не может можно комбинировать с другим условием с помощью логического оператораOR
.- В условии
WHERE
нельзя использовать условие сравненияIN
для сравнения столбца, помеченного] (+)
оператор с выражением.Если предложение
WHERE
содержит условие, которое сравнивает столбец из таблицы B с константой, тогда к столбцу должен быть применен оператор(+)
, чтобы Oracle возвращал строки из таблицы A, для которых он сгенерировал пустые значения для этого столбца. В противном случае Oracle возвращает только результаты простого соединения.В запросе, который выполняет внешние соединения более чем двух пар таблиц, одна таблица может быть таблицей, сгенерированной нулевым значением, только для одной другой таблицы. По этой причине вы не можете применить оператор
(+)
к столбцам B в условии соединения для A и B и условии соединения для B и C. См.SELECT
для синтаксис для внешнего соединения.
Я согласен с ответом Тони Миллера и хотел бы добавить, что есть также несколько вещей, которые вы НЕ можете делать с (+) синтаксисом:
b.id = a .id (+) И c.id = a.id (+)
не является допустимым предложением) Нотация все еще поддерживается в Oracle 10 (и, как мне кажется, 11). Его использование считается «старомодным», а также не так переносимо, как синтаксис ANSI JOIN. Он также считается гораздо менее читаемым, хотя, если вы пришли из фона +, привыкание к ANSI JOIN может занять некоторое время. Перед тем как бросать кирпичи в Oracle, важно знать, что они разработали свой синтаксис + до того, как комитет ANSI завершил определения для объединений.
Нет никакой разницы в производительности; они выражают то же самое.
Редактировать: Под «не такой переносимый» я должен был сказать «поддерживается только в Oracle SQL»