powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Почему join синтаксис такой не популярный у ораклоидов?
66 сообщений из 66, показаны все 3 страниц
Почему join синтаксис такой не популярный у ораклоидов?
    #33038770
Фотография Sash*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наезжают типа пиши объединения через запятую. Спрашиваю почему? - так же удобнее - отвечают мол стандарт такой.

а нафига оно мне так??

SQL Navigator тоже вот через запятую генерит
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33038786
Фотография hell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sash*наезжают типа пиши объединения через запятую. Спрашиваю почему? - так же удобнее - отвечают мол стандарт такой.

а нафига оно мне так??

SQL Navigator тоже вот через запятую генерит


Не было раньше join ов, потом они работали немного глючновато, вот и предубеждения.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33038794
Фотография Oleg Afanasiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а потом они вообще не нужны
Будут.
В таком виде. :)
Код: plaintext
1.
2.
3.
4.
-----------------------
Вечны налоги,
Смерть и потеря данных.
Что на этот раз?
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33038796
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять же, с плюсиком короче
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33038828
val-demar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У плюсика есть ряд ограничений
FM
Oracle Corporation recommends that you use the FROM clause OUTER JOIN syntax rather than the Oracle join operator. Outer join queries that use the Oracle join operator (+) are subject to the following rules and restrictions, which do not apply to the FROM clause join syntax:
You cannot specify the (+) operator in a query block that also contains FROM clause join syntax.
The (+) operator can appear only in the WHERE clause or, in the context of left-correlation (that is, when specifying the TABLE clause) in the FROM clause, and can be applied only to a column of a table or view.
If A and B are joined by multiple join conditions, then you must use the (+) operator in all of these conditions. If you do not, then Oracle will return only the rows resulting from a simple join, but without a warning or error to advise you that you do not have the results of an outer join.
The (+) operator does not produce an outer join if you specify one table in the outer query and the other table in an inner query.
You cannot use the (+) operator to outer-join a table to itself, although self joins are valid. For example, the following statement is not valid:

-- The following statement is not valid:
SELECT employee_id, manager_id
FROM employees
WHERE employees.manager_id(+) = employees.employee_id;


However, the following self join is valid:

SELECT e1.employee_id, e1.manager_id, e2.employee_id
FROM employees e1, employees e2
WHERE e1.manager_id(+) = e2.employee_id;


The (+) operator can be applied only to a column, not to an arbitrary expression. However, an arbitrary expression can contain one or more columns marked with the (+) operator.
A condition containing the (+) operator cannot be combined with another condition using the OR logical operator.
A condition cannot use the IN comparison condition to compare a column marked with the (+) operator with an expression.
A condition cannot compare any column marked with the (+) operator with a subquery.

If the WHERE clause contains a condition that compares a column from table B with a constant, then the (+) operator must be applied to the column so that Oracle returns the rows from table A for which it has generated nulls for this column. Otherwise Oracle will return only the results of a simple join.

In a query that performs outer joins of more than two pairs of tables, a single table can be the null-generated table for only one other table. For this reason, you cannot apply the (+) operator to columns of B in the join condition for A and B and the join condition for B and C.2) Сталкивался с таким.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33038854
Фотография Sash*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
val-demar
че-то я конец совсем не понял не могли бы пояснить?
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33038931
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неправда, объективно удобнее писать через запятую и соединяя в where. Хотя бы потому, что читать это легче. Так естественнее . ANSI-синтаксис я воспринимаю с очень большим трудом.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33038999
val-demar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Sash

- Операция (+) не выполнит внешнее соединение,если одна таблица указана во внешнем запросе,а другая во внутреннем.
- Операция (+) может применяться только к столбцам,но не к произвольным выражениям.Однако произвольные выражения могут содержать один или несколько столбцов с операцией (+)
- Условие,содержащее операцию (+) нельзя обьединять с другим условием с помощью оператора OR
- Условие не может использовать операцию сравнения IN для сравнения столбца,отмеченного операцией (+) с выражением
- Условие не может сравнивать столбец,отмеченный операцией (+) с подзапросом


З.Ы. Надеюсь ничего не нарушаю ... (По крайней мере правилами форума не запрещено ).
Перевод by РДТЕХ(с) All Rights Reserved
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039129
Scott TigerНеправда, объективно удобнее писать через запятую и соединяя в where. Хотя бы потому, что читать это легче. Так естественнее . ANSI-синтаксис я воспринимаю с очень большим трудом.
Полностью поддерживаю.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039169
Фотография hell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять таки читать - дело привычки. Ну и сделайте full join плюсиком :-)
Я лично стараюсь join делать

"The CBO without stats is like a morning without coffee." T.Kyte
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039197
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже использую join'ы, так нагляднее, можно визуально выделить соединения и ограничения.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039294
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я слышал, что комитет по стандартам учитывает наработки ведущих производителей СУБД, но в плане соединений поступил жестко. Т.е. решили, что эти плюсики и звездочки (MS SQL) не достаточно хороши. Производители СУБД пошли по пути наиболее простого синтаксиса в ущерб строгости.
Может это и не так. Но мне больше нравится синтаксис с JOIN, потому что условие на соединение отделено от условий на выборку. Все-таки в рел алгебре это разные операции, а без JOIN как бы все премешано. Кроме того, естественное соединение (NATURAL JOIN) не требует написания условий. Это вообще упрощает синтаксис. Мне кажется, и проще и читабельнее. Ну, и естественно это уже во всех диалектах SQL, которые соблюдают основные рекомендации стандартов - проще понимать синтаксис других СУБД.
Тоже стараюсь писать JOIN. Просто есть еще 8-ка у некоторых заказчиков, и тада ради общности приходится писать без JOIN.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039671
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hellОпять таки читать - дело привычки. Ну и сделайте full join плюсиком :-)
Я лично стараюсь join делать

"The CBO without stats is like a morning without coffee." T.Kyte

1. Посмотрите на план full outer join. Это простой union all двух outer join'ов. По другому просто нельзя его сделать.

2. Что касаемо любимого многими natural join, то он скрывает имена колонок, что приводит к потерям времени на поиск причины, почему join не работает, а потом выясняется, что в обеих таблицах есть еще одноименные колонки comments, status и еще какие-нибудь, по которым этот идиотский natural join пытается сделать связку. То есть в нормально спроектированной системе natural join практически нельзя использовать.

3. Нельзя (+) использовать с оператором or по понятной логической причине - или внешнее соединение, или еще что-то. В синтаксисе outer join просто нельзя записать такую белиберду. Другое дело, что в дополнительных условиях тоже придется ставить (+), иначе получим простой join. Это ограничение требует хотя бы двух-трехдневного опыта написания запросов с (+), что не так уж и много.

Короче, где-то короче и логичнее писать (+), где-то outer join. Если внешнее соединение не требуется, писать join или where - разницы никакой. Все зависит от привычек и, возможно, багов оракула.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039732
Фотография Sash*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и много этих багов на десятке?
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039737
Владимор Конев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sash*и много этих багов на десятке?И много этих "десяток" в промышленной эксплуатации???
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039800
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scott TigerНеправда, объективно удобнее писать через запятую и соединяя в where. Хотя бы потому, что читать это легче. Так естественнее . ANSI-синтаксис я воспринимаю с очень большим трудом.А мне вот наоборот - АНСИ синтаксис ближе. он ~~ правильней ~~ :-)
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039828
Part
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ явно лучше :-)))

Все дело в привычке, наверное. Хотя, ИМХО, с + читабельность выше.
А natural join действительно фи
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039880
Фотография Sash*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимор Конев Sash*и много этих багов на десятке?И много этих "десяток" в промышленной эксплуатации???
есть
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039883
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, шут с ними, с внешними джоинами, вопрос ещё про inner join. Зачем? Совершенно очевидно, что легче и написать, и прочитать inner join оформленный как select t1.c1, t2.c2 from t1, t2 where t1.c3=t2.c4, чем аналогичное уродство с "стандартным" синтаксисом.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039910
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scott TigerНе, шут с ними, с внешними джоинами, вопрос ещё про inner join. Зачем? Совершенно очевидно, что легче и написать, и прочитать inner join оформленный как select t1.c1, t2.c2 from t1, t2 where t1.c3=t2.c4, чем аналогичное уродство с "стандартным" синтаксисом.
Скот, когда ты соединяешь хотя бы штук пять таблиц, да еще и наклядываешь дополнительные ограничения, у тебя после where такой паравоз получиться, что нифига не удобно читать, будешь все время смотреть где какой таблице какой алиас присвоил, чтобы понять где что с кем соединяется....
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039916
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К тому же никто не заставляет писать слово inner, его ведь можно опустить:)
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039919
Фотография Sash*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scott Tigerselect t1.c1, t2.c2 from t1, t2 where t1.c3=t2.c4, чем аналогичное уродство с "стандартным" синтаксисом.
Код: plaintext
1.
2.
select t1.c1, t2.c2 
from t1, t2 
where t1.c3=t2.c4

