SQLize
Online
/
PHPize Online
/
SQLtest Online
A
A
A
Share
Donate
Blog
Popular
Donate
A
A
A
Share
Blog
Popular
SQLize.online is a free online SQL environment for quickly running, experimenting with and sharing code.
You can run your SQL code on top of the most popular RDBMS including MySQL, MariaDB, SQLite, PostgreSQL, Oracle and Microsoft SQL Server.
SQL code:
Upload
Copy
Format
Clear
/*первое задание*/ create table clients( id number(10) primary key, name varchar2(1000) not null, place_of_birth varchar2(1000), date_of_birth date, address varchar2(1000), passport varchar2(100) ); create table accounts( id number(10) primary key, name varchar2(100) not null, saldo number(10,2) defaul 0, client_ref number(10) not null, open_date date, close_date date, product_ref number(10), acc_num varchar2(25), constraint acc_cl_fk foreign key (client_ref) references client(id), constraint acc_prod_fk foreign key (product_ref) references product(id) ); create table product( id number(10) primary key, product_type_id number(10), name varchar2(100) not null, client_ref number(10) not null, open_date date, close_date date, constraint prod_cl_fk foreign key (client_ref) references client(id), constraint prod_prodtype_fk foreign key (product_type_id) references product_type(id) ); create table product_type( id number(10) primary key, name varchar2(100) not null, begin_date date, end_date date, tarif ref number(10), constraint prod_type_tar_fk foreign key (tarif_ref) references tarifs(id) ); create table records( id number(10) primary key, dt number(1) CHECK (DT IN (0, 1)), sum number(10,2) not null, acc_ref number(10) not null, oper_date date not null, constraint rec_acc_fk foreign key (acc_ref) references accounts(id) ); create table tarifs( id number(10) primary key, name varchar2(100) not null, cost (10,2) ); /*второе задание*/ insert into tarifs values (1,'Тариф за выдачу кредита', 10); insert into tarifs values (2,'Тариф за открытие счета', 10); insert into tarifs values (3,'Тариф за обслуживание карты', 10); insert into productype values (1, 'КРЕДИТ', to_date('01.01.2018','DD.MM.YYYY'), null, 1); insert into productype values (2, 'ДЕПОЗИТ', to_date('01.01.2018','DD.MM.YYYY'), null, 2); insert into productype values (3, 'КАРТА', to_date('01.01.2018','DD.MM.YYYY'), null, 3); insert into clients values (1, 'Сидоров Иван Петрович', 'Россия, Московская облать, г. Пушкин', to_date('01.01.2001','DD.MM.YYYY'), 'Россия, Московская облать, г. Пушкин, ул. Грибоедова, д. 5', '2222 555555, выдан ОВД г. Пушкин, 10.01.2015'); insert into clients values (2, 'Иванов Петр Сидорович', 'Россия, Московская облать, г. Клин', to_date('01.01.2001','DD.MM.YYYY'), 'Россия, Московская облать, г. Клин, ул. Мясникова, д. 3', '4444 666666, выдан ОВД г. Клин, 10.01.2015'); insert into clients values (3, 'Петров Сиодр Иванович', 'Россия, Московская облать, г. Балашиха', to_date('01.01.2001','DD.MM.YYYY'), 'Россия, Московская облать, г. Балашиха, ул. Пушкина, д. 7', '4444 666666, выдан ОВД г. Клин, 10.01.2015'); insert into products values (1, 1, 'Кредитный договор с Сидоровым И.П.', 1, to_date('01.06.2015','DD.MM.YYYY'), null); insert into products values (2, 2, 'Депозитный договор с Ивановым П.С.', 2, to_date('01.08.2017','DD.MM.YYYY'), null); insert into products values (3, 3, 'Карточный договор с Петровым С.И.', 3, to_date('01.08.2017','DD.MM.YYYY'), null); insert into accounts values (1, 'Кредитный счет для Сидоровым И.П.', -2000, 1, to_date('01.06.2015','DD.MM.YYYY'), null, 1, '45502810401020000022'); insert into accounts values (2, 'Депозитный счет для Ивановым П.С.', 6000, 2, to_date('01.08.2017','DD.MM.YYYY'), null, 2, '42301810400000000001'); insert into accounts values (3, 'Карточный счет для Петровым С.И.', 8000, 3, to_date('01.08.2017','DD.MM.YYYY'), null, 3, '40817810700000000001'); insert into records values (1, 1, 5000, 1, to_date('01.06.2015','DD.MM.YYYY')); insert into records values (2, 0, 1000, 1, to_date('01.07.2015','DD.MM.YYYY')); insert into records values (3, 0, 2000, 1, to_date('01.08.2015','DD.MM.YYYY')); insert into records values (4, 0, 3000, 1, to_date('01.09.2015','DD.MM.YYYY')); insert into records values (5, 1, 5000, 1, to_date('01.10.2015','DD.MM.YYYY')); insert into records values (6, 0, 3000, 1, to_date('01.10.2015','DD.MM.YYYY')); insert into records values (7, 0, 10000, 2, to_date('01.08.2017','DD.MM.YYYY')); insert into records values (8, 1, 1000, 2, to_date('05.08.2017','DD.MM.YYYY')); insert into records values (9, 1, 2000, 2, to_date('21.09.2017','DD.MM.YYYY')); insert into records values (10, 1, 5000, 2, to_date('24.10.2017','DD.MM.YYYY')); insert into records values (11, 0, 6000, 2, to_date('26.11.2017','DD.MM.YYYY')); insert into records values (12, 0, 120000, 3, to_date('08.09.2017','DD.MM.YYYY')); insert into records values (13, 1, 1000, 3, to_date('05.10.2017','DD.MM.YYYY')); insert into records values (14, 1, 2000, 3, to_date('21.10.2017','DD.MM.YYYY')); insert into records values (15, 1, 5000, 3, to_date('24.10.2017','DD.MM.YYYY')); /*третье задание*/ -- Клиенты без кредитов (для задания 4) insert into clients values (4, 'Кузнецов Андрей Алексеевич', 'Россия, Санкт-Петербург', to_date('01.01.1990','DD.MM.YYYY'), 'Россия, Санкт-Петербург, ул. Ленина, д. 10', '3333 777777, выдан ОВД г. Санкт-Петербург, 10.01.2010'); insert into products values (4, 2, 'Депозитный договор с Кузнецовым А.А.', 4, to_date('01.01.2023','DD.MM.YYYY'), null); insert into accounts values (4, 'Депозитный счет для Кузнецова А.А.', 15000, 4, to_date('01.01.2023','DD.MM.YYYY'), null, 2, '42301810400000000002'); -- Движения в рамках одного дня (для задания 5) insert into records values (16, 1, 5000, 4, to_date('15.12.2024','DD.MM.YYYY')); insert into records values (17, 0, 2000, 4, to_date('15.12.2024','DD.MM.YYYY')); -- Операции за прошедший месяц (для задания 6) insert into records values (18, 0, 3000, 2, to_date('15.11.2024','DD.MM.YYYY')); insert into records values (19, 1, 1000, 2, to_date('20.11.2024','DD.MM.YYYY')); -- Несоответствие балансов и операций (для задания 7) insert into accounts values (5, 'Счет с некорректным балансом', 1000, 1, to_date('01.01.2022','DD.MM.YYYY'), null, 1, '40817810700000000005'); insert into records values (20, 1, 2000, 5, to_date('02.01.2022','DD.MM.YYYY')); -- Баланс не учитывает это движение -- Погашенные кредиты с незакрытыми продуктами (для задания 8) insert into accounts values (6, 'Погашенный кредитный счет', 0, 1, to_date('01.06.2020','DD.MM.YYYY'), null, 1, '45502810401020000023'); insert into products values (5, 1, 'Кредитный договор с Петровым А.Н.', 6, to_date('01.06.2020','DD.MM.YYYY'), null); -- Продукты без движения более месяца (для задания 10) insert into accounts values (7, 'Счет без движения', 5000, 1, to_date('01.06.2022','DD.MM.YYYY'), null, 3, '40817810700000000007'); -- Последняя операция по счету более месяца назад insert into records values (21, 1, 1000, 7, to_date('01.10.2024','DD.MM.YYYY')); /*четвертое задание*/ select * from accounts a join products p on a.product_ref = p.id join product_type pt on p.product_type_id = pt.id where pt.name = 'ДЕПОЗИТ' and p.client_ref not in ( select distinct p.client_ref from products p join product_type pt on p.product_type_id = pt.id where pt.name = 'КРЕДИТ' and p.close_date is null ); /*пятое задание*/ select pt.name as product_type, r.oper_date, sum(case when r.dt = 1 then r.sum else 0 end) as debit_sum, sum(case when r.dt = 0 then r.sum else 0 end) as credit_sum from records r join accounts as a on r.account_id = a.id join products as p on a.product_id = p.id join product_type as pt on p.product_type_id = pt.id where r.oper_date = ('2024-12-15') group by pt.name, r.oper_date; /*шестое задание*/ select c.id as client_id, c.name as client_name, r.oper_date, SUM(r.sum) from clients c join accounts a on c.id = a.client_ref join records r on a.id = r.acc_ref where r.dt = 1 and r.oper_date >= ADD_MONTHS(TRUNC(SYSDATE), -1) and r.oper_date < TRUNC(SYSDATE) group by c.id, c.name, r.oper_date order by r.oper_date, c.name; /*седьмое задание это я не знаю*/ CREATE OR REPLACE PROCEDURE normalize_account_balances IS BEGIN -- Цикл по всем счетам FOR acc IN (SELECT id, saldo FROM accounts) LOOP -- Вычисляем реальный остаток по счёту на основе операций DECLARE real_balance NUMBER; BEGIN SELECT NVL(SUM(CASE WHEN r.dt = 0 THEN r.sum ELSE 0 END), 0) - -- Сумма кредитовых операций NVL(SUM(CASE WHEN r.dt = 1 THEN r.sum ELSE 0 END), 0) -- Сумма дебетовых операций INTO real_balance FROM records r WHERE r.acc_ref = acc.id; -- Ссылка на текущий счёт -- Если рассчитанный остаток не совпадает с текущим IF acc.saldo != real_balance THEN -- Обновляем остаток в таблице ACCOUNTS UPDATE accounts SET saldo = real_balance WHERE id = acc.id; DBMS_OUTPUT.PUT_LINE('Обновлен счет ID: ' || acc.id || ', новый остаток: ' || real_balance); END IF; END; END LOOP; -- Фиксируем изменения COMMIT; DBMS_OUTPUT.PUT_LINE('Нормализация остатков по счетам завершена.'); END; / /*восьмое задание*/ select distinct c.id as client_id, c.name as client_name, p.id as product_id, p.name as product_name, p.close_date as product_close_date, a.id as account_id, a.name as account_name, a.saldo from clients c join products p on c.id = p.client_ref join product_type pt on p.product_type_id = pt.id join accounts a on a.product_ref = p.id where pt.name = 'КРЕДИТ' and a.saldo = 0 and p.close_date is null; /*девятое задание*/ update products p set close_date = SYSDATE where id in ( select p.id from products p join product_type pt on p.product_type_id = pt.id join accounts a on a.product_ref = p.id left join records r on r.acc_ref = a.id and r.dt = 1 where pt.name = 'КРЕДИТ' and a.saldo = 0 and p.close_date is null and r.id is null ); /*десятое задание*/ update product_type pt set end_date = SYSDATE where id in ( select distinct pt.id from product_type pt join products p on p.product_type_id = pt.id join accounts a on a.product_ref = p.id left join records r on r.acc_ref = a.id where r.oper_date is null or r.oper_date < ADD_MONTHS(SYSDATE, -1) ); /*11 задание*/
SQL
Server:
MariaDB 11.4
MariaDB 11.5
MariaDB 10
MariaDB 10 Sakila (ReadOnly)
MySQL 5.7
MySQL 5.7 Sakila (ReadOnly)
MySQL 8.0
MySQL 8.0 Sakila (ReadOnly)
SQLite 3
SQLite 3 Preloaded
PostgreSQL 10 Bookings (ReadOnly)
PostgreSQL 11
PostgreSQL 12
PostgreSQL 13
PostgreSQL 14
PostgreSQL 15
MS SQL Server 2017
MS SQL Server 2019
MS SQL Server 2022
MS SQL Server 2022 AdventureWorks (ReadOnly)
Firebird 4.0
Firebird 4.0 (Employee)
Oracle Database 19c (HR)
Oracle Database 21c
Oracle Database 23c Free
SOQOL
Version
ER Diagram
Preserve result
Stuck with a problem?
Got Error?
Ask ChatGPT!
Result:
Copy
Clear