初学sqlite3基础语法,总的感觉就是英文水平比较好就非常容易理解,然而我的英语却并不咋地。
别的不说了,直接看题吧,多做多练,才是每个程序员必经之路。
首先得安装sqlite3,将下面代码复制到数据库中运行。
create table TbDept
(
deptno tinyint primary key,
dname varchar(10) not null,
dloc varchar(20) not null
);
insert into TbDept values (10, 会计部, 北京);
insert into TbDept values (20, 研发部, 成都);
insert into TbDept values (30, 销售部, 重庆);
insert into TbDept values (40, 运维部, 深圳);
create table TbEmp
(
empno int primary key,
ename varchar(20) not null,
job varchar(10) not null,
mgr int,
sal int not null,
dno tinyint,
foreign key (dno) references TbDept(deptno)
);
insert into TbEmp values (7800, 张三丰, 总裁, null, 9000, 20);
insert into TbEmp values (2056, 乔峰, 分析师, 7800, 5000, 20);
insert into TbEmp values (3088, 李莫愁, 设计师, 2056, 3500, 20);
insert into TbEmp values (3211, 张无忌, 程序员, 2056, 3200, 20);
insert into TbEmp values (3233, 丘处机, 程序员, 2056, 3400, 20);
insert into TbEmp values (3251, 张翠山, 程序员, 2056, 4000, 20);
insert into TbEmp values (5566, 宋远桥, 会计师, 7800, 4000, 10);
insert into TbEmp values (5234, 郭靖, 出纳, 5566, 2000, 10);
insert into TbEmp values (3344, 黄蓉, 销售主管, 7800, 3000, 30);
insert into TbEmp values (1359, 胡一刀, 销售员, 3344, 1800, 30);
insert into TbEmp values (4466, 苗人凤, 销售员, 3344, 2500, 30);
insert into TbEmp values (3244, 欧阳锋, 程序员, 3088, 3200, 20);
insert into TbEmp values (3577, 杨过, 会计, 5566, 2200, 10);
insert into TbEmp values (3588, 朱九真, 会计, 5566, 2500, 10);
下面是问题及答案:
-- 1.1 查询最高工资及其对应员工
answer: select ename, max(sal) from TbEmp;
-- select 查询语法,ename 姓名,max() 求最大值函数,sal 工资,max(sal) 也就代表最高工资,from TbEmp 从TbEmp表中获取。
-- 1.2 计算每位员工的年薪
answer: select ename, sal * 12 from TbEmp;
-- 这个就不解释了...
-- 1.3 统计有员工部门的人数
answer: select dname, count(dno) from TbEmp, TbDept where deptno = dno group by dno;
-- dname 部门名称,count() 求种类个数的函数,dno 部门编号,count(dno) 也就表示各个部门的人数,from TbEmp, TbDept 表示从这两个表中查询,where 是条件语句,也就是查询结果必须满足where后面的deptno = dno,而deptno,dno分别是两张表之间关联的属性;group by 分组语句,group by dno 也就表示通过部门编号分组。
-- 1.4 求最高薪资的员工的姓名(boss除外)
answer: select ename, max(sal) from TbEmp where mgr is not null;
-- mgr is not null 表示查询结果中mgr 不能为空
-- 1.5 查询薪水超过平均薪水的员工的姓名和工资
answer: select ename, sal from TbEmp where sal > (select avg(sal) from TbEmp);
-- avg(sal) 表示求平均工资;sal > (select avg(sal) from TbEmp) 也就是要求工资大于平均工资
-- 1.6 查询薪水超过其所在部门平均薪水的员工的姓名,部门编号和工资
answer: select ename, deptno, sal from TbEmp, TbDept where deptno = dno and (sal > (select avg(sal) from TbEmp group by dno));
-- 慢慢意会。
-- 2.1 查询部门中薪水最高的人姓名,工资和所在部门名称
answer: select ename, max(sal), dname from TbEmp, TbDept where deptno = dno group by dno ;
-- 慢慢意会。
-- 2.2 查询哪些人是主管
answer: select ename as '主管 from TbEmp where empno in (select distinct mgr from TbEmp);
-- ename as '主管 表示将ename重命名为主管,as可以省略。
-- 2.3 求平均薪水最高的部门的名称和平均工资
answer: select dname, avg(sal) as avg1 from TbEmp, TbDept where deptno = dno group by dno order by avg1 desc limit 1 offset 0;
-- order by avg1 desc 将avg1按升序排列,limit 1 offset 0 表示从第0位列出1个人。limit 1 offset 0 也可以写成 limit 1,0。
-- 2.4 求薪水最高的前三名雇员
answer: select ename, sal from TbEmp where mgr is not null order by sal desc limit 3 offset 0;
-- 2.5 求薪水排在第4-6名的雇员
answer: select ename, sal from TbEmp where mgr is not null order by sal desc limit 3 offset 3;
-- 2.6 求薪水最低的部门经理所在部门的名称
answer: select ename, dname, max(sal) as max1 from TbEmp, TbDept where deptno = dno group by dno order by max1 desc limit 1 offset 2;
以上例子包含了许多语法,读者可自行总结,方便理解。如若参悟不透也可问作者,注:作者也是初学者,有错误处还望不吝赐教,就此谢过。
如果你能独自完成以上题目,说明sqlite3的基础语法都掌握了。可以进入下一步学习了。
网友评论