Код: plaintext
1.
2.
3.
select 
  t1.c1, t2.c2
from t1
        join t2 on t1.c3=t2.c4

что ж тут страшного такого?
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039942
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алиасы надо не от балды давать, а как сокращённое имя таблицы, и всё будет ОК. Паровоз в where тривиальо обходится, если сначала писать условия на соединение, а потом - условия ограничения выборки.
Слово inner можно не писать, только от этого понятнее не становится...

Короче, ANSI-синтаксис маст дай, спорить на эту тему я не буду, т.к., во-первых, я упёртый баран, а, во-вторых, я в данном случае абсолютно прав.

2 Sash*: гораздо больше времени уходит на то, чтобы понять, из каких таблиц идёт выборка и как они все (тут 2 таблицы, а если их 10-20?) друг с другом соединяются.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039960
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scott TigerАлиасы надо не от балды давать, а как сокращённое имя таблицы, и всё будет ОК.
Ага, а еще лучше вообще не сокращать, тогда сразу видно будет.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039961
Фотография hell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scott TigerАлиасы надо не от балды давать, а как сокращённое имя таблицы, и всё будет ОК. Паровоз в where тривиальо обходится, если сначала писать условия на соединение, а потом - условия ограничения выборки.
Слово inner можно не писать, только от этого понятнее не становится...

Короче, ANSI-синтаксис маст дай, спорить на эту тему я не буду, т.к., во-первых, я упёртый баран, а, во-вторых, я в данном случае абсолютно прав.


Самое интересное в баранах, что оба упертых, и оба абсолютно правы. Оттого в процессе эволюции у них появились очень твердые лбы.

ЗЫ: Спор ни о чем, можете еще и о zsh и bash поспорить.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33039966
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scott TigerКороче, ANSI-синтаксис маст дай, спорить на эту тему я не буду, т.к., во-первых, я упёртый баран, а, во-вторых, я в данном случае абсолютно прав.Поддерживаю. (+) forever :)
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33040085
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пошли религиозные войны.

У ораклоидов со стажем синтаксис join вызывает неприятие своей многословностью и неоднозначностью как в случае с natural и full outer join. Еще и по старинке привыкли работать. Вопрос "почему" в этом случае не должен вставать.

Предлагаю больше не писать в топик.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33040142
о
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
о
Гость
Потому что начинает/ло большинство всё ещё с 8-ки, а там никаких джойнов нет. Привыкнув же к одному синтаксису, на второй всегда смотришь косо, особенно если явных плюсов в нём нет. Когда придёт новое поколение программёров, то скорей всего, все будут пользоваться джойнами и через некоторое время, возможно, (+) превратится в нечто вроде "недокументированной фичи для эстетов и гуру"... :)
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33040180
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помимо всего прочего, постоянные сообщения о багах ANSI JOIN-а в 9-ке
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33040742
MW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIУ ораклоидов со стажем синтаксис join вызывает неприятие своей многословностью и неоднозначностьюНе соглашусь с вами... Я начал работать с 5-й версии Oracle (год так 93-й) и получив в распоряжение ANSI-синтаксис сейчас пользуюсь только им.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33040765
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MW AIУ ораклоидов со стажем синтаксис join вызывает неприятие своей многословностью и неоднозначностьюНе соглашусь с вами... Я начал работать с 5-й версии Oracle (год так 93-й) и получив в распоряжение ANSI-синтаксис сейчас пользуюсь только им.

