Commit 0953c5e5 authored by jackfrued's avatar jackfrued

更新了数据库部分的文档和代码

parent c6666f45
...@@ -51,15 +51,15 @@ insert into tb_emp values ...@@ -51,15 +51,15 @@ insert into tb_emp values
(3588, '朱九真', '会计', 5566, 2500, null, 10); (3588, '朱九真', '会计', 5566, 2500, null, 10);
-- 查询薪资最高的员工姓名和工资 -- 查询月薪最高的员工姓名和工资
-- 查询员工的姓名和年薪((月薪+补贴)*12) -- 查询员工的姓名和年薪((月薪+补贴)*13)
-- 查询有员工的部门的编号和人数 -- 查询有员工的部门的编号和人数
-- 查询所有部门的名称和人数 -- 查询所有部门的名称和人数
-- 查询薪资最高的员工(Boss除外)的姓名和工资 -- 查询月薪最高的员工(Boss除外)的姓名和工资
-- 查询薪水超过平均薪水的员工的姓名和工资 -- 查询薪水超过平均薪水的员工的姓名和工资
...@@ -69,24 +69,4 @@ insert into tb_emp values ...@@ -69,24 +69,4 @@ insert into tb_emp values
-- 查询主管的姓名和职位 -- 查询主管的姓名和职位
-- 查询薪资排名4~6名的员工姓名和工资 -- 查询月薪排名4~6名的员工姓名和工资
-- use hrs;
-- drop procedure if exists sp_avg_sal_by_dept;
-- create procedure sp_avg_sal_by_dept(dno integer, out avg_sal float)
-- begin
-- select avg(sal) into avg_sal from tb_emp where dno=dno;
-- end;
-- call sp_avg_sal_by_dept(10, @avgSal);
-- select @avgSal;
drop database if exists bank;
create database bank default charset utf8;
use bank;
create table tb_account
(
accid char(8) primary key,
accowner varchar(20) not null,
accbalance float not null default 0
);
insert into tb_account values (11223344, '王大锤', 1000);
insert into tb_account values (22334455, '李小龙', 1000);
\ No newline at end of file
drop database if exists booksys;
create database booksys default charset utf8;
use booksys;
create table tb_book
(
bookid integer not null,
isbn char(13) not null,
bname varchar(100) not null,
price decimal(8,2) not null,
author varchar(100) not null,
publisher varchar(50) not null,
pubdate date,
intro varchar(500),
lended bit default 0,
counter integer default 0,
primary key (bookid)
);
create table tb_reader
(
readerid integer not null,
rname varchar(20) not null,
gender bit not null,
tel char(11) not null,
birth date,
regdate date not null,
available bit default 1,
primary key (readerid)
);
create table tb_record
(
recordid integer not null auto_increment,
bid integer not null,
rid integer not null,
lenddate datetime not null,
backdate datetime,
pulishment decimal(6,2),
primary key (recordid)
);
alter table tb_record add constraint fk_record_bid foreign key (bid) references tb_book (bookid) on update cascade;
alter table tb_record add constraint fk_record_rid foreign key (rid) references tb_reader (readerid) on update cascade;
\ No newline at end of file
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
...@@ -350,16 +350,14 @@ ...@@ -350,16 +350,14 @@
select stuname from tb_student where stuaddr is not null; select stuname from tb_student where stuaddr is not null;
-- 查询学生选课的所有日期(去重) -- 查询学生选课的所有日期(去重)
select distinct scdate from tb_score; select distinct seldate from tb_record;
-- 查询学生的家庭住址(去重) -- 查询学生的家庭住址(去重)
select distinct stuaddr from tb_student where stuaddr is not null; select distinct stuaddr from tb_student where stuaddr is not null;
-- 查询男学生的姓名和生日按年龄从大到小排列(排序) -- 查询男学生的姓名和生日按年龄从大到小排列(排序)
-- asc (ascending) - 升序(从小到大)/ desc (descending) - 降序(从大到小) select stuname as 姓名, datediff(curdate(), stubirth) div 365 as 年龄 from tb_student where stusex=1 order by 年龄 desc;
select stuname as 姓名, year(now())-year(stubirth) as 年龄 from tb_student where stusex=1 order by 年龄 desc;
-- 聚合函数:max / min / count / sum / avg
-- 查询年龄最大的学生的出生日期(聚合函数) -- 查询年龄最大的学生的出生日期(聚合函数)
select min(stubirth) from tb_student; select min(stubirth) from tb_student;
...@@ -370,51 +368,42 @@ ...@@ -370,51 +368,42 @@
select stusex, count(*) from tb_student group by stusex; select stusex, count(*) from tb_student group by stusex;
-- 查询课程编号为1111的课程的平均成绩(筛选和聚合函数) -- 查询课程编号为1111的课程的平均成绩(筛选和聚合函数)
select avg(scmark) from tb_score where couid=1111; select avg(score) from tb_record where cid=1111;
-- 查询学号为1001的学生所有课程的平均分(筛选和聚合函数) -- 查询学号为1001的学生所有课程的平均分(筛选和聚合函数)
select avg(scmark) from tb_score where stuid=1001; select avg(score) from tb_record where sid=1001;
-- 查询每个学生的学号和平均成绩(分组和聚合函数) -- 查询每个学生的学号和平均成绩(分组和聚合函数)
select stuid as 学号, avg(scmark) as 平均分 from tb_score group by stuid; select sid as 学号, avg(score) as 平均分 from tb_record group by sid;
-- 查询平均成绩大于等于90分的学生的学号和平均成绩 -- 查询平均成绩大于等于90分的学生的学号和平均成绩
-- 分组以前的筛选使用where子句 / 分组以后的筛选使用having子句 -- 分组以前的筛选使用where子句 / 分组以后的筛选使用having子句
select stuid as 学号, avg(scmark) as 平均分 from tb_score group by stuid having 平均分>=90; select sid as 学号, avg(score) as 平均分 from tb_record group by sid having 平均分>=90;
-- 查询年龄最大的学生的姓名(子查询/嵌套的查询) -- 查询年龄最大的学生的姓名(子查询/嵌套的查询)
select stuname from tb_student where stubirth=( select stuname from tb_student where stubirth=( select min(stubirth) from tb_student );
select min(stubirth) from tb_student
);
-- 查询年龄最大的学生姓名和年龄(子查询+运算) -- 查询年龄最大的学生姓名和年龄(子查询+运算)
select stuname as 姓名, year(now())-year(stubirth) as 年龄 from tb_student where stubirth=( select stuname as 姓名, datediff(curdate(), stubirth) div 365 as 年龄 from tb_student where stubirth=( select min(stubirth) from tb_student );
select min(stubirth) from tb_student
);
-- 查询选了两门以上的课程的学生姓名(子查询/分组条件/集合运算) -- 查询选了两门以上的课程的学生姓名(子查询/分组条件/集合运算)
select stuname from tb_student where stuid in ( select stuname from tb_student where stuid in ( select stuid from tb_record group by stuid having count(stuid)>2 );
select stuid from tb_score group by stuid having count(stuid)>2
)
-- 查询学生姓名、课程名称以及成绩(连接查询) -- 查询学生姓名、课程名称以及成绩(连接查询)
select stuname, couname, scmark from tb_student t1, tb_course t2, tb_score t3 where t1.stuid=t3.stuid and t2.couid=t3.couid and scmark is not null; select stuname, couname, score from tb_student t1, tb_course t2, tb_record t3 where stuid=sid and couid=cid and score is not null;
-- 查询学生姓名、课程名称以及成绩按成绩从高到低查询第11-15条记录(内连接+分页) -- 查询学生姓名、课程名称以及成绩按成绩从高到低查询第11-15条记录(内连接+分页)
select stuname, couname, scmark from tb_student t1 inner join tb_score t3 on t1.stuid=t3.stuid inner join tb_course t2 on t2.couid=t3.couid where scmark is not null order by scmark desc limit 5 offset 10; select stuname, couname, score from tb_student inner join tb_record on stuid=sid inner join tb_course on couid=cid where score is not null order by score desc limit 5 offset 10;
select stuname, couname, scmark from tb_student t1 inner join tb_score t3 on t1.stuid=t3.stuid inner join tb_course t2 on t2.couid=t3.couid where scmark is not null order by scmark desc limit 10, 5; select stuname, couname, score from tb_student inner join tb_record on stuid=sid inner join tb_course on couid=cid where score is not null order by score desc limit 10, 5;
-- 查询选课学生的姓名和平均成绩(子查询和连接查询) -- 查询选课学生的姓名和平均成绩(子查询和连接查询)
select stuname, avgmark from tb_student t1, (select stuid, avg(scmark) as avgmark from tb_score group by stuid) t2 where t1.stuid=t2.stuid; select stuname, avgmark from tb_student, ( select sid, avg(score) as avgmark from tb_record group by sid ) temp where stuid=sid;
select stuname, avgmark from tb_student t1 inner join select stuname, avgmark from tb_student inner join ( select sid, avg(score) as avgmark from tb_record group by sid ) temp on stuid=sid;
(select stuid, avg(scmark) as avgmark from tb_score group by stuid) t2 on t1.stuid=t2.stuid;
-- 内连接(inner join)- 只有满足连接条件的记录才会被查出来
-- 外连接(outer join)- 左外连接(left outer join) / 右外连接(right outer join) / 全外连接
-- 查询每个学生的姓名和选课数量(左外连接和子查询) -- 查询每个学生的姓名和选课数量(左外连接和子查询)
select stuname, ifnull(total, 0) from tb_student t1 left outer join (select stuid, count(stuid) as total from tb_score group by stuid) t2 on t1.stuid=t2.stuid; select stuname, ifnull(total, 0) from tb_student left outer join ( select sid, count(sid) as total from tb_record group by sid ) temp on stuid=sid;
``` ```
4. DCL 4. DCL
......
## 日志和调试 ## 日志和调试
在项目开发阶段,显示足够的调试信息以辅助开发人员调试代码还是非常必要的.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment