Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается... / 17 сообщений из 17, страница 1 из 1
08.02.2014, 13:21:05
    #38554360
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
Потребовалось воткнуть еще один джоин в и без того насыщенную списками таблицу (результ то бишь) и воткнул по схеме на атрибуте = атрибут потому что еще условие надо было добавить. Компилятор завопил про двусмысленность одного из атрибутов, я ничего сперва не понял. Выше есть using(), ниже есть по атрибутам с тем же самым атрибутом - одним джоином больше, какая разница. Оказалось есть. Юсинги видимо должны быть в одной стае, а по-атрибутно - в другой, вероятно ниже, а может и пофигу.

Ну так вот, тут я подумал а нельзя ли присобачить к using() еще и условие, типа using(common_id) and common_id = some_value... Проверил на практике - нельзя. Пошел искать может какой-то хитрый синтаксис требуется и напоролся на попсовую статью про джойны и юзинг в частности.

Автор начинает со сравнения синтаксиса соединения в стиле Фиты (я не знал что оно - Theta-стайл), переходит на АНЗИ-стайл и с него на юзинги. И в конце самая мякотка. Я сперва подумал это конкретно про using(), типа именно юзинг так оптимизируется и полез скрипеть своей консолью. Повторил пассы и увидел абсолютно такую же оптимизацию для обычного по-атрибутного соединения, то есть через on f.id = f1.id Вернулся к статье и дочитал что оно _вообще_ для джоинов именно так.

Тогда спрашивается на какой козе баян - столько спорили какой синтаксис правильный и самый-самый оптимизированный, если наколка из той же буквы - Фита?

http://code.openark.org/blog/mysql/mysql-joins-on-vs-using-vs-theta-style
...
Рейтинг: 0 / 0
08.02.2014, 17:03:47
    #38554468
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
Что ты хочешь, уважаемый, я ничего не понял,
игры разума?
...
Рейтинг: 0 / 0
08.02.2014, 21:45:27
    #38554648
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
bochkov,

это местный аналог Паши.
Да еше и ссылка битая... может ИП собирает...
...
Рейтинг: 0 / 0
08.02.2014, 23:35:47
    #38554726
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
javajdbcДа еше и ссылка битая...У меня нормально открывается.
...
Рейтинг: 0 / 0
09.02.2014, 00:11:35
    #38554737
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
miksoft,

там была датабасе ексепшн! зып даю!
теперь работает.

Да, не очень комфортабельное разнообразие имеет место.
Кроме того, если взять

Код: sql
1.
2.
3.
4.
5.
6.
SELECT * 
FROM film 
JOIN film_actor 
ON (film.film_id = film_actor.film_id) 
WHERE actor_id = 17 
AND film.length > 120



и заменить на

Код: sql
1.
2.
3.
4.
5.
6.
SELECT * 
FROM film 
JOIN film_actor 
ON (film.film_id = film_actor.film_id) 
AND actor_id = 17 
AND film.length > 120



то тоже самое получится в результате.
Наверно даже и внутри тоже самое будет.
если там написано что все в ТЕТУ переводится.
...
Рейтинг: 0 / 0
09.02.2014, 06:14:37
    #38554815
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
bochkovЧто ты хочешь, уважаемый, я ничего не понял,
игры разума?

Не поняли - пройдите мимо. Или задайте вопрос по существу. Смысл в том что запрос вида

select * from t1 join t2 on t1.id = t2.id

превращается в

select * from t1, t2 where t1.id = t2.id

То есть из анзи в оракл, в т.н. фита-стайл, который усердно обсерали.