Из любого правила есть исключения
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33041322
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы сказал что join не популярен среди старых, так сказать, опытных ораклоидов :) А людям, например, работающим не только с ораклом ближе join.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33041533
alex-lsя бы сказал что join не популярен среди старых, так сказать, опытных ораклоидов :)
Пердунов?

Scott TigerКороче, ANSI-синтаксис маст дай, спорить на эту тему я не буду, т.к., во-первых, я упёртый баран, а, во-вторых, я в данном случае абсолютно прав.
Точно.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33041539
Фотография Oleg Afanasiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AI...в этом случае не должен вставать.

Это точно :)
Я вот например сколько пытался с ним разобраться - не идёт и всё тут.
Громоздкий какой-тоон...
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33041563
Alex_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg AfanasievЯ вот например сколько пытался с ним разобраться - не идёт и всё тут.
Громоздкий какой-тоон...

Поддерживаю !

Я тоже пытался, но так и не получилось освоить join синтаксис. Когда программу с Interbase на Oracle переводил просто написал себе шпору и пользовался ей.

А к чему весь сыр бор? Сейчас есть два вида синтаксиса и хорошо. Кто чем хочет тем и пользуется.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33041762
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AI
1. Посмотрите на план full outer join. Это простой union all двух outer join'ов. По другому просто нельзя его сделать.

Тем более видно, что синтаксис full outer join изящнее простого union all двух outer join'ов. А это имеет все-таки значение, особеннок когда текст запроса и без того здоровый.

AI
выясняется, что в обеих таблицах есть еще одноименные колонки comments, status и еще какие-нибудь, по которым этот идиотский natural join пытается сделать связку. То есть в нормально спроектированной системе natural join практически нельзя использовать.

Не известно, что нормальней давть атрибутам разных таблов одинаковые имена или все таки разные. Например, тада уже надо было бы давть всем суррогатным ключам одинаковое имя - ID. Но что тогда получится? А если им не давать, но другим не давать - не последовательно. Стиль как бы страдает. Двойные стандарты.

AI
Это ограничение требует хотя бы двух-трехдневного опыта написания запросов с (+), что не так уж и много.

А ради чего страдать три дня? Кроме того, например, если три таблы, то результат зависит в общем случае от порядка операций соединения, а where и запятая явно порядка не предполгает. Тогда тоже на проверки время потратить побольше придется или на изучение особенностей СУБД.

UNION - операция сразу ясно про что, если смотреть на рел алгебру. Соединение тем более самая что ни на есть рел операция, и уж достойна своего ключевого слова, а не просто запятой.

Я не думаю, что всем нужно переходить на JOIN, но и сказать что он хуже во всех отношениях, мне кажется, тоже нельзя.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33041825
HX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Тем более видно, что синтаксис full outer join изящнее простого union all двух outer join\'ов. А это имеет все-таки значение, особеннок когда текст запроса и без того здоровый


Недавно я плодил топик о очень долго удивлялся такой лаже которую плодит full join.
тут
и мой случай далеко не единичен.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33042092
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HX
и мой случай далеко не единичен.

В том числе и я создавал топик про проблемы. Но это не синтакчис, а баги реализации. Так есть и другие баги. Но мы же не можем под них тока посдстраиваться и не думать о светлом будующем?
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33231792
Фотография hell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как забавно кстати)


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
Connected to Oracle9i Enterprise Edition Release  9 . 2 . 0 . 5 . 0  
Connected as main


SQL> select * from dual;

DUMMY
-----
X

SQL> select * from dual x inner join dual y on x.dummy=y.dummy;

DUMMY DUMMY
----- -----
X     X

SQL> select * from(select * from dual x inner join dual y on x.dummy=y.dummy);

QCSJ_C004000 QCSJ_C004001
------------ ------------
X            X

SQL> select * from dual x, dual y where x.dummy=y.dummy;

DUMMY DUMMY
----- -----
X     X

SQL> select * from (select * from dual x, dual y where x.dummy=y.dummy);

select * from (select * from dual x, dual y where x.dummy=y.dummy)

ORA- 00918 : column ambiguously defined

SQL> 

"The CBO without stats is like a morning without coffee." T.Kyte
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33519377
Andrew Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)Помимо всего прочего, постоянные сообщения о багах ANSI JOIN-а в 9-ке
Если бы только в девятке...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
SQL> connect max/...@...
Соединено.
SQL>
SQL> select * from v$version where rownum =  1 ;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release  10 . 1 . 0 . 3 . 0  - Prod

SQL> select  1 
   2     from dual a
   3     left outer join dual b
   4       on a.dummy = b.dummy
   5     full outer join dual c
   6       on a.dummy = c.dummy;

          1 
----------
          1 

SQL> -- Однако:
SQL> 
SQL> select  1 
   2     from dual a
   3     left outer join user_tab_columns b
   4       on a.dummy = b.column_name
   5     full outer join user_cons_columns c
   6       on a.dummy = c.column_name;
  left outer join user_tab_columns b
                  *
ошибка в строке  3 :
ORA- 00918 : column ambiguously defined


SQL> connect max/...@...
Соединено.
SQL>
SQL> select * from v$version where rownum =  1 ;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release  10 . 1 . 0 . 4 . 0  - Prod

SQL> select  1 
   2     from dual a
   3     left outer join user_tab_columns b
   4       on a.dummy = b.column_name
   5     full outer join user_cons_columns c
   6       on a.dummy = c.column_name;
  left outer join user_tab_columns b
                  *
ошибка в строке  3 :
ORA- 00918 : столбец определен неоднозначно
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33519729
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Писать "left outer join " и т.п. просто лениво. Мне быстрее (+). Кроме того в традиционном синтаксисе в секции from легче идентифицировать таблицы.
Чтобы условия соединения легче читались, просто объединяю их в блоки.
А главное - новый синтаксис плохо отлажен, ошибок много обнаруживается. Так что пока действую по старинке.

Переходить на ANSI SQL имеет смысл, если нужно поддержать несколько СУБД, но это пока из мира грёз, или планируется переход на другую СУБД.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33520033
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sash*отвечают мол стандарт такой.
Это, кстати, аргумент безотносительно всего прочего.

Sash*а нафига оно мне так??
А нафига Вы вот такой прочим членам команды?

Наезжают обычно не просто от желания наехать, а потому что кому-то мешает. Можно договариваться, но именно договариваться, а не "буду как хочу".

Sash*Почему join синтаксис такой не популярный у ораклоидов?
Правильно, видимо, ответить "так исторически сложилось".

Если пороетесь, некоторое время назад в "Сравнении СУБД" эта тема обсуждалась на нескольких страницах. Краткие выводы:

1. Разницы с точки зрения возможности написать тот или иной селект практически нет.

2. Можно наговорить кучу аргументов в ту или иную сторону, но по большому счету все это - вопрос привычки и вкусов.

3. В любом синтаксисе можно писать хорошо и можно писать плохо.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33582258
Фотография Sash*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разве для настоящих профессионалов есть разница как написан запрос?

(+) читается гораздо хуже
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33582261
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sash*разве для настоящих профессионалов есть разница как написан запрос?
Что Вы называете разницей? Если способность его понять и с ним работать - нет. А если затраченное на это время - да.

Sash*(+) читается гораздо хуже
Чушь.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33582468
Фотография miner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда-то в отрочестве, давным давно приходилось работать с ms access и с join-ами, вспоминается как кошмар, переход на = и (+) стал явным облегчением (тем более что в 7-ке никаких join небыло).
Насчёт читаемости и удобства - чушь полная, очень часто соединять приходится не таблицу, а подзапросы на пол листа, в этом случае старое доброе "=" лучше всего. (можно конечно через with, но глючит ведь страшно).
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33582501
Фотография dmidek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда у тебя что - то нормально получается, нет никакой мотивации искать альтернативу, особенно если знаешь , что эта альтернатива еще неотлажена и имеет много багов. FULL OUTER JOIN - это ИМХО мощное дело. Если вычистят от багов , будет нормально. NATURAL JOIN - это ИМХО костыли для лентяев, причем очень опасные. А INNER, LEFT, RIGHT - ну зачем ?
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33582675
dmitrypanin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sash*(+) читается гораздо хуже
позвольте с вами не согласиться
я по образованию математик, может быть поэтому я не понимаю зачем вообще нужны джойны, если они ограничивают написание запросов?
поясню: когда вы пишите
Код: plaintext
select * from a,b where a.id=b.id
то сразу ясно, что осуществляется выборка из произведения таблиц a и b, затем на них налагается связь и результат выводится. Результатом будет (2-1) мерное пространство, обычно именно оно и нужно.
если вы пишите через джойны, то вы выбираете изначально из одномерного, а не из двумерно пространства - ваши возможности уже и непонятно зачем вы себя ограничили.
поясню на примере: пусть есть таблица x_axis с полем value и y_axis с полем value. Произведение этих таблиц - суть евклидова плоскость. Если на этой плоскости задать связь, например
Код: plaintext
select x.value,y.value from x_axis,y_axis where y.value =  2 *x.value +  5 
, то результатом будет одномерное пространство, в данном случае прямая.
На мой взгляд естественно сначала задавать общее пространство, а затем налагать ограничения на него, а не наоборот. Именно поэтому, ИМХО, и = и (+) гораздо нагляднее
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33582820
Фотография hell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как раз таки ANSI синтаксис _явно_ задает способ пересечения множеств. В математике множеств есть больше операторов чем банальное произведение и фильтр.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33582854
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitrypanin
то сразу ясно, что осуществляется выборка из произведения таблиц a и b,

