powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопросы непрофессионала по SQL
25 сообщений из 37, страница 1 из 2
Вопросы непрофессионала по SQL
    #40061126
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер!
В данном примере осуществляется блокировка на чтение при SELECT до вызова COMMIT? Или нужно применять "FOR UPDATE" в SELECT?
Код: sql
1.
2.
3.
4.
BEGIN;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summmary=@A WHERE type=1;
COMMIT;
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061129
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получается, что пример выше аналогичен:
Код: sql
1.
2.
3.
autocommit=false;
...
autocommit=true;
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061131
zby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman,

Это не MS SQL
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061133
zby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zby
FreeAdman,

Это не MS SQL


Обратитесь в соответствующий форум
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061142
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста
Какая разница между SELECT из нескольких таблиц и применение JOIN LEFT ?
Код: sql
1.
SELECT t1.*, t2.* FROM t1, t2 WHERE t1.i1 = t2.i2
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061149
0wl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
0wl
Гость
FreeAdman,

"список таблиц" - это устаревший способ записать INNER JOIN.

А чем INNER JOIN отличается от LEFT JOIN - за этим в справку или гугл
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061150
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
0wl, благодарю!

Получается, разницы между устаревшим видом и INNER нет никакой, попросту использование INNER визуально упрощает \ сокращает вид запроса?
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061156
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LEFT JOIN получается быстрее INNER JOIN? Я правильно понимаю?

Т.е. выборка при LEFT получается только в одну сторону вида t1 -> t2 -> t3?

Да, придётся почитать за JOIN-ы...
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061167
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FreeAdman
LEFT JOIN получается быстрее INNER JOIN? Я правильно понимаю?

Т.е. выборка при LEFT получается только в одну сторону вида t1 -> t2 -> t3?

Да, придётся почитать за JOIN-ы...

Имел ввиду, что сначала выборка идёт в `t1`, потом в `t2` без возврата обратно в `t1`. Иначе говоря этоЮ если я правильно представляю, это подобно 3-м SELECT
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061170
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А подскажите, пожалуйста, какой вариант лучше применять для выборки 1 поля из нескольких (3+) таблиц? (интересно ваше мнение и совет)

Когда в одном поле - id поля из другой таблицы
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061174
MoonRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman
А подскажите, пожалуйста, какой вариант лучше применять для выборки 1 поля из нескольких (3+) таблиц? (интересно ваше мнение и совет)

Когда в одном поле - id поля из другой таблицы


LEFT и INNER это не про скорость
это про разные, абсолютно разные способы соединения таблиц, которые приводят к разным результирующим значениям

в целом ваше направление размышлений в верном направлении
авторвыборка при LEFT получается только в одну сторону вида t1 -> t2 -> t3?
но для полного понимания прочитать надо про все способы соединений
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061177
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала разберитесь, что у Вас за СУБД.
Если вдруг MS SQL Server - то пройдите курс https://www.specialist.ru/course/m20461
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061180
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DaniilSeryi,

ну как это разберитесь ? MySQL! Модератора попросил перенести тему.

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061201
zby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman,

Вот вам про джойны наглядно
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061206
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Красиво, только не совсем понятно. Красным что обозначается?
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061220
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
результат запроса на примере множеств
(вместо таблиц)
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061238
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде бы разобрался. Делаю несколько вложенных LEFT JOIN и норм.

Благодарю всех!
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061253
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FreeAdman
Добрый вечер!
В данном примере осуществляется блокировка на чтение при SELECT до вызова COMMIT? Или нужно применять "FOR UPDATE" в SELECT?
Код: sql
1.
2.
3.
4.
BEGIN;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summmary=@A WHERE type=1;
COMMIT;



Подскажите, плиз, я правильно понимаю, что "BEGIN WORK" - это некий локальный аналог "autocommit=false", а COMMIT при том возвращает autocommit в исходное?

И, как я понимаю, пример выше не блокирует таблицу на чтение ?
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061276
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О блокировках. Например. У нас есть таблица users. При регистрации проверяем наличие логина в БД.
И дабы недопустить фантомные записи, я так понимаю, пример из доки ниже то что нужно для InnoDB

Код: sql
1.
2.
3.
4.
5.
SET autocommit=0;
LOCK TABLES t1 WRITE, t2 READ, ...;
... do something with tables t1 and t2 here ...
COMMIT;
UNLOCK TABLES;



В данном примере мы блокируем на чтение (ну и запись) "t1" т.е. users, а второй поток по идее будет висеть в ожидании разблока таблицы.
И "FOR UPDATE" конкретно в этой ситуации не подходит
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061567
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman,

Не надо танцевать с тарзакциями. Вот так попробуй:
Код: sql
1.
update summary = (select sum(salary) from table1 where type = 1) where type = 1;


Если надо по нескольким типам, то mysql может делать update по таблице и подзапросу.
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061847
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster,

то был пример с другого сайта. Ваш запрос мне ни к чему

только от фантомов ваш пример сильно помогает? Сомневаюсь.
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061880
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman
только от фантомов ваш пример сильно помогает?

От кого помогает, простите?
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40065425
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
INNER и LEFT могут давать одинаковый результат. В чём тогда разница?
Зачем эти ДЖОЙНЫ, если можно перечислить все таблицы в FROM ? Тот же INNER как писали выше.
Картинки ваши с интернета не поясняют ничего.
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40065447
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman,

смотрим на картинку выше (с кружочками)

LEFT отдает ВСЮ Левую Таблицу и присоединяет записи Правой Таблицы по условию Соеднинения, где условие не выполняется - будет NULL для Правой Таблицы

INNER отдает только те записи из Левой и Правой, которые проходят по условию соединения

здесь https://dbfiddle.uk/?rdbms=mysql_8.0 можно создать пару таблиц и поиграться вдоволь.
------------------ добавлено ------------------
FROM TabA, TabB = FROM TabA INNER JOIN TabAB
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40065448
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov,
Ясно. Так понятней.

Тогда вопрос. А в чём фишка RIGHT и LEFT ?
Ведь запрос можно составить так, что LEFT даст такой же результат как RIGHT и наоборот.
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопросы непрофессионала по SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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