Пишем на SQL
رفتن به کانال در Telegram
Уроки по SQL. Изучаем базы данных на примере СУБД ORACLE, MySQL, MS SQL Server, PostgreSql Мой курс по SQL и базам данных: https://prime-soft.biz/courses/sql Связь со мной @iliahohlov
نمایش بیشتر1 900
مشترکین
-124 ساعت
+17 روز
-130 روز
آرشیو پست ها
1 900
В таблице DOCUMENTS четыре строки. В поле DOC_TYPE в первых двух строках число 1, в двух других строках число 2. Запрос SELECT DISTINCT COUNT(DOC_TYPE) FROM DOCUMENTS вернёт число:
1 900
Обучение на ошибках (особенно на своих 😀) - один из самых эффективных методов обучения!
Здесь нужно было заметить неправильное использование EXISTS.
Оператор EXISTS используют для проверки того, возвращается ли что-то подзапросом, указанным в скобках. Как правило, в скобках для оператора EXISTS/NOT EXISTS пишут:
SELECT *
или:
SELECT 1
В задаче выше нарочно допущена ошибка (в EXISTS нарочно написал SELECT COUNT).
SELECT COUNT всегда будет возвращать данные. Написанный в скобочках подзапрос всегда будет возвращать количество, хоть и иногда 0. Но данные-то есть. Ноль - это тоже данные. Поэтому EXISTS будет давать TRUE для каждой из трех строчек основного запроса.
И еще немного по теме COUNT напомню: COUNT всегда возвращает значение. Никогда не возвращает NULL. Если по условиям WHERE подзапроса не будет подходящих данных, то COUNT вернёт 0, не NULL.
1 900
Какое количество строк вернёт запрос SELECT * FROM CLIENTS WHERE EXISTS (SELECT COUNT(*) FROM INVOICES WHERE ID_CLIENT = CLIENTS.ID)
1 900
В таблице CLIENTS три строки:
ID NAME
1 АО "Проблемы и решения"
2 АО "Решения без проблем"
3 ИП "Иванов Иван Иванович"
В таблице INVOICES две строки:
ID ID_CLIENT DATE_INV
1 1 03.09.2024
2 1 03.09.2024
1 900
В таблице INVOICES две строки. В первой строке в столбце QTY число 25, во второй строке в этом же столбце лежит NULL.
Каким будет результат запроса: SELECT MIN(QTY) FROM INVOICES
1 900
Всем доброго понедельника!
Надеюсь, неделя началась отлично, или, по крайней мере, не плохо☺️
Предлашаю небольшую задачу по SQL, похожую на одну из тех, что мы с Вами уже решали.
1 900
Друзья, всем отличной пятницы!
На следующей неделе начинаем интенсив SQL, PostgreSQL!
У нас будет:
10 насыщенных онлайн занятий (с записью эфира);
Много совместной работы в режиме онлайн! Будет много практики! Готовимся работать, не просто слушать:)
Закрытая группа Телеграм с записями наших встреч и кратким конспектом! Здесь же я буду отвечать и на все вопросы по самостоятельным задачам (они тоже будут, работа один-на-один с базой данных обязательна).
Сертификат по окончанию он-лайн курса! И помощь в составлении резюме если потребуется!
Подробнее:
https://prime-soft.biz/courses/postgresql
1 900
Сколько строк вернёт следующий запрос:
SELECT * FROM CODES JOIN CODES2 ON CODES.CODE = CODES2.CODE
1 900
Друзья, всем добрый день!
Очередная задача по SQL!
В базе данных есть две таблицы CODES и CODES2, в каждой из которых есть столбец CODE. В таблицах CODES и CODES2 всего по три строки. В первой строке обеих таблиц в столбце CODE - значение: 1, во второй строке значение тоже 1 и в третьей строке - NULL.
1 900
Друзья, до 16го сентября предлагаем пакет курсов:
"SQL. Базы данных. ORACLE"
и "Программирование в PL/SQL (ORACLE)"
по специальной цене:
14.990 ₽ за оба курса!
Записаться и оплатить можно картой российского банка на нашем сайте:
https://prime-soft.biz/pay/210
Если у Вас нет карты российского банка, но напишите, пожалуйста, нам на info@prime-soft.biz и мы предложим другие способы оплаты из-за границы!
1 900
Всем хорошей пятницы!
Действительно ли, что:
Oracle запрос SQL, использующий условие EXISTS очень неэффективен, так как подзапрос перезапускается для каждой строки в таблице внешнего запроса.
Есть более эффективные способы написания большинства запросов, которые бы не использовали условие EXISTS.
Ответ:
Для решения каждой задачи есть свои эффективные методы. Если EXISTS применяется в основном запросе выборки из небольшой таблицы для проверки данных в большой таблице, и если выборка из большой таблицы будет вестись по индексам, то его использование будет очень эффективно. Вот пример:
В таблице клиентов не более 1000 строк.
В таблице PAYMENTS миллион строк и таблица проиндексована по столбцу CLIENT_ID.
Нужно выбрать клиентов, по которым была хотя бы одна оплата.
SELECT *
FROM CLIENTS
WHERE EXISTS (SELECT 1 FROM PAYMENTS WHERE PAYMENTS.CLIENT_ID = CLIENTS.CLIENT_ID)
По таблице CLIENTS мы видим полный перебор строк (TABLE ACCESS FULL), но с проверкой есть ли платеж по клиенту. Запрос, отбирая клиентов, проверит есть ли в таблице PAYMENTS хотя бы одна строчка с таким CLIENT_ID. Хотя бы одна. И, так как на таблицу PAYMENTS есть индекс для выборки по столбцу CLIENT_ID, то таблица PAYMENTS вообще не будет читаться! Согласно приведённому запросу нам от неё не нужны данные. Нужно просто проверить есть ли строчка, где бы в столбце CLIENT_ID было бы конкретное значение. СУБД посмотрит в индекс и сразу поймёт есть ли строчка с таким то значением CLIENT_ID. Самого чтения миллионной таблицы не будет.
Многие СУБД, при правильной их настройке, хранят индексы постоянно используемых таблиц в оперативной памяти.
Стоит, всё же, заметить, что при использовании EXISTS или других подзапросов в транзакциях в некоторых СУБД могут быть проблемы.
Расскажу об этом дополнительно!
1 900
Какой запрос покажет 10 городов клиентов без повторов, расположенных по алфавиту?
1 900
Всем отличного понедельника!
Новая задача с собеседования. Базовый уровень.
В базе данных есть таблица адресов клиентов CLIENT_ADDR. Таблица CLIENT_ADDR, среди прочих, имеет столбец CITY_NAME (город). Какой из запросов ниже покажет 10 городов клиентов (10 значений из столбца CITY_NAME)? Один и тот же город не должен быть показан в результирующей таблице более одного раза. Полученный список городов клиентов должен быть упорядочен по алфавиту.
1 900
Какая ошибка допущена в следующей SQL команде?
CREATE VIEW CLIENTS_INFO
AS SELECT INN, NAME, PHONE
FROM CLIENTS, CLIENT_CONTACTS
WHERE CLIENTS.CLIENT_ID = CLIENT_CONTACTS.CLIENT_ID
1 900
Как насчёт ещё одной задачи по SQL?
Задача-тест с собеседования.
Необходимо создать представление (VIEW) с названием CLIENTS_INFO, содержащее следующую информацию о клиентах: INN, NAME, PHONE.
1 900
10-ти дневный он-лайн интенсив по SQL и PostgreSql. Начинаем 24.09.2024. У нас уже три участника! Не пропусти! Узнать больше и записаться можно тут: https://prime-soft.biz/courses/postgresql
1 900
Первичный ключ является суррогатным, если он состоит из столбца, который не содержит бизнес-данных и был создан исключительно для возможности идентификации записей.
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
