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
/* 1. Подготовьте DDL-скрипты создания объектов для приведённой модели: создание таблиц, первичных, уникальных, внешних ключей и т.д. 2. Заполните таблицы примерами из скрипта, приведенного в конце этого документа. 3. Подготовьте скрипты заполнения таблиц тестовыми данными, достаточными для выполнения заданий ниже. */ create table clients ( ID NUMBER(10) PRIMARY KEY NOT NULL, NAME VARCHAR2(1000) NOT NULL, PLACE_OF_BIRTH VARCHAR2(1000) NOT NULL, DATE_OF_BIRTH DATE NOT NULL, -- DATE_OF_BIRTH DATE NOT NULL CHECK (DATE_OF_BIRTH > '01-Jan-1900'), ADDRESS VARCHAR2(1000) NOT NULL, PASSPORT VARCHAR2(100) UNIQUE NOT NULL -- CONSTRAINT clients_chk_DATE_OF_BIRTH CHECK (DATE_OF_BIRTH > '01-Jan-1900'), ); 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 clients values (4, 'ХХХ ХХХ ХХХ', 'Россия, Московская облать, г. Балашиха', to_date('01.01.2001','DD.MM.YYYY'), 'Россия, Московская облать, г. Балашиха, ул. Пушкина, д. 7', '4454 666666, выдан ОВД г. Клин, 10.01.2015'); insert into clients values (5, 'Овечкин Александр Михайлович', 'Россия, Московская облать, г. Балашиха', to_date('17.10.1985','DD.MM.YYYY'), 'Россия, Московская облать, г. Москва, ул. Хоккейная, д. 1', '1234 123456, выдан ОВД г. Москва, 17.10.2011'); --------------------------------------------------------------------------------------------- create table tarifs ( ID NUMBER(10) PRIMARY KEY NOT NULL, NAME VARCHAR2(100) NOT NULL, COST NUMBER(10,2) ); insert into tarifs values (1,'Тариф за выдачу кредита', 10); insert into tarifs values (2,'Тариф за открытие счета', 10); insert into tarifs values (3,'Тариф за обслуживание карты', 10); --------------------------------------------------------------------------------------------- create table productype ( ID NUMBER(10) PRIMARY KEY NOT NULL, NAME VARCHAR2(100) unique NOT NULL, BEGIN_DATE DATE NOT NULL, END_DATE DATE, TARIF_REF NUMBER(10) NOT NULL, CONSTRAINT END_DATE_CHECK CHECK (END_DATE >= BEGIN_DATE), FOREIGN KEY (TARIF_REF) REFERENCES tarifs (ID) ); /* create or replace trigger aftinsttest after insert on productype for each row begin insert into tarifs (NAME) values(:new.NAME); end aftinsttest; ALTER TRIGGER aftinsttest ENABLE; */ 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); --------------------------------------------------------------------------------------------- create table products ( ID NUMBER(10) PRIMARY KEY NOT NULL, PRODUCT_TYPE_ID NUMBER(10) NOT NULL, NAME VARCHAR2(100) NOT NULL, CLIENT_REF NUMBER(10) NOT NULL, OPEN_DATE DATE NOT NULL, -- OPEN_DATE DATE NOT NULL CHECK (OPEN_DATE > '01-Jan-1900'), CLOSE_DATE DATE, CONSTRAINT CLOSE_DATE_CHECK CHECK (CLOSE_DATE >= OPEN_DATE), FOREIGN KEY (CLIENT_REF) REFERENCES clients (ID), FOREIGN KEY (PRODUCT_TYPE_ID) REFERENCES productype (ID) ); 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 products values (4, 1, 'Кредитный договор с ХХХ Х.Х.', 4, to_date('01.06.2015','DD.MM.YYYY'), null); insert into products values (5, 1, 'Кредитный договор с Овечкиным А.М.', 5, to_date('01.06.2015','DD.MM.YYYY'), null); --for task 4 insert into products values (6, 2, 'Депозитный договор с Сидоровым И.П.', 1, to_date('01.06.2014','DD.MM.YYYY'), null); insert into products values (7, 1, 'Кредитный договор с Ивановым П.С.', 2, to_date('01.08.2017','DD.MM.YYYY'), to_date('01.08.2018','DD.MM.YYYY')); --------------------------------------------------------------------------------------------- create table accounts ( ID NUMBER(10) PRIMARY KEY NOT NULL, NAME VARCHAR2(100) NOT NULL, SALDO NUMBER (10,2) NOT NULL, CLIENT_REF NUMBER(10) NOT NULL, OPEN_DATE DATE NOT NULL, -- OPEN_DATE DATE NOT NULL CHECK (OPEN_DATE > '01-Jan-1900'), CLOSE_DATE DATE, PRODUCT_REF NUMBER(10) NOT NULL, ACC_NUM VARCHAR2(25) NOT NULL, CONSTRAINT ACC_CLOSE_DATE_CHECK CHECK (CLOSE_DATE >= OPEN_DATE), FOREIGN KEY (CLIENT_REF) REFERENCES clients (ID), FOREIGN KEY (PRODUCT_REF) REFERENCES products (ID) ); 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 accounts values (4, 'Кредитный счет для Сидоровым И.П.', -2222, 1, to_date('01.07.2015','DD.MM.YYYY'), null, 1, '45502810401020000023'); insert into accounts values (4, 'Кредитный счет1 для ХХХ Х.Х.', 4444, 4, to_date('01.07.2015','DD.MM.YYYY'), null, 4, '45502810401020000055'); insert into accounts values (5, 'Кредитный счет2 для ХХХ Х.Х.', 0, 4, to_date('01.07.2015','DD.MM.YYYY'), null, 4, '45502810401020000088'); insert into accounts values (6, 'Кредитный счет для Овечкиным А.М.', 0, 5, to_date('01.07.2015','DD.MM.YYYY'), null, 5, '11111111111111111111'); --for task 4 insert into accounts values (7, 'Депозитный счет для Сидоровым И.П.', 0, 1, to_date('01.06.2014','DD.MM.YYYY'), null, 2, '45502810401020000044'); insert into accounts values (8, 'Кредитный счет для Ивановым П.С.', 0, 2, to_date('01.08.2017','DD.MM.YYYY'), to_date('01.08.2018','DD.MM.YYYY'), 1, '42301810400000000044'); --------------------------------------------------------------------------------------------- --create sequence rec_seq start with 1 increment by 1; create table records ( ID NUMBER(10) generated always as identity (start with 1 increment by 1) PRIMARY KEY NOT NULL, DT NUMBER (1) NOT NULL, SUM NUMBER(10,2) NOT NULL, ACC_REF NUMBER(10) NOT NULL, OPER_DATE DATE NOT NULL, FOREIGN KEY (ACC_REF) REFERENCES accounts (ID) ); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (1, 5000, 1, to_date('01.06.2015','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (0, 1000, 1, to_date('01.07.2015','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (0, 2000, 1, to_date('01.08.2015','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (0, 3000, 1, to_date('01.09.2015','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (1, 5000, 1, to_date('01.10.2015','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (0, 3000, 1, to_date('01.10.2015','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (0, 10000, 2, to_date('01.08.2017','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (1, 1000, 2, to_date('05.08.2017','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (1, 2000, 2, to_date('21.09.2017','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (1, 5000, 2, to_date('24.10.2017','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (0, 6000, 2, to_date('26.11.2017','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (0, 120000, 3, to_date('08.09.2017','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (1, 1000, 3, to_date('05.10.2017','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (1, 2000, 3, to_date('21.10.2017','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (1, 5000, 3, to_date('24.10.2017','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (1, 5000, 4, to_date('21.10.2017','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (0, 5000, 4, to_date('24.10.2017','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (1, 5000, 4, to_date('24.10.2017','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (1, 4000, 6, to_date('24.10.2017','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (0, 4000, 6, to_date('24.11.2017','DD.MM.YYYY')); --for task 5 insert into records (DT, SUM, ACC_REF, OPER_DATE) values (1, 5555, 1, to_date('01.10.2015','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (0, 5555, 1, to_date('01.10.2015','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (1, 5555, 2, to_date('01.10.2015','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (0, 5555, 2, to_date('01.10.2015','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (1, 5555, 3, to_date('01.10.2015','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (0, 5555, 3, to_date('01.10.2015','DD.MM.YYYY')); --for task 6 insert into records (DT, SUM, ACC_REF, OPER_DATE) values (1, 6666, 1, to_date('01.03.2025','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (0, 6666, 1, to_date('01.03.2025','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (1, 6666, 2, to_date('01.03.2025','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (0, 6666, 2, to_date('01.03.2025','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (1, 6666, 3, to_date('01.03.2025','DD.MM.YYYY')); insert into records (DT, SUM, ACC_REF, OPER_DATE) values (0, 6666, 3, to_date('01.03.2025','DD.MM.YYYY')); --------------------------------------------------------------------------------------------- SELECT * from clients; SELECT * FROM tarifs; SELECT * from productype; SELECT * from products; SELECT * from accounts; SELECT * from records; --------------------------------------------------------------------------------------------- /*4. Сформируйте выборку, которая содержит все счета, относящиеся к продуктам типа ДЕПОЗИТ, принадлежащих клиентам, у которых нет открытых продуктов типа КРЕДИТ.*/ select * from accounts where CLIENT_REF not in ( select CLIENT_REF from accounts where (PRODUCT_REF = 1 and CLOSE_DATE is null) --проверка в счетах union all select CLIENT_REF from products where (PRODUCT_TYPE_ID = 1 and CLOSE_DATE is null) ----проверка в продуктах ) and PRODUCT_REF = 2 order by CLIENT_REF, PRODUCT_REF; --------------------------------------------------------------------------------------------- /*5. Сформируйте выборку, которая выведет сумму движений по счетам (дебетовые и кредитовые) в рамках одного произвольного дня, в разрезе типа продукта.*/ -- с общим результатом - all_prod with cte as( select coalesce(TO_CHAR(DT), 'total') as DTT, coalesce(TO_CHAR(ACC_REF), 'all_acc') as ACC_REFF, sum(SUM) as agg from records where OPER_DATE = to_date('01.10.2015','DD.MM.YYYY') group by rollup(DT, ACC_REF) ) select distinct coalesce(productype.NAME, 'all_prod') as PROD_NAME, DT_0.agg as SUM_DT_0, DT_1.agg as SUM_DT_1, (NVL(DT_0.agg, 0) - NVL(DT_1.agg, 0)) as RESULT from cte left join cte DT_0 on cte.ACC_REFF = DT_0.ACC_REFF and DT_0.DTT = '0' left join cte DT_1 on cte.ACC_REFF = DT_1.ACC_REFF and DT_1.DTT = '1' left join accounts on TO_CHAR(accounts.ID) = cte.ACC_REFF left join products on products.ID = PRODUCT_REF left join productype on productype.ID = PRODUCT_TYPE_ID; -- без общего результата with cte as ( select DT, ACC_REF, sum(SUM) as agg from records where OPER_DATE = to_date('01.10.2015','DD.MM.YYYY') group by rollup(DT, ACC_REF) ) select distinct productype.NAME as PROD_NAME, DT_0.agg as SUM_DT_0, DT_1.agg as SUM_DT_1, (NVL(DT_0.agg, 0) - NVL(DT_1.agg, 0)) as RESULT from cte left join cte DT_0 on cte.ACC_REF = DT_0.ACC_REF and DT_0.DT = 0 left join cte DT_1 on cte.ACC_REF = DT_1.ACC_REF and DT_1.DT = 1 join accounts on accounts.ID = cte.ACC_REF join products on products.ID = PRODUCT_REF join productype on productype.ID = PRODUCT_TYPE_ID;
SQL
Server:
MariaDB 11.4
MariaDB 11.5
MariaDB 10
MariaDB 10 Sakila (ReadOnly)
MySQL 8.0
MySQL 8.0 Sakila (ReadOnly)
SQLite 3
SQLite 3 Preloaded
PostgreSQL 10 Bookings (ReadOnly)
PostgreSQL 13
PostgreSQL 14
PostgreSQL 15
PostgreSQL 16
PostgreSQL 17
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