⚙️
#sql #databases #joins #nested_loop_join
Самый простой способ джойнить — это nested-loops join.
🗄→🗄→🗄
Исполнение начинается с запроса к изначальной таблице — т.н. driving table (на русском, кажется, это называется управляющая таблица) — с использованием тех условий, которые относятся именно и только к ней. Отделив нужные сроки в управляющей таблице, БД передает их в следующий “бокс”. В нём БД построчно ищет соответствующие строки во второй таблице, затем применяет предикаты второй таблицы для отсеивания ненужных записей. И так далее.
Матчинг строк первой таблицы со второй в случае nested-loop join’а обычно происходит с помощью поиска в индексе по тому ключу, по которому происходил джойн.
#sql #databases #joins #nested_loop_join
Самый простой способ джойнить — это nested-loops join.
🗄→🗄→🗄
Исполнение начинается с запроса к изначальной таблице — т.н. driving table (на русском, кажется, это называется управляющая таблица) — с использованием тех условий, которые относятся именно и только к ней. Отделив нужные сроки в управляющей таблице, БД передает их в следующий “бокс”. В нём БД построчно ищет соответствующие строки во второй таблице, затем применяет предикаты второй таблицы для отсеивания ненужных записей. И так далее.
Матчинг строк первой таблицы со второй в случае nested-loop join’а обычно происходит с помощью поиска в индексе по тому ключу, по которому происходил джойн.
#sql #postgresql
PostgreSQL (как и, наверное, другие СУБД) пользуется троичной логикой для разрешения логических предикатов (True, False, undefined). Поэтому для любых предикатов результаты не будут включать в себя строки, значения которых были NULL, так как для них логический результат будет неопределен, а возвращаются лишь строки, разрешающиеся в True.
PostgreSQL (как и, наверное, другие СУБД) пользуется троичной логикой для разрешения логических предикатов (True, False, undefined). Поэтому для любых предикатов результаты не будут включать в себя строки, значения которых были NULL, так как для них логический результат будет неопределен, а возвращаются лишь строки, разрешающиеся в True.
#sql #postgresql
Чтобы явно указывать при сортировке, куда ставить NULL-значения — в конец или начало, можно приписывать
По дефолту включено asc и nulls last. Для desc по дефолту — nulls first.
Чтобы явно указывать при сортировке, куда ставить NULL-значения — в конец или начало, можно приписывать
nulls last или nulls first.select * from customers order by last_name desc nulls last
По дефолту включено asc и nulls last. Для desc по дефолту — nulls first.
#sql #postgresql
В общем случае ключевые слова и команды обрабатываются в следующем порядке:
1) from — идём в нужную таблицу;
2) where — применяем предикаты для отбора по условию;
3) group by
4) having — фильтруем сагреггированные результаты;
5) select — отбираем нужные атрибуты;
6) order by — сортируем результат;
7) limit — и обрубаем нужное количество.
Ну это, конечно, упрощение, но именно из-за этого порядка мы не можем обращаться к алиасам выборки в предикатах, но можем в order by, так как он идёт после обработки select.
В общем случае ключевые слова и команды обрабатываются в следующем порядке:
1) from — идём в нужную таблицу;
2) where — применяем предикаты для отбора по условию;
3) group by
4) having — фильтруем сагреггированные результаты;
5) select — отбираем нужные атрибуты;
6) order by — сортируем результат;
7) limit — и обрубаем нужное количество.
Ну это, конечно, упрощение, но именно из-за этого порядка мы не можем обращаться к алиасам выборки в предикатах, но можем в order by, так как он идёт после обработки select.
#sql #postgresql
В order by тоже можно использовать case when.
Например, мы хотим выводить список имеющихся стран, отсортированный по алфавиту, но первыми выводить всегда US, UK, France.
Это можно сделать так:
Чтобы отсортировать оставшиеся страны (одинаковые с порядком 3), мы дописываем второй аргумент сортировки, именно это отсортирует остальное по алфавиту по возрастанию.
Кстати, здесь использована упрощённая форма case, если вы о ней не знали, то обратите внимание, что атрибут вынесен сразу после слова case, а дальше просто перечисляются значения. NULL при этом таким образом отдельно обработать нельзя, так как он требует не равенства, а ключевого слова is, и чтобы описать поведение для пустого значения, надо использовать полную форму.
В order by тоже можно использовать case when.
Например, мы хотим выводить список имеющихся стран, отсортированный по алфавиту, но первыми выводить всегда US, UK, France.
Это можно сделать так:
select country
from country
order by
case country
when 'US' then 0
when 'UK' then 1
when 'France' then 2
else 3
end, country;
Чтобы отсортировать оставшиеся страны (одинаковые с порядком 3), мы дописываем второй аргумент сортировки, именно это отсортирует остальное по алфавиту по возрастанию.
Кстати, здесь использована упрощённая форма case, если вы о ней не знали, то обратите внимание, что атрибут вынесен сразу после слова case, а дальше просто перечисляются значения. NULL при этом таким образом отдельно обработать нельзя, так как он требует не равенства, а ключевого слова is, и чтобы описать поведение для пустого значения, надо использовать полную форму.
#sql #postgresql
Как с помощью функции random() возвращать по пять рандомных клиентов (при каждом вызове разных):
Как с помощью функции random() возвращать по пять рандомных клиентов (при каждом вызове разных):
select first_name, last_name, email
from customer
order by random()
limit 5;
«Стать лесом, видящим сны <...> про своих обитателей». (с) Роман Михайлов, «Изнанка крысы»
#pandas
pandas_profiling — пишут, что очень медленный пакет, но надо не забыть попробовать. Зато сразу все графички про данные.
https://towardsdatascience.com/exploring-your-data-with-just-1-line-of-python-4b35ce21a82d
pandas_profiling — пишут, что очень медленный пакет, но надо не забыть попробовать. Зато сразу все графички про данные.
https://towardsdatascience.com/exploring-your-data-with-just-1-line-of-python-4b35ce21a82d
Medium
Exploring your data with just 1 line of Python
Getting all your standard data analysis done in less than 30 seconds. The wonders of Pandas Profiling.
Фет читает стихотворение «Не спрашивай
о чем задумываюсь я».
Перед его мысленным взором носится стая
ворон и своим карканьем мешает ему читать.
***
Хлебников в Торжке читает лекцию о
строительстве подземного железнодорожного
туннеля под Гималаями.
Он читает так тихо, что его почти не
слышно.
Сам же Хлебников слышит, как где-то
свистит паровоз. Этот свист пленяет его душу,
он забывает закончить лекцию и уходит
неизвестно куда.
(с) А. Монастырский
https://rvb.ru/np/publication/01text/33/01monastyrsky.htm
#moire_experience
о чем задумываюсь я».
Перед его мысленным взором носится стая
ворон и своим карканьем мешает ему читать.
***
Хлебников в Торжке читает лекцию о
строительстве подземного железнодорожного
туннеля под Гималаями.
Он читает так тихо, что его почти не
слышно.
Сам же Хлебников слышит, как где-то
свистит паровоз. Этот свист пленяет его душу,
он забывает закончить лекцию и уходит
неизвестно куда.
(с) А. Монастырский
https://rvb.ru/np/publication/01text/33/01monastyrsky.htm
#moire_experience
А много ли мне в жизни надо?
Уже и слова не скажу
Как лейбницевская монада
Лечу и что-то там жужжу
Какой-нибудь другой монаде
Она ж в ответ мне: Бога ради
Не жужжи
(с) Дмитрий Пригов
#moire_experience
Уже и слова не скажу
Как лейбницевская монада
Лечу и что-то там жужжу
Какой-нибудь другой монаде
Она ж в ответ мне: Бога ради
Не жужжи
(с) Дмитрий Пригов
#moire_experience