Перейти к содержимому

Фотография

ПОДЗАПРОСЫ


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 baranceva

baranceva

    Профессионал

  • Admin
  • PipPipPipPipPipPip
  • 4 160 сообщений
  • ФИО:Баранцева Наталья


Отправлено 11 мая 2021 - 08:21

Автор: Роман Буданов, тренер курса “Первый Онлайн ИНститут Тестировщиков” (компания “Лаборатория Качества”)

 

Всем доброго времени суток, мои маленькие (и не очень) любители (и не очень) SQL! На курсе ПОИНТ мы с нуля разбираем построение запросов, обучаемся основным операторам, работе с разными типами данных, но сейчас я хочу с вами поговорить про один из полезных инструментов, увы, оставшихся  за рамками ПОИНТ  сегодня я хочу рассказать вам про такую полезную штуку, как подзапросы и показать несколько вариантов их приготовления.

 

Читать статью полностью...


  • 0
Наталья Баранцева
Тренинги по тестированию ПО

#2 Sergey_Titkov

Sergey_Titkov

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Титков Сергей Станиславович


Отправлено 12 мая 2021 - 20:39

А можно написать так:

select * from transactions t

join (select id, login from account where login like '%a') a on t.account_id=a.id

 

 А можно написать так:

 

select * from transactions t

join account a on t.account_id=a.id and a.login like '%a'

 

 

Как работает первый запрос, с обычным джоином?

  1. Берётся первая таблица.
  2. Объединяется со второй таблицей.
  3. Из получившейся результирующей выборки отбираются подходящие под условие записи.

Как работает второй запрос, с “подзапросным” джоином?

  1. Берётся подзапрос, в нём находятся все записи, удовлетворяющие условию.
  2. С этими записями уже происходит джоин первой таблицы.

 

  1.  

Нет это так не работает, это просто фантазии, надо спросить у субд как конкретно работает запрос, на вот этих данных, а не фантазировать.
 

И еще если уж начали говорить про подзапросы, то почему то обошли момент, что они могут быть и в кляузе select.


  • 0

#3 ql_budanov

ql_budanov

    Новый участник

  • Members
  • Pip
  • 1 сообщений
  • ФИО:Буданов Роман Павлович

Отправлено 13 мая 2021 - 07:46

 А можно написать так:

 

select * from transactions t

join account a on t.account_id=a.id and a.login like '%a'

Да, вы правы - можно. И это в статье отражено

 

Нет это так не работает, это просто фантазии, надо спросить у субд как конкретно работает запрос, на вот этих данных, а не фантазировать.

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

 

И еще если уж начали говорить про подзапросы, то почему то обошли момент, что они могут быть и в кляузе select.

В самом начале статьи я указал, что расскажу лишь про некоторые(а не все) варианты использования подзапросов


  • 0

#4 Sergey_Titkov

Sergey_Titkov

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Титков Сергей Станиславович


Отправлено 13 мая 2021 - 09:13

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

 

Моя мысль в следующем, у читателя возникает ровно одна мысль, что он ЗНАЕТ И ПОНИМАЕТ как работает машина sql. 
Это очень вредная иллюзия, потому что потом либо приходиться переучиваться, что сложно. 
Либо доказывать всем что субд гавно, а писали его придурки программисты, потому как запрос не работает согласно пониманию.

Сталкиваюсь именно со вторым постоянно.

 

Вопрос, у нас есть СУБД, вся статистика актуальна и есть три запроса:

select t.*, a.id, a.login from transactions t
join account a on t.account_id=a.id
where a.login like '%a'

select * from transactions t

join (select id, login from account where login like '%a') a on t.account_id=a.id

select * from transactions t
join account a on t.account_id=a.id and a.login like '%a'

Чем они отличаются для СУБД(Настоящей)?


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных