這是乙個比較貼近實際業務的sql練習,技術點比較常用和實用。
如下圖,業務中,存在以下資料和資料關係:
乙個顧客(cust)會有零或多個債權(loan),
債權會有零或多個交易(transaction)。
loan表balance為餘額,repayday為下次還款日,
transaction表中,id是自增的,amount為金額,
oprtime為操作日,type=1為貸款,type=2為還款。
1)各顧客的餘額,用sql得到下圖輸出。
2)還款最多交易,即用sql得到下圖輸出。
在2023年從01-01(含)到06-01(不含)時間段,
找出各債權還款最多的交易資料(可能多條),
並顯示對應的顧客名,
3)交易表有10億資料,檢索結果響應很慢,
可能是何原因,如何排查原因,如何改善。
4)本題中3張表,設計上有何缺陷,如何改善。
通過以下sql建立表結構和初始資料。
create table `cust` (
`custid` varchar(12) not null ,
`name` varchar(20) not null ,
`age` int(11) not null ,
primary key (`custid`) )
engine = innodb default character set = utf8 collate = utf8_bin;
create table `loan` (
`loanid` varchar(20) not null ,
`custid` varchar(12) not null ,
`balance` decimal(16,4) not null ,
`repayday` date null default null ,
primary key (`loanid`) ,
unique index `id_unique` (`loanid` asc) ,
index `cust` (`custid` asc) ,
constraint `cust`
foreign key (`custid` )
references `cust` (`custid` )
on delete no action
on update no action)
engine = innodb default character set = utf8 collate = utf8_bin;
create table `transaction` (
`id` int(11) not null ,
`amount` decimal(16,4) not null ,
`type` int(11) not null ,
`oprtime` datetime not null ,
`loanid` varchar(20) not null ,
primary key (`id`) ,
index `loan` (`loanid` asc) ,
constraint `loan`
foreign key (`loanid` )
references `loan` (`loanid` )
on delete no action
on update no action)
engine = innodb default character set = utf8 collate = utf8_bin;
insert into cust(custid, name, age) values
('100000000101', '張三', 23),
('100000000201', '李四', 24),
('100000000301', '王五', 25);
insert into loan(loanid, custid, balance, repayday) values
('10000000010100000001', '100000000101', 3000, '2010-07-03'),
('10000000010100000002', '100000000101', 3500, '2010-07-23'),
('10000000020100000001', '100000000201', 4000, '2010-07-04');
insert into transaction(id, amount, type, oprtime, loanid) values
(1, -10000, 1, '2010-03-03 15:15:15', '10000000010100000001'),
(2, 2000, 2, '2010-04-03 15:15:15', '10000000010100000001'),
(3, 2000, 2, '2010-05-03 15:15:15', '10000000010100000001'),
(4, 3000, 2, '2010-06-03 15:15:15', '10000000010100000001'),
(5, -8000, 1, '2010-04-23 15:15:15', '10000000010100000002'),
(7, 2000, 2, '2010-05-23 15:15:15', '10000000010100000002'),
(8, 2500, 2, '2010-06-23 15:15:15', '10000000010100000002'),
(9, -10000, 1, '2010-01-04 15:15:15', '10000000020100000001'),
(10, 1000, 2, '2010-02-04 15:15:15', '10000000020100000001'),
(11, 1000, 2, '2010-03-04 15:15:15', '10000000020100000001'),
(12, 1500, 2, '2010-04-04 15:15:15', '10000000020100000001'),
(13, 1500, 2, '2010-05-04 15:15:15', '10000000020100000001'),
(14, 1000, 2, '2010-06-04 15:15:15', '10000000020100000001');
Oracle資料庫之SQL測驗
w3school 1.sql 指的是?structured query language 2.哪個 sql 語句用於從資料庫中提取資料?select 3.哪條 sql 語句用於更新資料庫中的資料?update 4.哪條 sql 語句用於刪除資料庫中的資料?delete 5.哪條 sql 語句用於在資...
SQL測驗易錯題
sql 測驗 結果 17 20 您的回答 1.sql 指的是?您的回答 structured query language 2.哪個 sql 語句用於從資料庫中提取資料?您的回答 select 3.哪條 sql 語句用於更新資料庫中的資料?您的回答 update 4.哪條 sql 語句用於刪除資料庫...
SQL 測驗 自測結果
sql 測驗 結果 18 20 您的回答 1.sql 指的是?您的回答 structured question language 正確答案 structured query language 2.哪個 sql 語句用於從資料庫中提取資料?您的回答 select 3.哪條 sql 語句用於更新資料庫中...