Как же сразу ясно что из произведения? Запятая - просто список таблиц. А произведение как бы другой знак в матеметике. Так что не сразу ясно, а несколько позже, когда станет известно как нужно интерпретировать запятые. JOIN - соединение в рел алгебре - есть такая алгебраическая операция. Тут сразу ясно.


dmitrypanin
если вы пишите через джойны, то вы выбираете изначально из одномерного, а не из двумерно пространства - ваши возможности уже и непонятно зачем вы себя ограничили.

Причем здесь размерности каких-то пространств? В теории групп есть свои опреации, в рел алгебре свои (над отношениями, а не над пространставми никакими или плоскостями). Вы же в теории групп не будете им про размерноти пространств мысли подкидывать, заставлять отказываться от групповых операций. А чем рел алгебра хуже?

dmitrypanin
Произведение этих таблиц - суть евклидова плоскость.

Вы вместо рел алгебры хотите линейную в РБД втюхать? Или ваще геометрию какую-то там? Уверены, что от этого там больше толку будет?
Кодд был по образованию математик, да и туча других исследователей там прошлась. Рел алгебру заменять чем либо вроде не нашли оснований. И сама эта алгебра способствовала успеху РМД. Более того, подобные алгебры отдельные авторы пытались (но пока не получилось) втюхать в ООМД например.А Вы хотите это все заменить? Почему?

dmitrypanin
На мой взгляд естественно сначала задавать общее пространство, а затем налагать ограничения на него, а не наоборот.

Но возможно, кто-то там на западе считает более естествееным прописывать операции рел алгебры, причем не сначала и потом а сразу. Чем это плохо? По-моему - тоже вариант.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33582958
mikky33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmitrypanin Sash*(+) читается гораздо хуже
позвольте с вами не согласиться
я по образованию математик, может быть поэтому я не понимаю зачем вообще нужны джойны, если они ограничивают написание запросов?
поясню: когда вы пишите
Код: plaintext
select * from a,b where a.id=b.id
то сразу ясно, что осуществляется выборка из произведения таблиц a и b, затем на них налагается связь и результат выводится.
Присоединяюсь.
Мне всегда было удобнее считать join как ограничение на декартово произведение.

В таком стиле внешний джойн надо писать вместо
Код: plaintext
select * from a,b where a.id=b.id(+) 
что-то вроде этого
Код: plaintext
select * from a,b(+) where a.id=b.id 
Но увы...
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33582963
Sergey M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, все-таки синтаксис (+), имхо, намного лучше т.к. лаконичнее.
вот напирмер, такой запросец

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
/* Formatted on 2006/03/06 08:52 (Formatter Plus v4.8.0) */
SELECT VS.sid,
       VS.ownerid,
       VS.osuser,
       VRS.waits,
       VRS.writes,
       VRN.name
  FROM v$Session VS,
       v$Transaction VT,
       v$Rollstat VRS,
       v$RollName VRN
 where VS.Saddr  = VT.Ses_addr(+)
   and VT.XidUsn = VRS.usn(+)
   and VRS.usn   = VRN.Usn(+)

