Всем доброе утро! И опять небольшой тест по основам SQL:
В таблице ORDERS 5 строк:
ID ID_CLIENT TP_ORDER
1 1 1
2 1 1
3 1 2
4 2 NULL
5 2 NULL
В таблице ORDERS 5 строк:
ID ID_CLIENT TP_ORDER
1 1 1
2 1 1
3 1 2
4 2 NULL
5 2 NULL
Какое значение вернет запрос:
SELECT COUNT(DISTINCT TP_ORDER) FROM ORDERS
SELECT COUNT(DISTINCT TP_ORDER) FROM ORDERS
Anonymous Quiz
3%
NULL
3%
1
47%
2
35%
3
3%
4
3%
5
6%
Будет ошибка выполнения SQL-запроса
В эту субботу начинаем интенсив SQL, PostgreSQL
- еще есть 3 места;
- обучение по выходным сб, вс (09:00 - 10:00);
- всего 18 уроков, продолжительностью 1 час каждый;
- обучение через Zoom;
- индивидуальная закрытая группа Телеграм, куда я буду выкладывать записи совместных эфиров и конспекты уроков;
- индивидуальная проверка самостоятельных работ;
- цена 9.900 р.
Посмотреть программу курса и записаться можно здесь.
- еще есть 3 места;
- обучение по выходным сб, вс (09:00 - 10:00);
- всего 18 уроков, продолжительностью 1 час каждый;
- обучение через Zoom;
- индивидуальная закрытая группа Телеграм, куда я буду выкладывать записи совместных эфиров и конспекты уроков;
- индивидуальная проверка самостоятельных работ;
- цена 9.900 р.
Посмотреть программу курса и записаться можно здесь.
Друзья, напоминаю, что завтра начинаем онлайн обучение SQL, PostgreSQL.
У нас осталось еще 2 места. Можно успеть!
Начнем с самых азов: покажу как устроена база данных, что это такое, что такое SQL, как связываются между собой таблицы, как из них выбирать данные.
Далее расскажу и покажу как работают джоины, как их использовать правильно. Какие задачи ими удобно решать, и где это может привести к ошибкам.
Разберем группировки, подзапросы, запросы из запросов, CTE, аналитические функции и оптимизацию запросов.
Разберем весь DML (часть команд SQL, которыми работают с данными: выбирают, добавляют новые, изменяют и удаляют их) и потом перейдем к DDL, TCL и DCL. Научимся сами проектировать и создавать базы данных, предоставлять доступ к объектам. Разберемся что такое нормализация и денормализация.
Наглядно и на простых примерах покажу что такое транзакция, для чего она нужна. Разберемся и с блокировками: увидим как блокируются таблицы и почему. Научимся работать с данными так, чтобы не вызывать взаимных блокировок (deadlocks)!
В рамках всего обучения мы научимся создавать представления, триггеры и даже немного попрограммируем: создадим несколько функций и парочку стандартных триггеров.
Всего за 18 уроков мы вместе сделаем из Вас востребованных специалистов по базам данных! Я подготовлю Вас к собеседованию и, если нужно, помогу составить резюме.
Обучение провожу очно через Zoom небольшими группами. Каждый урок длится примерно 1 час времени.
Наши эфиры записываю, видео будут доступны в закрытой группе Телеграм. Вы всегда сможете посмотреть наши уроки ещё раз и освежить знания!
Узнать больше и записаться
У нас осталось еще 2 места. Можно успеть!
Начнем с самых азов: покажу как устроена база данных, что это такое, что такое SQL, как связываются между собой таблицы, как из них выбирать данные.
Далее расскажу и покажу как работают джоины, как их использовать правильно. Какие задачи ими удобно решать, и где это может привести к ошибкам.
Разберем группировки, подзапросы, запросы из запросов, CTE, аналитические функции и оптимизацию запросов.
Разберем весь DML (часть команд SQL, которыми работают с данными: выбирают, добавляют новые, изменяют и удаляют их) и потом перейдем к DDL, TCL и DCL. Научимся сами проектировать и создавать базы данных, предоставлять доступ к объектам. Разберемся что такое нормализация и денормализация.
Наглядно и на простых примерах покажу что такое транзакция, для чего она нужна. Разберемся и с блокировками: увидим как блокируются таблицы и почему. Научимся работать с данными так, чтобы не вызывать взаимных блокировок (deadlocks)!
В рамках всего обучения мы научимся создавать представления, триггеры и даже немного попрограммируем: создадим несколько функций и парочку стандартных триггеров.
Всего за 18 уроков мы вместе сделаем из Вас востребованных специалистов по базам данных! Я подготовлю Вас к собеседованию и, если нужно, помогу составить резюме.
Обучение провожу очно через Zoom небольшими группами. Каждый урок длится примерно 1 час времени.
Наши эфиры записываю, видео будут доступны в закрытой группе Телеграм. Вы всегда сможете посмотреть наши уроки ещё раз и освежить знания!
Узнать больше и записаться
🔥1
Друзья, всем доброе утро и хорошего понедельника!
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
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
👍3❤2
Требуется написать 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'
Таблица 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'
❤2
Правильно ли выполнено задание?
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
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 Quiz
49%
Да
51%
Нет
❤3👍1
Всем привет!
Какие активные обсуждения вызвала последняя задача! Клёвая совместная работа! Александру выздоровления ☺️
Чтобы решить задачу вывода клиентов, не имеющих в таблице документов записи с типом 'СНИЛС', не используя, при этом, подзапросы, можно воспользоваться 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
Какие активные обсуждения вызвала последняя задача! Клёвая совместная работа! Александру выздоровления ☺️
Чтобы решить задачу вывода клиентов, не имеющих в таблице документов записи с типом 'СНИЛС', не используя, при этом, подзапросы, можно воспользоваться 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
👍8
Друзья, набираю группу на обучение SQL по будням вечером!
Начинаем на следующей неделе, 2го сентября!
Обучение будет по вт, ср, чт (19:30 - 20:30).
Всего 18 онлайн уроков (6 недель).
Цена: 9.900 за всё!
Узнать больше и записаться можно здесь.
Начинаем на следующей неделе, 2го сентября!
Обучение будет по вт, ср, чт (19:30 - 20:30).
Всего 18 онлайн уроков (6 недель).
Цена: 9.900 за всё!
Узнать больше и записаться можно здесь.
prime-soft.biz
Prime | Курс SQL, PostgreSql
Уроки и курсы SQL, PostgreSQL, Базы данных.
Друзья, спасибо за новые задачи с собеседований! Только, при публикации их здесь, лучше не указывать источник. И, по возможности, немного меняйте текст или данные задач (оставляя смысл).
Таблица реализуемых продуктов (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
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
❤3
Правильно ли составлен указанный выше запрос?
Anonymous Quiz
33%
Да, правильно
67%
Нет, не правильно
Всех с днём знаний! 🎉
Давайте разберём задачу, похожую на то, что прислали в одном из комментариев. Задача немного дополнена.
Таблица Сотрудников 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 2021-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 и должности, которые они занимали.
Решение задачи выложу попозже.
Давайте разберём задачу, похожую на то, что прислали в одном из комментариев. Задача немного дополнена.
Таблица Сотрудников 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 2021-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 и должности, которые они занимали.
Решение задачи выложу попозже.
👍5❤2
MS Excel - мощный инструмент для работы с данными не только для аналитика, но и разработчика! Научитесь реализовать функционал в популярном табличном редакторе и значительно расширите его возможности!
Как писать код правильно, а его выполнение сделать максимально производительным научим на нашем курсе.
Чему мы научимся:
- Эффективно использовать имеющийся функционал (Сводные таблицы, ВПР, ГПР, ПОИСКПОЗ, ИНДЕКС, СЧЁТЕСЛИМН, СУММЕСЛИМН, условное форматирование на основе формул и многое другое). Покажем примеры задач, которые эффективнее всего решать имеющимися возможностями;
- Писать макросы, пользоваться внутренним языком программирования Excel (VBA), который существенно расширяет возможности популярного табличного редактора;
- Автоматизировать работу с данными, подготовку отчётности на основе сырых данных, создание алгоритмов сбора данных для отчетов из файла или внешних файлов, консолидация, сквозные формулы и прочее;
- Реализовывать сложный функционал (например, равномерное распределение документов между сотрудниками, создание графика работы сотрудников с учетом личных данных каждого из них и первичной информации, и прочее);
- Составлять алгоритмы для решения любых задач;
- Оптимизировать код и делать его выполнение быстрее.
Весь курс со скидкой стоит 4.500 р. Узнать подробнее и записаться можно здесь: https://prime-soft.biz/courses/vba
Как писать код правильно, а его выполнение сделать максимально производительным научим на нашем курсе.
Чему мы научимся:
- Эффективно использовать имеющийся функционал (Сводные таблицы, ВПР, ГПР, ПОИСКПОЗ, ИНДЕКС, СЧЁТЕСЛИМН, СУММЕСЛИМН, условное форматирование на основе формул и многое другое). Покажем примеры задач, которые эффективнее всего решать имеющимися возможностями;
- Писать макросы, пользоваться внутренним языком программирования Excel (VBA), который существенно расширяет возможности популярного табличного редактора;
- Автоматизировать работу с данными, подготовку отчётности на основе сырых данных, создание алгоритмов сбора данных для отчетов из файла или внешних файлов, консолидация, сквозные формулы и прочее;
- Реализовывать сложный функционал (например, равномерное распределение документов между сотрудниками, создание графика работы сотрудников с учетом личных данных каждого из них и первичной информации, и прочее);
- Составлять алгоритмы для решения любых задач;
- Оптимизировать код и делать его выполнение быстрее.
Весь курс со скидкой стоит 4.500 р. Узнать подробнее и записаться можно здесь: https://prime-soft.biz/courses/vba
👍1
Доброе утро, друзья!
Спасибо за активное участие в решении предыдущей задачи!
Я тоже подготовил небольшое видео разбора её решения:
https://rutube.ru/video/654cce66166fd0ea16af5b7d63f18746/
Спасибо за активное участие в решении предыдущей задачи!
Я тоже подготовил небольшое видео разбора её решения:
https://rutube.ru/video/654cce66166fd0ea16af5b7d63f18746/
RUTUBE
Новые задачи по SQL с собеседований
Решаем задачу по SQL с нашего Телеграм канала: https://t.me/sql_oracle_databases
Группа в контакте:
https://vk.ru/sql_db
Файл для загрузки в базу данных:
https://prime-soft.biz/std/sql/pers-positions.sql
Наш курс по SQL и базам данных:
https://prime-sof…
Группа в контакте:
https://vk.ru/sql_db
Файл для загрузки в базу данных:
https://prime-soft.biz/std/sql/pers-positions.sql
Наш курс по SQL и базам данных:
https://prime-sof…
👍2❤1
Все задачи по базам данных можно решить множеством способов. Из составленных решений выбирается наиболее эффективное и простое в написании.
Спасибо Вам за активность по этой задаче! Понравилось, как просто решил задачу @Skiffrusspb.
К сотрудникам можно присоединить занимаемые позиции по идентификатору сотрудника с дополнительным условием, что дата, на которую формируют запрос, входит в период занимаемой должности.
Должна присоединиться максимум одна запись из таблицы истории занимаемых должностей. В один и тот же день сотрудник ведь может работать только на одной должности, поэтому только одна строчка из PersPositions для каждого сотрудника может найтись, или ни одна вообще, если сотрудник уже уволился к указанной дате.
Александр, я добавил COALESCE при сравнении с датой окончания. Если дата окончания не указана, то будет подставляться текущий день, в результате еще немного упростил код:
Спасибо Вам за активность по этой задаче! Понравилось, как просто решил задачу @Skiffrusspb.
К сотрудникам можно присоединить занимаемые позиции по идентификатору сотрудника с дополнительным условием, что дата, на которую формируют запрос, входит в период занимаемой должности.
Должна присоединиться максимум одна запись из таблицы истории занимаемых должностей. В один и тот же день сотрудник ведь может работать только на одной должности, поэтому только одна строчка из PersPositions для каждого сотрудника может найтись, или ни одна вообще, если сотрудник уже уволился к указанной дате.
Александр, я добавил COALESCE при сравнении с датой окончания. Если дата окончания не указана, то будет подставляться текущий день, в результате еще немного упростил код:
SELECT p.*,
pp.dt_start, pp.dt_end,
po.name POS_NAME
FROM Pers p
JOIN PersPositions pp
ON pp.ID_PERS = p.ID
AND '2022-01-01' BETWEEN pp.DT_START AND COALESCE(pp.DT_END, CURRENT_DATE)
JOIN Positions po
ON po.ID = pp.id_pos
👍2❤1
Всем привет и хороших выходных!
Сегодня утром провёл очередной урок онлайн-обучения SQL, PostgreSQL через Zoom. У нас пятый уроки из 18ти и мы уже учимся группировать данные.
Если кому-то пока сложно даются группировки, сложно понять что указывать в блоке SELECT, а что в GROUP BY, то вот мини правило (можно пока просто запомнить):
все столбцы, которые мы хотим показать в блоке SELECT без агрегатных функций, должны быть и в блоке GROUP BY (например если мы группируем данные по PersonID и хотим вывести в блоке SELECT не только PersonID, но и FIO, то FIO также следует поместить в блок GROUP BY), но столбцы, которые есть в блоке GROUP BY, не обязательно выводить в блоке SELECT (по желанию). Возможно, его лучше прочитать два раза ☺️
Кстати, новая группа выходного дня онлайн обучения начинается уже на следующих выходных. Будем учиться по субботам и воскресеньям с 10:30 до 11:30. У нас уже 4 человека. Посмотреть программу курса и записаться можно здесь.
Сегодня утром провёл очередной урок онлайн-обучения SQL, PostgreSQL через Zoom. У нас пятый уроки из 18ти и мы уже учимся группировать данные.
Если кому-то пока сложно даются группировки, сложно понять что указывать в блоке SELECT, а что в GROUP BY, то вот мини правило (можно пока просто запомнить):
все столбцы, которые мы хотим показать в блоке SELECT без агрегатных функций, должны быть и в блоке GROUP BY (например если мы группируем данные по PersonID и хотим вывести в блоке SELECT не только PersonID, но и FIO, то FIO также следует поместить в блок GROUP BY), но столбцы, которые есть в блоке GROUP BY, не обязательно выводить в блоке SELECT (по желанию). Возможно, его лучше прочитать два раза ☺️
Кстати, новая группа выходного дня онлайн обучения начинается уже на следующих выходных. Будем учиться по субботам и воскресеньям с 10:30 до 11:30. У нас уже 4 человека. Посмотреть программу курса и записаться можно здесь.
prime-soft.biz
Prime | Курс SQL, PostgreSql
Уроки и курсы SQL, PostgreSQL, Базы данных.
👍1
Аудит - это хорошо! Особенно, когда он комплексный!
На прошлой неделе для одной из компаний подмосковья, для которой мы пишем и сопровождаем программное обеспечение уже более 10ти лет, подготовили результат аудита нашего программного кода. Компания, которая подготавливала аудит, разумеется, сторонняя, и должна была дать оценку нашей работе. На подготовку результатов аудита ушло около трёх недель.
Интересно, наверное, узнать результаты? В целом код неплохой (уже хорошо), но местами, в рамках одного запроса, допущено дублирование фрагментов SQL-кода. В рамках кода хранимых процедур отсутствуют составные индексы.
Начну с последнего: составные индексы у нас есть (интересно как они смотрели), иногда без последнего столбца в списке столбцов индекса, но на месте это не играло особой роли.
Дублирование фрагментов SQL-кода в рамках одного запроса иногда делается намерено: получение одних данных по разным условиям из одних и тех же таблиц иногда лучше сделать через UNION, не используя сложные вычисления или оператор OR.
Подходить к оценке кода, который отлаживался 10 лет нужно комплексно. Обязательно брать во внимание что и как используется. Даже собственную оценку нужно ставить под сомнения. Как результат: нам пришлось давать свои комментарии заказчику по пунктам аудита🙂 Принимаем во внимание , что и за три недели очень сложно комплексно оценить программный код, который писался, дополнялся в течение 10ти лет.
На прошлой неделе для одной из компаний подмосковья, для которой мы пишем и сопровождаем программное обеспечение уже более 10ти лет, подготовили результат аудита нашего программного кода. Компания, которая подготавливала аудит, разумеется, сторонняя, и должна была дать оценку нашей работе. На подготовку результатов аудита ушло около трёх недель.
Интересно, наверное, узнать результаты? В целом код неплохой (уже хорошо), но местами, в рамках одного запроса, допущено дублирование фрагментов SQL-кода. В рамках кода хранимых процедур отсутствуют составные индексы.
Начну с последнего: составные индексы у нас есть (интересно как они смотрели), иногда без последнего столбца в списке столбцов индекса, но на месте это не играло особой роли.
Дублирование фрагментов SQL-кода в рамках одного запроса иногда делается намерено: получение одних данных по разным условиям из одних и тех же таблиц иногда лучше сделать через UNION, не используя сложные вычисления или оператор OR.
Подходить к оценке кода, который отлаживался 10 лет нужно комплексно. Обязательно брать во внимание что и как используется. Даже собственную оценку нужно ставить под сомнения. Как результат: нам пришлось давать свои комментарии заказчику по пунктам аудита🙂 Принимаем во внимание , что и за три недели очень сложно комплексно оценить программный код, который писался, дополнялся в течение 10ти лет.
👍10❤1
Всем хорошего понедельника!
Небольшая задача по SQL. В таблице CLIENTS всего 10 строк. Какой результат вернёт следующий запрос (на примере ORACLE или MySQL): SELECT * FROM CLIENTS WHERE EXISTS (SELECT NULL FROM DUAL)
Небольшая задача по SQL. В таблице CLIENTS всего 10 строк. Какой результат вернёт следующий запрос (на примере ORACLE или MySQL): SELECT * FROM CLIENTS WHERE EXISTS (SELECT NULL FROM DUAL)
Anonymous Quiz
10%
Запрос вернёт одну строку
41%
Запрос вернёт всех клиентов
34%
Запрос вернёт пустой набор данных
15%
Будет SQL ошибка выполнения запроса
❤2
Почему язык Go так популярен:
- высокая производительность! Go компилируется в машинный код — это почти как C по скорости;
- простота развёртывания. Один бинарник — и всё работает, легко деплоить даже на слабых VPS;
- низкий порог входа — проще, чем Java, производительнее, чем Python;
- хорошо читаемый код;
- лёгкая масштабируемость!
🇷🇺 Примеры использования Go в России в больших компаниях:
• Сбер (SberDevices, СберМаркет) — используют Go для микросервисов.
• Яндекс — частично использует Go, особенно в проектах, где важна производительность (например, в облаке или инфраструктуре).
• Ozon — активно использует Go, особенно для микросервисов.
• Wildberries — часть систем на Go.
• Тинькофф — микросервисы и высоконагруженные сервисы.
• Авито — Go используется для части бэкенда и инфраструктуры.
• VK (ex-Mail.ru) — в некоторых инфраструктурных сервисах.
• Skyeng, Dodo Pizza, Самокат, Яндекс.Еда — используют Go в production.
🧑💻 Стартапы и продуктовые компании:
• Go часто становится языком №1 в новых проектах, особенно если:
• Нужны микросервисы.
• Требуется высокая производительность без лишней сложности.
• Команда небольшая, а нужны стабильность и читаемость.
- высокая производительность! Go компилируется в машинный код — это почти как C по скорости;
- простота развёртывания. Один бинарник — и всё работает, легко деплоить даже на слабых VPS;
- низкий порог входа — проще, чем Java, производительнее, чем Python;
- хорошо читаемый код;
- лёгкая масштабируемость!
🇷🇺 Примеры использования Go в России в больших компаниях:
• Сбер (SberDevices, СберМаркет) — используют Go для микросервисов.
• Яндекс — частично использует Go, особенно в проектах, где важна производительность (например, в облаке или инфраструктуре).
• Ozon — активно использует Go, особенно для микросервисов.
• Wildberries — часть систем на Go.
• Тинькофф — микросервисы и высоконагруженные сервисы.
• Авито — Go используется для части бэкенда и инфраструктуры.
• VK (ex-Mail.ru) — в некоторых инфраструктурных сервисах.
• Skyeng, Dodo Pizza, Самокат, Яндекс.Еда — используют Go в production.
🧑💻 Стартапы и продуктовые компании:
• Go часто становится языком №1 в новых проектах, особенно если:
• Нужны микросервисы.
• Требуется высокая производительность без лишней сложности.
• Команда небольшая, а нужны стабильность и читаемость.
❤1