es
Feedback
Пишем на SQL

Пишем на SQL

Ir al canal en Telegram

Уроки по SQL. Изучаем базы данных на примере СУБД ORACLE, MySQL, MS SQL Server, PostgreSql Мой курс по SQL и базам данных: https://prime-soft.biz/courses/sql Связь со мной @iliahohlov

Mostrar más
1 900
Suscriptores
Sin datos24 horas
+27 días
+130 días
Archivo de publicaciones
MS Excel - мощный инструмент для работы с данными не только для аналитика, но и разработчика! Научитесь реализовать функционал в популярном табличном редакторе и значительно расширите его возможности! Как писать код правильно, а его выполнение сделать максимально производительным научим на нашем курсе. Чему мы научимся: - Эффективно использовать имеющийся функционал (Сводные таблицы, ВПР, ГПР, ПОИСКПОЗ, ИНДЕКС, СЧЁТЕСЛИМН, СУММЕСЛИМН, условное форматирование на основе формул и многое другое). Покажем примеры задач, которые эффективнее всего решать имеющимися возможностями; - Писать макросы, пользоваться внутренним языком программирования Excel (VBA), который существенно расширяет возможности популярного табличного редактора; - Автоматизировать работу с данными, подготовку отчётности на основе сырых данных, создание алгоритмов сбора данных для отчетов из файла или внешних файлов, консолидация, сквозные формулы и прочее; - Реализовывать сложный функционал (например, равномерное распределение документов между сотрудниками, создание графика работы сотрудников с учетом личных данных каждого из них и первичной информации, и прочее); - Составлять алгоритмы для решения любых задач; - Оптимизировать код и делать его выполнение быстрее. Весь курс со скидкой стоит 4.500 р. Узнать подробнее и записаться можно здесь: https://prime-soft.biz/courses/vba

Всех с днём знаний! 🎉 Давайте разберём задачу, похожую на то, что прислали в одном из комментариев. Задача немного дополнена. Таблица Сотрудников Pers имеет вид: ID FIO 1   Иванов Иван Иванович 2   Петров Павел Сергеевич 3   Третья Наталья Петровна 4 Четвёртый Ян Борисович Табллица Должностей Positions имеет вид: ID NAME 1   Менеджер 2 Топ менеджер 3 Программист 4  Аналитик Таблица занимаемых сотрудниками должностей имеет вид : ID_PERS - идентификатор сотрудника ID_POS - идентификатор должности DT_START - дата начала работы сотрудника в должности DT_END - дата окончания работы сотрудника на должности, если значение NULL, то сотрудник работает на должности по настоящее время. ID_PERS  ID_POS  DT_START   DT_END 1           1          2020-01-15  2021-06-01 1           2           2020-06-02  NULL 2           1          2020-02-01  2022-03-31 2           2          2022-04-01  NULL 3 3 2020-02-01 NULL 4 3 2020-01-16 2020-06-01 5 4 2022-08-09 NULL Вывести ФИО сотрудников и названия позиций, которые они занимали по состоянию на 01.01.2022. Еще не пришедших к этому времени сотрудников отображать не нужно, только тех, кто работал по состоянию на 01.01.2022 и должности, которые они занимали. Решение задачи выложу попозже.

Правильно ли составлен указанный выше запрос?
Anonymous voting

Таблица реализуемых продуктов (PRODUCTS) имеет вид: ID NAME 1 Наушники 2 MP-3 плеер 3 Кассета 4 CD-диск 5 Зарядка Nokia Таблица продаж (SALES) имеет вид: ID DATE_SALE ID_PRODUCT 1 '2009-04-21' 2 2 '2009-04-21' 1 3 '2009-04-21' 3 4 '2009-04-21' 2 5 '2009-04-21' 4 6 '2009-04-21' 3 7 '2009-04-22' 5 Требуется вывести полный список продуктов и количество сколько каких продали за 21 апреля 2009 года. Товаров, продаж которых не было 21 апреля, тоже нужно вывести. Результат нужно отсортировать по убыванию. Самые продаваемые товары - сверху, которые ни разу не купили - снизу. Для реализации этого был написал следующий запрос: SELECT p.ID, p.NAME, COUNT(s.ID) COUNT_SALES FROM PRODUCTS p LEFT JOIN SALES s ON s.ID_PRODUCT = p.ID WHERE s.DATE_SALE = '2009-04-21' GROUP BY p.ID, p.NAME ORDER BY COUNT_SALES NULLS LAST

