Пишем на SQL
1.92K subscribers
38 photos
6 videos
7 files
97 links
Уроки по SQL. Изучаем базы данных на примере СУБД ORACLE, MySQL, MS SQL Server, PostgreSql
Download Telegram
Какое количество строк вернёт запрос SELECT * FROM CLIENTS WHERE EXISTS (SELECT COUNT(*) FROM INVOICES WHERE ID_CLIENT = CLIENTS.ID)
Anonymous Quiz
10%
0
47%
1
24%
2
16%
3
2%
4
1%
6
👍9👎9🦄3
Обучение на ошибках (особенно на своих 😀) - один из самых эффективных методов обучения!
Здесь нужно было заметить неправильное использование EXISTS.

Оператор EXISTS используют для проверки того, возвращается ли что-то подзапросом, указанным в скобках. Как правило, в скобках для оператора EXISTS/NOT EXISTS пишут:

SELECT *

или:

SELECT 1

В задаче выше нарочно допущена ошибка (в EXISTS нарочно написал SELECT COUNT).

SELECT COUNT всегда будет возвращать данные. Написанный в скобочках подзапрос всегда будет возвращать количество, хоть и иногда 0. Но данные-то есть. Ноль - это тоже данные. Поэтому EXISTS будет давать TRUE для каждой из трех строчек основного запроса.

И еще немного по теме COUNT напомню: COUNT всегда возвращает значение. Никогда не возвращает NULL. Если по условиям WHERE (под)запроса не будет подходящих данных, то COUNT вернёт 0, не NULL.
👍292🤯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));
Всем доброго понедельника!

Лёгкая задачка по 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 и базам данных!
Спасибо большое за такие слова!
🔥211
Всем привет!

Предлагаю решить ещё одну задачу по 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 Некрасов Иван Ильич
👍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

С удовольствием отвечу на все вопросы!
👍1
Отзыв ученицы предыдущего потока он-лайн интенсива по SQL, PostgreSql
🔥8👍1
Доброе утро, друзья!

Напоминаю, что завтра начинаем интенсив по 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);

В обеих перечисленных таблицах нет ни одной строки. Что произойдёт при выполнении следующей команды?
Всем привет!

В таблицах TBL1 и TBL2 есть столбец NOMER. В таблице TBL1 три строки, в таблице TBL2 четыре строки.

Какое минимальное и какое максимальное количество строк мы можем получить в результате следующего запроса?

SELECT *
FROM TBL1
LEFT JOIN TBL2
ON TBL1.NOMER = TBL2.NOMER
1
Всем доброе пятничное утро🙂

Один монитор - скорее всего работает в айти.
Два монитора - программист.
Три монитора - системный администратор.
Четыре монитора - охранник.
😁40👍6💩1