×

sqlite3基础语法

96
lingxuemy
2015.12.29 23:10* 字数 1179

初学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的基础语法都掌握了。可以进入下一步学习了。

数据库
Web note ad 1