Друзья, спасибо за новые задачи с собеседований! Только, при публикации их здесь, лучше не указывать источник. И, по возможности, немного меняйте текст или данные задач (оставляя смысл).

Друзья, набираю группу на обучение SQL по будням вечером! Начинаем на следующей неделе, 2го сентября! Обучение будет по вт, ср, чт (19:30 - 20:30). Всего 18 уроков (6 недель). Узнать больше и записаться можно здесь.

Всем привет! Какие активные обсуждения вызвала последняя задача! Клёвая совместная работа! Александру выздоровления ☺️ Чтобы решить задачу вывода клиентов, не имеющих в таблице документов записи с типом 'СНИЛС', не используя, при этом, подзапросы, можно воспользоваться LEFT JOIN-ом. Выводя клиентов попробуем присоединить к каждому именно его СНИЛС, а потом во WHERE укажем, чтобы отображались В РЕЗУЛЬТИРУЮШЕЙ ТАБЛИЦЕ только такие клиенты, к которым СНИЛС присоединить НЕ удалось. SELECT c.* FROM CLIENTS c LEFT JOIN DOCS d ON d.ID_CLIENT = c.ID AND d.DOC_TYPE = 'СНИЛС' WHERE d.ID IS NULL В примере выше к клиентам соединяем только документ с типом 'СНИЛС', поэтому в джоине сразу два условия. Если было бы соединение только по ID_CLIENT, то клиентам присоединились бы все их документы и отсеивание на уровне WHERE могло бы только убрать строки с типом 'СНИЛС', но клиенты всё равно могли бы быть выведены с другим типом документа. В комментариях под задачей увидел правильные решения! @IgorSmirnov @sova_gde_hvost

Правильно ли выполнено задание? SELECT c.* FROM CLIENTS c LEFT JOIN DOCS d ON d.ID_CLIENT = c.ID WHERE d.DOC_TYPE <> 'СНИЛС' OR d.DOC_TYPE IS NULL
Anonymous voting

Требуется написать SQL-запрос, выводящий список клиентов, для которых в таблице документов нет записи с типом "СНИЛС", не используя, при этом, подзапросы. Таблица CLIENTS имеет вид: ID NAME 1 Иванов 2 Петров 3 Сидоров 4 Ломоносова 5 Веган Таблица DOCS имеет вид: ID ID_CLIENT DOC_TYPE DOC_NUM 1 1 'ПАСПОРТ' '1245 12' 2 1 'СНИЛС' '123-123' 3 2 'ПАСПОРТ' '1277 12' 4 3 'СНИЛС' '123-333' 5 5 'ЗАГРАН' '567444'

Друзья, всем доброе утро и хорошего понедельника! HAVING в команде SELECT можно использовать в запросах без GROUP BY (без указания столбца или столбцов, по которым группировать данные). Тогда вообще все строки, получаемые запросом, будут сгруппированы в одну единственную строку (вся получаемая таблица - это одна большая группа). С помощью HAVING можно проанализировать общие данные группы, определить нужно ли ей отображаться. Пример: SELECT COUNT(*) FROM PERSONS HAVING COUNT(*) > 10 Пример вывода объектов, расположенных в разных таблицах, у которых количество больше 10: SELECT 'Столы' NM_OBJ FROM TABLES HAVING COUNT(*) > 10 UNION ALL SELECT 'Стулья' NM_OBJ FROM CHAIRS HAVING COUNT(*) > 10

Друзья, напоминаю, что завтра начинаем онлайн обучение SQL, PostgreSQL. У нас осталось еще 2 места. Можно успеть! Начнем с самых азов: покажу как устроена база данных, что это такое, что такое SQL, как связываются между собой таблицы, как из них выбирать данные. Далее расскажу и покажу как работают джоины, как их использовать правильно. Какие задачи ими удобно решать, и где это может привести к ошибкам. Разберем группировки, подзапросы, запросы из запросов, CTE, аналитические функции и оптимизацию запросов. Разберем весь DML (часть команд SQL, которыми работают с данными: выбирают, добавляют новые, изменяют и удаляют их) и потом перейдем к DDL, TCL и DCL. Научимся сами проектировать и создавать базы данных, предоставлять доступ к объектам. Разберемся что такое нормализация и денормализация. Наглядно и на простых примерах покажу что такое транзакция, для чего она нужна. Разберемся и с блокировками: увидим как блокируются таблицы и почему. Научимся работать с данными так, чтобы не вызывать взаимных блокировок (deadlocks)! В рамках всего обучения мы научимся создавать представления, триггеры и даже немного попрограммируем: создадим несколько функций и парочку стандартных триггеров. Всего за 18 уроков мы вместе сделаем из Вас востребованных специалистов по базам данных! Я подготовлю Вас к собеседованию и, если нужно, помогу составить резюме. Обучение провожу очно через Zoom небольшими группами. Каждый урок длится примерно 1 час времени. Наши эфиры записываю, видео будут доступны в закрытой группе Телеграм. Вы всегда сможете посмотреть наши уроки ещё раз и освежить знания! Узнать больше и записаться

