1.创建数据库和表:
首先在cmd下,进入sqlite的安装路径,我的是D:\sqlite,然后
输入sqlite3.exe DatabaseName.db( .db后缀名可以命名为其它的,例如DatabaseName.dll)回车,执行完后,命令提示符自动跳转到"sqlite>"状态
注意:这时DatabaseName.db数据库已经创建好了,但是还是个临时数据库,在文件夹中还看不到。
通过SQL命令 ,创建一个表,例如:
这时就能在D:\sqlite文件夹中看到刚才创建的数据库了。
进入sqlite状态,输入.tables就可以查看当前路径下的所有的表了
通过drop table testtable就可以将testtable删除;
通过.databases命令可以查看当前路径D:\sqlite的数据库路径:
使用 .quit 命令退出 sqlite 提示符,回到D:\sqlite路径下
假设一种情况:
如果您在公司上班期间对数据库操作工作没有做完,回到家里附加到家里的电脑上使用,这样的情况可以考虑分离数据库。
分离数据库是指将数据库从删除,但该数据库的文件(.MDF)和对应的日志文件(.LDF)完好无损。分离成功后,我们就可以把该数据库文件(.MDF)和对应的日志文件(.LDF)拷贝到其它磁盘中作为备份保存。
附加数据库就是将一个备份磁盘中的数据库文件(.MDF)和对应的日志文件(.LDF)拷贝到需要的计算机,并将其添加到某个SQL Server数据库服务器中,由该服务器来管理和使用这个数据库。
插入:
insert into company (id, name, age, address, salary) values (1, 'Paul', 32, 'Beijing', 20000.00);
insert into company values (1, 'Paul', 32, 'Beijing', 20000.00);
--插入所有字段时可省略列名
insert into company_bkp select * from company;
--将company表中的所有记录全部插入到company_bkp表中, 两表结构必须相似
更新记录:
update company set address='Texas' where id=6;
--将id为6的记录更新address字段为Texas
update company set address='Texas', salary=20000.00;
--将所有记录的address字段更新为Texas, salary字段为20000
查询:
select * from company;
select id, name from company;
--查询company表中id和name字段
select tbl_name from sqlite_master where type='table';
--查询当前数据库存在的表
select current_timestamp;
--查询当前时间戳
select * from company limit 6;
--只显示查询结果的前6行
select * from company limit 3 offset 2;
--只显示从第3行起, 再多2行, 一共3行
select * from company order by salary asc;
--以salary字段升序显示记录, desc为降序
select * from company order by name, salary asc;
--将结果按name和salary字段升序显示, 即name相同的按salary排序
select name, sum(salary) from company group by name;
--将结果中相同name的salary相加, 再构成name, sum(salary)列表
select name, sum(salary) from company group by name order by name;
--同上, 将结果以name升序显示
select * from company group by name having count(name) < 2;
--以name分组, 相同name记录数小于2, having设置分组的过滤条件
select distinct name from company;
--去重, 相同name不显示
select * from company where salary>10000 group by name having count(name)>=2 order by name
--相同name的记录数大于或等于2, 且salary大于10000, 以name升序显示
select * from company cross join department;
select * from company, department;
--将company的每一行与第二个表的每一行进行匹配, 分别有x和y行, 则结果有x*y行, 分别有x和y列, 则结果有x+y列. 交叉连接可能产生非常大的表
select * from company [inner] join department on company.id=department.emp_id;
--选取company的id列与department的emp_id列相等的行进行连接, 内连接是默认连接, 可省略inner, 横向连接
select * from company join department using (id);
--使用两表共有的id列进行相同值连接
select * from company natural join department;
--自动测试存在两个表中的每一列的值之间相等值
select * from company left outer join department on company.id=department.emp_id;
--不同于内连接, 左外连接还会合并进第一个表的非匹配行, 这些行多余的列, 即对应第二个表的列为null. 之所以第一表显示, 因为是left嘛.
select col1, col2, ... from table1 where conditions
union [all]
select col1, col2, ... from table2 where conditions;
--不局限于上面的语句, 事实上union将两个select的结果纵向连接去重.因此这要求结果必须列相同, 列类型相同. join则是横向连接. union all不去重.
select c.id, c.name, c.age, d.dept from company as c, department as d where c.id=d.emp_id;
select c.id, c.name, c.age, d.dept from company as c join department as d on c.id=d.emp_id;
--通过as给表起别名
select * from company where id in (select id from company where salary > 45000);
select * from company where salary > 45000;
--子查询, `()`中的select先执行, 此处两个查询相同, 可与select, insert, update, delete混合使用
select * from company age like '2%';
--显示 COMPANY 表中 AGE 以 2 开头的所有记录
删除:
delete from company where id==7
--删除id为7的记录
delete from company;
--删除所有记录