Обучение на ошибках (особенно на своих 😀) - один из самых эффективных методов обучения!
Здесь нужно было заметить неправильное использование EXISTS.
Оператор EXISTS используют для проверки того, возвращается ли что-то подзапросом, указанным в скобках. Как правило, в скобках для оператора EXISTS/NOT EXISTS пишут:
SELECT *
или:
SELECT 1
В задаче выше нарочно допущена ошибка (в EXISTS нарочно написал SELECT COUNT).
SELECT COUNT всегда будет возвращать данные. Написанный в скобочках подзапрос всегда будет возвращать количество, хоть и иногда 0. Но данные-то есть. Ноль - это тоже данные. Поэтому EXISTS будет давать TRUE для каждой из трех строчек основного запроса.
И еще немного по теме COUNT напомню: COUNT всегда возвращает значение. Никогда не возвращает NULL. Если по условиям WHERE (под)запроса не будет подходящих данных, то COUNT вернёт 0, не NULL.
Здесь нужно было заметить неправильное использование EXISTS.
Оператор EXISTS используют для проверки того, возвращается ли что-то подзапросом, указанным в скобках. Как правило, в скобках для оператора EXISTS/NOT EXISTS пишут:
SELECT *
или:
SELECT 1
В задаче выше нарочно допущена ошибка (в EXISTS нарочно написал SELECT COUNT).
SELECT COUNT всегда будет возвращать данные. Написанный в скобочках подзапрос всегда будет возвращать количество, хоть и иногда 0. Но данные-то есть. Ноль - это тоже данные. Поэтому EXISTS будет давать TRUE для каждой из трех строчек основного запроса.
И еще немного по теме COUNT напомню: COUNT всегда возвращает значение. Никогда не возвращает NULL. Если по условиям WHERE (под)запроса не будет подходящих данных, то COUNT вернёт 0, не NULL.
👍29❤2🤯2👎1👾1
В таблице DOCUMENTS четыре строки. В поле DOC_TYPE в первых двух строках число 1, в двух других строках число 2. Запрос SELECT DISTINCT COUNT(DOC_TYPE) FROM DOCUMENTS вернёт число:
Anonymous Quiz
1%
Null
1%
0
7%
1
41%
2
5%
3
32%
4
13%
Выполнение запроса приведёт к SQL ошибке
👍11
В базе данных имеются, среди прочих, таблицы CLIENTS и CLIENTS_JUR_INFO, определённые следующим образом:
CREATE TABLE CLIENTS (
ID_CLIENT NUMBER NOT NULL PRIMARY KEY,
NAME_CLIENT VARCHAR(100) NOT NULL,
PHONE VARCHAR(30) DEFAULT NULL,
EMAIL VARCHAR(30) DEFAULT NULL,
IS_JUR NUMBER(2) DEFAULT 0 NOT NULL);
CREATE TABLE CLIENTS_JUR_INFO (
ID_CLIENT NUMBER NOT NULL PRIMARY KEY,
INN VARCHAR(20) DEFAULT NULL,
KPP VARCHAR(20) DEFAULT NULL,
CONSTRAINT FK1 FOREIGN KEY (ID_CLIENT) REFERENCES CLIENTS (ID_CLIENT));
CREATE TABLE CLIENTS (
ID_CLIENT NUMBER NOT NULL PRIMARY KEY,
NAME_CLIENT VARCHAR(100) NOT NULL,
PHONE VARCHAR(30) DEFAULT NULL,
EMAIL VARCHAR(30) DEFAULT NULL,
IS_JUR NUMBER(2) DEFAULT 0 NOT NULL);
CREATE TABLE CLIENTS_JUR_INFO (
ID_CLIENT NUMBER NOT NULL PRIMARY KEY,
INN VARCHAR(20) DEFAULT NULL,
KPP VARCHAR(20) DEFAULT NULL,
CONSTRAINT FK1 FOREIGN KEY (ID_CLIENT) REFERENCES CLIENTS (ID_CLIENT));
Между таблицами CLIENTS и CLIENTS_JUR_INFO:
Anonymous Quiz
57%
связь один-к-одному
33%
связь один-ко-многим
5%
связь многие-ко-многим
5%
нет связи
Всем доброго понедельника!
Лёгкая задачка по SQL. Ставлю одну звезду уровня сложности из пяти.
Лёгкая задачка по SQL. Ставлю одну звезду уровня сложности из пяти.
🔥7
В столбце COLOR таблицы GOODS указан цвет товара. У многих товаров может быть один и тот же цвет. Какой из запросов ниже вернёт количество возможных цветов товаров (один и тот же цвет не нужно учитывать более одного раза)?
Anonymous Quiz
5%
SELECT COUNT(t.COLOR) FROM GOODS t
1%
SELECT SUM(t.COLOR) FROM GOODS t
30%
SELECT DISTINCT COUNT(t.COLOR) FROM GOODS t
3%
SELECT DISTINCT SUM(t.COLOR) FROM GOODS t
59%
SELECT COUNT(DISTINCT t.COLOR) FROM GOODS t
3%
SELECT SUM(DISTINCT t.COLOR) FROM GOODS t
Всем привет!
Предлагаю решить ещё одну задачу по SQL🙂💪
В таблице SALES_TOTAL хранятся итоги по продажам каждого товара за каждый день. Запрос
SELECT t.*
FROM SALES_TOTAL t
WHERE t.PRODUCT_ID = 8
AND t.SALE_DATE >= '2024-01-01'
ORDER BY t.SALE_DATE
возвращает данные по продажам некоторого товара с идентификатором 8 за каждый день, начиная с начала 2024 года:
PRODUCT_ID SALE_DATE AMOUNT
8 2024-01-01 5
8 2024-01-02 4
8 2024-01-03 7
8 2024-01-04 8
...
В столбце AMOUNT отображается количество штук проданного товара за каждый день.
Предлагаю решить ещё одну задачу по SQL🙂💪
В таблице SALES_TOTAL хранятся итоги по продажам каждого товара за каждый день. Запрос
SELECT t.*
FROM SALES_TOTAL t
WHERE t.PRODUCT_ID = 8
AND t.SALE_DATE >= '2024-01-01'
ORDER BY t.SALE_DATE
возвращает данные по продажам некоторого товара с идентификатором 8 за каждый день, начиная с начала 2024 года:
PRODUCT_ID SALE_DATE AMOUNT
8 2024-01-01 5
8 2024-01-02 4
8 2024-01-03 7
8 2024-01-04 8
...
В столбце AMOUNT отображается количество штук проданного товара за каждый день.
Чтобы в результирующей таблице, помимо существующих столбцов, получить ещё один столбец с количеством проданного товара с начала года по день, указанный в таблице накопительным итогом, нужно в блок SELECT через запятую добавить:
Anonymous Quiz
21%
COUNT(AMOUNT) OVER(PARTITION BY PRODUCT_ID ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
4%
COUNT(AMOUNT) OVER ()
25%
SUM(AMOUNT) OVER (PARTITION BY SALE_DATE)
41%
SUM(AMOUNT) OVER (ORDER BY SALE_DATE ROWS UNBOUNDED PRECEDING)
3%
LAST_VALUE(AMOUNT) OVER (PARTITION BY SALE_DATE)
2%
LAST_VALUE(AMOUNT) OVER (ORDER BY SALE_DATE)
4%
LAST_VALUE(AMOUNT) OVER (ORDER BY SALE_DATE ROWS UNBOUNDED FOLLOWING)
👍4🔥2👻1
При каком уровне изоляции при повторном чтении таблицы в рамках одной транзакции будут получены те же данные, даже если в промежутке между чтениями они были изменены другой транзакцией и эти изменения подтверждены командой COMMIT?
Anonymous Quiz
32%
REPEATABLE READ
18%
SERIALIZABLE
32%
READ COMMITTED
18%
READ UNCOMMITTED
👍1
Всем привет!
Небольшая задача по SQL на внимательность (и на базовые знания):
В таблице PERSONS четыре записи:
ID NAME
1 Иванов Иван Иванович
2 Петров Павел Сергеевич
3 Сидовова Наталья Ивановна
4 Некрасов Иван Ильич
Небольшая задача по SQL на внимательность (и на базовые знания):
В таблице PERSONS четыре записи:
ID NAME
1 Иванов Иван Иванович
2 Петров Павел Сергеевич
3 Сидовова Наталья Ивановна
4 Некрасов Иван Ильич
👍4
Какое количество строк вернёт запрос SELECT * FROM PERSONS WHERE NAME LIKE 'Иван'
Anonymous Quiz
55%
0
4%
1
16%
2
21%
3
2%
4
3%
5
👍9🥱5
Друзья, набираем небольшую группу для обучения SQL и PostgreSql по выходным. Планируем начинать уже в эту субботу.
Присоединяйтесь! В этом году это последний набор на SQL. PostgreSql!
👉 сб и вс с 9:30 до 11:00
👉 всего 10 онлайн занятий
🧑💻 на уроках работаем, а не просто смотрим
👨💻 д/з с индивидуальным разобором и корректировкой
Всего 8.900 р за все!
Программа курса:
https://prime-soft.biz/courses/postgresql
Записаться и оплатить тут:
https://prime-soft.biz/pay/209
С удовольствием отвечу на все вопросы!
Присоединяйтесь! В этом году это последний набор на SQL. PostgreSql!
👉 сб и вс с 9:30 до 11:00
👉 всего 10 онлайн занятий
🧑💻 на уроках работаем, а не просто смотрим
👨💻 д/з с индивидуальным разобором и корректировкой
Всего 8.900 р за все!
Программа курса:
https://prime-soft.biz/courses/postgresql
Записаться и оплатить тут:
https://prime-soft.biz/pay/209
С удовольствием отвечу на все вопросы!
prime-soft.biz
Prime | Курс SQL, PostgreSql
Уроки и курсы SQL, PostgreSQL, Базы данных.
👍1
Доброе утро, друзья!
Напоминаю, что завтра начинаем интенсив по SQL, PostgreSQL. Обучение будет идти по выходным по утрам. Всего 10 онлайн занятий (5 недель). Плюс закрытая группа Телеграм, куда я буду выкладывать записи наших онлайн встреч. На онлайн уроках будет интерактив, будем работать, не просто смотреть. После каждого урока - самостоятельная практическая работа, решение которой я буду проверять индивидуально. По завершению интенсива - сертификат!
Записаться и оплатить рос.картой здесь: https://prime-soft.biz/pay/209
Для оплаты из-за граница напишите на info@prime-soft.biz
Напоминаю, что завтра начинаем интенсив по SQL, PostgreSQL. Обучение будет идти по выходным по утрам. Всего 10 онлайн занятий (5 недель). Плюс закрытая группа Телеграм, куда я буду выкладывать записи наших онлайн встреч. На онлайн уроках будет интерактив, будем работать, не просто смотреть. После каждого урока - самостоятельная практическая работа, решение которой я буду проверять индивидуально. По завершению интенсива - сертификат!
Записаться и оплатить рос.картой здесь: https://prime-soft.biz/pay/209
Для оплаты из-за граница напишите на info@prime-soft.biz
В базе данных есть таблицы TMP_TABLE и TMP_TABLE2, определённые следующим образом:
CREATE TABLE TMP_TABLE(
VAL_STR VARCHAR(100) DEFAULT NULL);
CREATE TABLE TMP_TABLE2(
VAL_STR VARCHAR(100) NOT NULL);
В обеих перечисленных таблицах нет ни одной строки. Что произойдёт при выполнении следующей команды?
CREATE TABLE TMP_TABLE(
VAL_STR VARCHAR(100) DEFAULT NULL);
CREATE TABLE TMP_TABLE2(
VAL_STR VARCHAR(100) NOT NULL);
В обеих перечисленных таблицах нет ни одной строки. Что произойдёт при выполнении следующей команды?
INSERT INTO TMP_TABLE
(VAL_STR)
SELECT VAL_STR FROM TMP_TABLE2
(VAL_STR)
SELECT VAL_STR FROM TMP_TABLE2
Anonymous Quiz
19%
Запрос выдаст SQL-ошибку
12%
Вставится строка в таблицу TMP_TABLE со значением NULL в столбце VAL_STR
11%
Вставится строка в таблицу TMP_TABLE со значением '' в столбце VAL_STR
59%
Запрос успешно выполнится, но не добавит строк в таблицу TMP_TABLE
👍2
Всем привет!
В таблицах TBL1 и TBL2 есть столбец NOMER. В таблице TBL1 три строки, в таблице TBL2 четыре строки.
Какое минимальное и какое максимальное количество строк мы можем получить в результате следующего запроса?
SELECT *
FROM TBL1
LEFT JOIN TBL2
ON TBL1.NOMER = TBL2.NOMER
В таблицах TBL1 и TBL2 есть столбец NOMER. В таблице TBL1 три строки, в таблице TBL2 четыре строки.
Какое минимальное и какое максимальное количество строк мы можем получить в результате следующего запроса?
SELECT *
FROM TBL1
LEFT JOIN TBL2
ON TBL1.NOMER = TBL2.NOMER
❤1
Какое минимальное и какое максимальное количество строк может вернуть написанный выше запрос?
Anonymous Quiz
13%
Минимально 0, максимально 4
8%
Минимально 0, максимально 12
6%
Минимально 1, максимально 3
26%
Минимально 3, максимально 3
14%
Минимально 3, максимально 4
24%
Минимально 3, максимально 12
5%
Минимально 4, максимально 4
2%
Минимально 4, максимально 12
👍3
Всем доброе пятничное утро🙂
Один монитор - скорее всего работает в айти.
Два монитора - программист.
Три монитора - системный администратор.
Четыре монитора - охранник.
Один монитор - скорее всего работает в айти.
Два монитора - программист.
Три монитора - системный администратор.
Четыре монитора - охранник.
😁40👍6💩1
Всем доброго вечера!
В ряде случаев, помимо вывода требуемой информации, SQL-запросы пишут так, чтобы получать дополнительные какие-то числа или текст. К примеру, может потребоваться номер строки выводимых данных (по порядку) или какой-то признак четная строка или нечётная.
В разных СУБД такое можно сделать разными способами, но часто алгоритмы похожи.
Для вывода номера строки (вместе с остальными выводящимися данными) можно использовать аналитическую (оконную) функцию ROW_NUMBER.
Для вывода признака чётная строка или нечётная можно использовать обычную функцию MOD, возвращающую остаток от деления. Если число (например, номер строки таблицы) разделилось полностью на два (без остатка), значит число чётное (значит строка чётная).
Для чего может потребоваться выводить признак строки чётная строка или нечётная? Например, для дальнейшего цветового оформления выводимых табличных данных: если в строке в столбце-признаке такое-то значение, то сделать фон строки немного темнее/светлее.
Или, например, для равномерного распределения строк выводимых данных на две группы. А если функции MOD указать не число 2 в качестве делителя, а какое-то другое, то можно равномерно распределить все строки таблицы на это указанное количество групп.
В ряде случаев, помимо вывода требуемой информации, SQL-запросы пишут так, чтобы получать дополнительные какие-то числа или текст. К примеру, может потребоваться номер строки выводимых данных (по порядку) или какой-то признак четная строка или нечётная.
В разных СУБД такое можно сделать разными способами, но часто алгоритмы похожи.
Для вывода номера строки (вместе с остальными выводящимися данными) можно использовать аналитическую (оконную) функцию ROW_NUMBER.
Для вывода признака чётная строка или нечётная можно использовать обычную функцию MOD, возвращающую остаток от деления. Если число (например, номер строки таблицы) разделилось полностью на два (без остатка), значит число чётное (значит строка чётная).
Для чего может потребоваться выводить признак строки чётная строка или нечётная? Например, для дальнейшего цветового оформления выводимых табличных данных: если в строке в столбце-признаке такое-то значение, то сделать фон строки немного темнее/светлее.
Или, например, для равномерного распределения строк выводимых данных на две группы. А если функции MOD указать не число 2 в качестве делителя, а какое-то другое, то можно равномерно распределить все строки таблицы на это указанное количество групп.
👍20