В эту субботу начинаем интенсив SQL, PostgreSQL - еще есть 3 места; - обучение по выходным сб, вс (09:00 - 10:00); - всего 18 уроков, продолжительностью 1 час каждый; - обучение через Zoom; - индивидуальная закрытая группа Телеграм, куда я буду выкладывать записи совместных эфиров и конспекты уроков; - индивидуальна проверка самостоятельных работ; - цена 9.900 р. Посмотреть программу курса и записаться можно здесь.

Какое значение вернет запрос: SELECT COUNT(DISTINCT TP_ORDER) FROM ORDERS
Anonymous voting

Всем доброе утро! И опять небольшой тест по основам SQL: В таблице ORDERS 5 строк: ID ID_CLIENT TP_ORDER 1 1 1 2 1 1 3 1 2 4 2 NULL 5 2 NULL

Рекомендации по написанию программного кода хранимых функции и процедур Чем больше нагрузка и больше одновременно выполняющихся транзакций, тем больше и ответственности при создании хранимых функций и процедур. Хорошо написанный программный код легко сопровождаем и не боится параллельной работы! Ниже собрал для вас основные рекомендации, которые важно учитывать при разработке хранимок (функций, процедур, триггеров). 1. Максимально эффективное обращение к данных (желательно всегда по первичным ключам и индексам); 2. Разделение сложных операций на более простые (сложный update, insert или delete с подзапросами можно упростить - сделать его по ключу, а данные, получаемые подзапросами, можно предварительно положить во временную таблицу или таблицу временного хранения данных); 3. Соблюдение идентичной последовательности работы с таблицами в разных функциях и процедурах (это позволит минимизировать вероятность взаимных блокировок); 4. Форматирование кода (соблюдение отступов, единое оформление, принятое в компании или в конкретной АС), использование регламентов оформления кода; 5. Соблюдение соответствия программы кода хранимки её назначению (процедура, открывающая вклад клиенту, должна открывать вклад клиенту и не должна дополнительно закрывать кредит); 6. Краткое и понятное комментирование неочевидных участков кода; 7. Идеальный код одной хранимки помещается на одном экране, чтобы не пришлось его прокручивать (конечно, на практике, это далеко не всегда так, но надо к этому стремиться). Если алгоритм большой, то его нужно разбивать на дополнительные функции и процедуры, которые можно использовать в коде основной функции/процедуры.

Мини-тест на знание основ SQL ⭐️! Что вернёт запрос? SELECT COALESCE(NULL, NULL, 'SQL', 'DB');
Anonymous voting

Получаем итоги на каждое сочетание название филиала и название департамента:

Любая СУБД может группировать данные на основе значения не одного столбца, а, при необходимости, набора столбцов. Тогда строчки, с одинаковыми значениями, указанных в GROUP BY столбцах, будут сливаться в одну. Строчки, у которых, хотя бы в одном из указанных столбцов, значение другое - будут создавать новую группу. Например, подсчитаем сколько сотрудников работает в каждом филиале в каждом отделе:

Каким будет результат выполнения следующего запроса (на примере СУБД MySQL, PostgreSQL)? SELECT FLOOR(10.9), CEIL(10.1)
Anonymous voting

Спасибо всем за активное участие и за дискуссию! При соединении таблиц, LEFT и RIGHT JOIN-ы действительно равноценны и ничего не меняют в выводимом наборе данных, если таблицы в запросе поменять местами. Но, как Вы и написали, если порядок столбцов в блоке SELECT не указан явно (а указана звездочка), то в результирующем наборе столбцы таблиц будут выводиться в порядке указания таблиц в запросе: сначала будут выведены все столбцы первой таблицы запроса, затем столбцы второй таблицы, указанной в запросе и т.д.