Но, если написать используя стандартный синтаксис Join-а такая фиготень
получится чувствую... А так - коротко и ясно .
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33583269
Stax.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey M
Но, если написать используя стандартный синтаксис Join-а такая фиготень
получится чувствую... А так - коротко и ясно .
А вот такое если в старом синтаксисе,
"такая фиготень получится чувствую... А так - коротко и ясно"
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
SQL> select * from tt1;

      ID1 NAME1
--------- ----------
         1  ooooo
         2  ddddd
         3  ttttt

SQL> select * from tt2;

      ID2 NAME2
--------- ----------
         2  DDDDD
         3  TTTTT
         4  CCCCC

SQL> select * from tt3;

      ID3 NAME3
--------- ----------
         3  тттттт
         4  ччччч
         5  ппппп
select * from
tt1 full outer join tt2 on id1=id2
    full outer join tt3 on id1=id3 or id2=id3
/
SQL> /

      ID1 NAME1            ID2 NAME2            ID3 NAME3
--------- ---------- --------- ---------- --------- ----------
         2  ddddd               2  DDDDD
         3  ttttt               3  TTTTT               3  тттттт
         1  ooooo
                              4  CCCCC               4  ччччч
                                                   5  ппппп

......
stax
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33583281
KOHb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax.
Но, если написать используя стандартный синтаксис Join-а такая фиготень
получится чувствую... А так - коротко и ясно .
А вот такое если в старом синтаксисе,
"такая фиготень получится чувствую... А так - коротко и ясно"
[/quot]
full outer join фпорядке исключения мы признаем
а все остальные джоины - строго нахЪ
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33583492
Stax.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOHbfull outer join фпорядке исключения мы признаем
а все остальные джоины - строго нахЪ
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select * from 
 tt1 left outer join tt2 on id1=id2
     left outer join tt3 on id1=id3
/
SQL> /

      ID1 NAME1            ID2 NAME2            ID3 NAME3
--------- ---------- --------- ---------- --------- ----------
         3  ttttt               3  TTTTT               3  тттттт
         1  ooooo
         2  ddddd               2  DDDDD
....
stax
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33616327
Ди_ма
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select t1.t,t2.t,t3.r,t2.d,t3.d
from t1
left join t2 on t1.r=t2.r and t2.d=
                                 (select max(tt.d) from t2 tt
                                  where tt.dd=
                                   (select max(ttt.dd)
                                   from t2 ttt 
                                   where ttt.dd<=параметр))
inner join t3 on t1.r=t3.r and t3.d=
                                 (select max(tt.d) from t3 tt
                                  where tt.dd=
                                   (select max(ttt.dd)
                                   from t3 ttt 
                                   where ttt.dd<=параметр))
where t2.d<t3.d
При выполнении запроса без условия where t2.d<t3.d , допустим , выводится
такая запись
t1.t t2.t t3.r t2.d t3.d
12 100 250 01.08.1998 01.05.1997
При применении условия
t1.t t2.t t3.r t2.d t3.d
12 100 250 01.05.1997
Хотя , насколько я понимаю, запись должна была отфильтроваться условием where t2.d<t3.d
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33617626
Nick-SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мои 5 копеек:
Несколько проще написать код для динамической генерации запросов, если список таблиц тоже может меняться в зависимости от параметров, не используя join.
Думаю, не так уж и важно, какой синтаксис использовать, главное, всех девелоперов в конторе заставить писать единообразно.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33638603
Nagel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Scott Tiger...Короче, ANSI-синтаксис маст дай ...
(+) 1
Нарвался: через left outer join на одну из таблиц шел TABLE ACCESS FULL вместо TABLE ACCESS BY INDEX ROWID. Никакими хинтами отбить не удалось. Через (+) все замечательно.
Раньше работало хорошо, планы поползли после небольших переделок.
Исправляюсь....
Зарекся....
ANSI-синтаксис ффтоппкку
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33638789
Alex Roudnev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AI
2. Что касаемо любимого многими natural join, то он скрывает имена колонок, что приводит к потерям времени на поиск причины, почему join не работает, а потом выясняется, что в обеих таблицах есть еще одноименные колонки comments, status и еще какие-нибудь, по которым этот идиотский natural join пытается сделать связку. То есть в нормально спроектированной системе natural join практически нельзя использовать.