Технически я еще тогда не мог понять что такое join. Если откинуть теорию что субеде выбирает данные трансцендентально, то значит выбирать она может через for( for( for( for и так далее.
...
Рейтинг: 0 / 0
09.02.2014, 07:35:40
    #38554819
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
я просто не знал,
что у когото выбор стиля соединения таблиц,
вызывает столько эмоций,
для меня что АНСИ ,что ТЕТА.
можно так и эдак,
никто же не спорит как лучше писать 1/10 и 0.1
...
Рейтинг: 0 / 0
09.02.2014, 07:40:59
    #38554821
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
bochkov1/10 и 0.1
1/10 или 0.1
...
Рейтинг: 0 / 0
09.02.2014, 10:50:44
    #38554847
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
deblogger,

я тоже нифига не понял "чего сказать хотели"... В доке прямо указано, что все выкрутасы в части ON явно и прямо СНАЧАЛА преобразуются в блок WHERE обычного соединения ... и токмо потом(!) оптимизатор начинает изголяться на запросом.

То есть разницы (технической с т.з. оптимизатора) - никакой нет.

Я пользую блок ON исключительно из-за его большей читабельности. Вырисовывать эту самую итоговую "веру" - не всегда так очевидно как хотелось бы. Особенно в левых джойнах.

А ежели собирать запрос через какие-нибудь "классные автоматы" (есть самописный вариант фреймоврка, типа Юя) - так на несколько порядков удобнее: достаточно указать схемы зависимостей классов смущностей друг от друга и он сам воткнет все какие надо констрейны. Только указываешь "Дай отсюда такие и отсюда добавь это"... а то что там "пятиэтажный" запрос с корреллированными и вложенными подзапросами, формирующий дерево из промежуточных понятий и нумерующий выдачу - как-то по-барабану.

У меня ваще, давно уже есть один метод у каждого класса сущности БД: getBy(array) "найди по списку условий". И чего он там "подключает" интересно только один раз при написании метода этого класса getSQL(array) -- отдай свой кусок запроса согласно условиям.
...
Рейтинг: 0 / 0
09.02.2014, 16:54:37
    #38554995
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
debloggerСмысл в том что запрос вида

select * from t1 join t2 on t1.id = t2.id

превращается в

select * from t1, t2 where t1.id = t2.id

То есть из анзи в оракл, в т.н. фита-стайл, который усердно обсерали.
Это для inner join разницы между этими конструкциями нет, а вот outer join - это уже совсем другое дело.
...
Рейтинг: 0 / 0
10.02.2014, 00:34:33
    #38555163
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
мускл научился outer join делать?
блин, не знал
...
Рейтинг: 0 / 0
10.02.2014, 00:44:55
    #38555168
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
bochkovмускл научился outer join делать?
блин, не зналВы путаете full outer join и left/right outer join. Первый он не умеет до сих, последние два умел практически всегда.
...
Рейтинг: 0 / 0
10.02.2014, 00:55:45
    #38555171
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
с теорией у меня совсем плохо
...
Рейтинг: 0 / 0
10.02.2014, 06:46:38
    #38555215
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
Arhat109У меня ваще, давно уже есть один метод у каждого класса сущности БД: getBy(array) "найди по списку условий". И чего он там "подключает" интересно только один раз при написании метода этого класса getSQL(array) -- отдай свой кусок запроса согласно условиям.

Звездешь. SQL это не ковыряние jquery в dom'е. Нет в SQL "условий" таких, как их программисты понимают. Кстати все эти популярные объяснения взаимодействия отношений с рисунками типа вот inner это значит intersection двух кругов, а вот left join ... и нарисованы круги закрашенные по-разному.

Потому что бд не массив. И не дом. Бд это туева хуча кортежей которые состоят из туевой хучи атрибутов. Ваши "условия" формируют лишь более-менее высокую степень вероятности извлечения из этой туевой хучи хуч чего-то такого, что вы ожидали получить. Чем хуча туевее, тем труднее определять неопределенность которой по умолчанию является реляционная бд. В отличии от массива точек о каждой из которых заранее все известно.
...
Рейтинг: 0 / 0
10.02.2014, 06:57:19
    #38555216
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
Технически никуда от cartesian product не деться. Код СУБД будет брать все указанные отношения и оцеживать их своими foreach'ами по забитым в стек аргументам в if then.
...
Рейтинг: 0 / 0
10.02.2014, 08:31:03
    #38555245
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
deblogger,

Вы только мне это не рассказывайте. Я их писал когда-то... в смысле СУБД (в жизнь не пошло, но это другой вопрос).
...
Рейтинг: 0 / 0
10.02.2014, 08:40:57
    #38555255
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
Arhat109,

я в смысле про "неопределенность в БД". В Фон Неймане - нет и не может быть никаких неопределенностей, акромя косяков чьих-то ручек. Любой запрос завсегда можно заменить на требуемое количество for и строго соответствующее условиям количество if внутрях, другое дело что это не всегда будет самый быстрый способ.

Написал не ради "звездишь", а дабы подчеркнуть, что как там оптимизатор раскладывает запрос - уже настолько НЕ интересно... и чего Вы задались этим вопросом - мне так и осталось непонятным.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается... / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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