sqlite数据库的基本操作
细节:
1,什么是主键:
用来唯一标识一张表中的某一条数据,所有的表都必须有自己的主键,主键可以是整型,一般都用自增,也可以是字符串类型, 如果是字符串类型的话一般使用uuid(是用java语言生成的)。一般使用主键来唯一查询某一条记录,或者更新删除某一条记录。
2,order by永远放到最后面,语法规范!
3,函数
函数count: 用来统计数量,一般统计行数有几行
函数max: 用来计算某列中的最大值,列的类型一定是整型(一般情况下遇到类似年龄,分数等将来可能会计算最大值的或者本身就是数字,类型设置为整型)。
函数sum: 类似max,列的字段类型一定是整型
4,左连接:左边表全部显示,右边显示匹配成功的。
5,全连接:左右两边完全匹配成功。
6,sqlite 无右连接
——————-表的插入————
insert into students (id,name,age,sex)values(\’3\’,\’Mike\’,\’21\’,\’女\’);–add
insert into students (id,name,age,sex)values(\’4\’,\’Lisa\’,\’21\’,\’女\’);–add
insert into students (id,name,age,sex)values(\’5\’,\’Raro\’,\’21\’,\’女\’);–add
insert into students (id,num,name,age,sex,c_id)values(6,\’201107014303\’,\’Jame\’,\’21\’,\’女\’,\’\’)
————条件删除 ———————
delete from students where name=\’Jame\’;–delete
select *from students;
select *from students where name=\’Mike\’ and age=\’12\’;
select * from students where name like \’s%\’ collate nocase;
————修改表名————
alter table student rename to students–修改表名
alter table students {rename to student|add column course text}–不识别 {}:表示为可选项,但是运行失败
————添加列———————
alter table students add column tel text not null default \’\’ collate nocase
————条件修改数据———–
update students set tel=\’18500111111\’ where name=\’lisa\’ collate nocase
update students set num=\’201107014301\’
update students set age=\’20\’ where name=\’Mike\’
———-创建表,id,course两列
create table course (id integer primary key autoincrement, course text);
————表删除–,只能删除表,不能删除列———-
drop table course;–删除一张表(没有关联关系)
———–如果想忽略大小写,即 case-insensitive,需要用到COLLATE NOCASE :———–
update students set age=\’12\’ where name=\’mike\’ collate nocase;
———-执行以下语句查看所有用户的用户名和年龄:
select name,age from students;
select *from cqx_db where type=\’table\’ and name=\’teacher\’;
–查看一张表中 字段name没有重复的条目
select distinct name from students;
select * from students group by age having count(*)>1;
————-limit a offset b或者limit b ,a —表示调过b项,返回a项数据——–
select * from students where num like \’_011%\’ order by age asc, name limit 1,2;–如果相同,则根据名字的首字母排序
select * from students where num like \’2011%\’ order by age asc — num 以2011结尾的所有学生升序,默认为升序
select * from students where num like \’2011%\’ order by age desc, age limit 2 offset 1;–根据年龄排序
select * from students where num like \’2011%\’ limit 2 offset 1;
——————–\’%a\’ :以a结尾(_a),\’a%\’:以a开头 \’%a%\’:包含a——————————-
select * from students where num like \’%01\’ order by age desc; 以01结尾的匹配
select * from students where num not like \’%02%\’;选取不包含02的num
—函数upper( name ) 大写 ,lower( name ) 小写 ,count(*)统计数量大小,sum(age) 求和,max(age)求最大值
select upper(name) ,length(name) from students where num like \’2011%\’
select lower(name) ,length(name) from students where num like \’2011%\’
select upper(name) ,length(name) from students where num like \’%01\’ and length(name)<5
———-分组group by- 并采用函数计算租大小———
select * ,count(*)from students group by num;–按照num进行分组
select count(*) from students where num like \’%01\’;
————————-去掉重复 distinct-———————-
select distinct num from students ;
—————多表连接 join————————-
insert into teacher (id,t_name,t_course) values(1,\’a\’,\’语文\’)
insert into teacher (id,t_name,t_course) values(2,\’a\’,\’语文\’)
insert into teacher (id,t_name,t_course) values(3,\’a\’,\’语文\’)
update teacher set c_id=\’1\’
update students set c_id=12 where num like \’%01\’;
update teacher set c_id=1;
–添加列 not null时 default \’\’
alter table teacher add column c_id text not null default \’\’;
alter table teacher drop column c_course;
select teacher.t_name,students.name from teacher ,students where teacher.c_id=students.c_id;
————————内连接 inner join————–
select * from teacher inner join students on teacher.c_id=students.c_id;
alter table course add column id integer;
insert into course values(1,1,\’语文\’);
insert into course values(1,2,\’语文\’);
select * from students inner join course on students.c_id=course.c_id;
—————交叉连接—————–
select * from students,course;
———-左外连接 未能匹配以左为基准,右为null–,无右连接————
select * from students left outer join teacher on students.c_id=teacher.c_id;
——————–别名-类似表名.相同的列名,from +原名 别名————————
select s.name,t.name from students s,teacher t where s.c_id=t.c_id limit 3;
————–null 不等于任何值 是确实信息的占位符
–三种逻辑运算
select null is null;–结果1 非0的任何值都表示为真
select null is not null;–结果0 非0的任何值都表示为真
————-coalesce函数表示为将一组值输入并返回其中第一个非null的值——
select coalesce(null,7,null,4);–结果7
————-nullif函数相反,表示为2个值输入,如果相同则返回null,否则返回第一个参数—-
select nullif (1,1);–结果null
select nullif (1,2);–结果1
——-子查询————-
select teacher.name from teacher where teacher.c_id in(select students.c_id from students where num like \’2011%\’)
select count(name) from students where students.[c_id] in(select teacher.c_id from teacher )
select * from students group by num like \’%01\’
———==================考核 练习================================—–
—查询
select * from students where name=\’Lisa\’;
select name,sex from students where name like \’%am%\’; –查询包含am的所有name,sex
—–分组——-
select sex, count(id) from students group by sex; –根据性别sex分组,查询sex和对用的数量
select sex,age,count(id) from students group by sex, age; –根据性别和年龄分组,查询性别和年龄以及数量
select name,age from students order by age desc ; –根据年龄降序查询显示姓名和年龄
——————————函数max: 用来计算某列中的最大值,列的类型一定是整型(一般情况下遇到类似年龄,分数等将来可能会计算最大值的或者本身就是数字,类型设置为整型)。——————————————-
select max(age) from students ; –从学生表中选取年龄最大值
–从学生表中选取年龄最大值的姓名和对应年龄
select name, age from students where age in (select max(age) from students)
–计算学生表中的年龄和
select sum(age) from students ;
–按照性别分组并显示性别和对应的和
select sex, count(id) from students group by sex;
–采用别名的方式全连接 ,别名规则为from+原表名 别名,别的地方使用到表名则采用别名
select t.t_name,s.name from teacher t,students s where t.c_id=s.c_id;
–左连接 通过学生和教师表查询学生和教师名称 sqlite无右连接
select students.name,teacher.t_name from students left join teacher on students.c_id=teacher.c_id;
–通过别名的方式左连接
select s.name,t.t_name from students s left join teacher t on s.c_id=t.c_id;
–通过左连接查询性别为女和年龄大于21的
select s.name,t.t_name,s.age from students s left join teacher t on s.c_id=t.c_id where sex=\’女\’ and age>21 ;
版权声明:本文为itcqx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。