.

Я бы сказал, что все может быть гораздо веселее, если один автор использует такое, а другой полгода спустя добавит поле comment во вторую табличку. Догадаться, что безобидное добавление поля может что то сломать, не очень сложно (достаточно написать в select колонку без имени таблички, или еще лучше - в том же php выборки из строки по курсору идут по имени колонки, и невозможно выбрать если выдалось два comment), но все равно будет весело.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #33638891
Sergey M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Roudnev AI
2. Что касаемо любимого многими natural join, то он скрывает имена колонок, что приводит к потерям времени на поиск причины, почему join не работает, а потом выясняется, что в обеих таблицах есть еще одноименные колонки comments, status и еще какие-нибудь, по которым этот идиотский natural join пытается сделать связку. То есть в нормально спроектированной системе natural join практически нельзя использовать.

.

Я бы сказал, что все может быть гораздо веселее, если один автор использует такое, а другой полгода спустя добавит поле comment во вторую табличку. Догадаться, что безобидное добавление поля может что то сломать, не очень сложно (достаточно написать в select колонку без имени таблички, или еще лучше - в том же php выборки из строки по курсору идут по имени колонки, и невозможно выбрать если выдалось два comment), но все равно будет весело.
Если простое добавление колонки приводит к неработоспособности системы это говорит лишь о том система спроектирована (или реализована) неверно (слово неверно не подходит, конечно, правильнее сказать не вполне грамотно). Не так сложно в процессе проектирования писать код таким образом что он не будет ломаться изза добавления новых колонок. Для этого достаточно придерживаться некоторых правил и проблем подобного рода не будет. Но как минимум:
Код: plaintext
1.
2.
3.
4.
1. В списке полей Select всегда указывать имя таблицы/алиас
2. В списке полей Select всегда явно перечислять все нужные поля (не писать a.*
3. Не использовать Natural Join для соединения таблиц
4. Осторожно использовать %rowtype
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Почему join синтаксис такой не популярный у ораклоидов?
    #40009192
shplace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hell
Sash*наезжают типа пиши объединения через запятую. Спрашиваю почему? - так же удобнее - отвечают мол стандарт такой.

а нафига оно мне так??

SQL Navigator тоже вот через запятую генерит



Не было раньше join ов, потом они работали немного глючновато, вот и предубеждения.

А в каком году появился join?
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #40009221
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shplace
А в каком году появился join?
в 9i
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #40009307
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз апнули, пролистал по диагонали - вроде еще не упоминали, что с анси синтаксисом порой сложней хинтовать становится(он под капотом в нативный трансформируется перед построением плана) https://jonathanlewis.wordpress.com/2010/12/03/ansi-argh/
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #40009311
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hell
"The CBO without stats is like a morning without coffee." T.Kyte
Неудачный пример.

То же самое, если бы он звучал так:

"The CBO without stats is like a morning without vodka ."
или так:
"The CBO without stats is like a morning without beer ."
или так:
"The CBO without stats is like a morning without tee ."

Хотел сказать об этом Тому в 2015, когда он выступал на конференции.
Но он выглядел настолько усталым и равноудаленным от всего, что я этого делать не стал.
И как раз в тот же год своего 5--ти летия Кайт отошел от активной деятельности.

Я не пью кофе по утрам и прекрасно себя при этом чувствую.
Водку и пиво по утрам я тоже не пью. Пью воду и чай :-)

Наверное, вот такой вариант был бы точнее:
"The CBO without stats is like a morning without water ."
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #40009318
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринский,

Отвечать на комменты 2006 года, наверное, уже не так актуально
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #40009377
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уже не так актуально

"Не убий", "не укради", "не используй анси".

Кажется, этим советам уже более 1000 лет. Не уверен.
...
Рейтинг: 0 / 0
Почему join синтаксис такой не популярный у ораклоидов?
    #40009554
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
dmdmdm,

Уже много воды утекло. С тех пор(ещё до full outer join и partitioned join) оракл прекратил развивать native синтаксис, в то время как активно продолжают развивать ansi
...
Рейтинг: 0 / 0
66 сообщений из 66, показаны все 3 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Почему join синтаксис такой не популярный у ораклоидов?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]