2019/8/21 周三
学习内容:数据库的增删改查、条件语句、模糊匹配、排序、聚合函数、分组等
关键字:
insert into; delete from; update set; select; distinct; where; between and; is null; in; like; order by; limit; count; avg; sum; max; min; group by; having
insert into table_name (field1,field2…fieldn) values (value1, value2… valuen);
字段不建议省略,字段名和后面的值要一一对应。(后面的值的顺序可能与建表时对应的字段顺序不一致,如果字段省略不写,容易出错)
delete from table_name where condition;
删除时一定要写删除条件,如condition为ct_id=1,如果没有删除条件,整张表的数据都会被删除
update table_name set field1 = value1, field2 = value2,…fieldn = valuen where condition;
同样不能漏掉修改的条件语句,否则整张表的对应数据都被改
update不要拼错了
其实很好理解,如果删除和修改时,没有写条件语句,就是没有指出要删除或者要修改的是哪一条数据,那就只能整张表都删或改了。
把某张表里的数据全部显示出来
只列出指定字段的列的数据
select distinct field1,field2,…,fieldn from table_name;
指定字段所对应值如果都重复了,只会显示一次。比如用来显示所有商品一共有哪些种类。
select * from commodity where c_inprice >= 100;
select * from commodity where c_inprice>100 or c_inprice<10;
select field1 from table_name where field2 between valuea and valueb;
包含valuea和valueb
也有not between and
select field1 from table_name where field2 not between valuea and valueb;
不包含valuea和valueb
是否包含两端的值其实也好理解,between and里两端都包含了,not between and 与between and 加起来要是完整(不多不少)的数据,就不能包含两端的值了。
select field1 from table_name where field2 is null;
select field1 from table_name where field2 is not null;
select field from table_name where field2 in (value1,value2,…,valuen);
select field from table_name where field2 not in (value1,value2,…,valuen);
这里的()里只能放具体的值,不能放判断条件(如大于多少小于多少)
这里如果值有为null的,in和not in都不会匹配出来
**""**匹配单个字符
**"%"**匹配任意字符0个或多个
如"张%“可以匹配张姓的人名,”%小米%“可以匹配名字中带有小米关键字的,”__"(3个)可以匹配价格为3位数的…
select name from table where name like ‘%小米%’
order by关键字,后面跟asc为升序(默认,一般忽略不写),desc为逆序,如
select field1,field2,…,fieldn from table_name where condition order by fieldn desc;
显示满足condition条件的数据,的field1,field2,…,fieldn对应的列,按fieldn降序排列。也可以没有筛选条件,全部显示。
值为数字的时候,值为null的数据排在值最小的位置(相当于0)
select * from table limit 2;
只输出前2行;
select * from table limit 0,5;
从第0行开始,输出5行;
用途1:与order结合起来用就可以排序后显示最大或最小的哪几条数据
用途2:常用来显示翻页,但数据量过大时,查询效率会很低,需要优化,相当于做一个目录,具体可见:limit分页优化
**count(*)统计表中记录的所有数据,不管值是否为空,而count(field1)**指定字段时,统计的将忽略null值。
如果表中无数据,count()返回0,而下面4个函数返回null,所以count()常用来规避空指针异常
select * from table_name group by field;
按field分组来显示数据,但每个组只显示查询到的第一条数据,没什么实际意义
所以实际工作中,聚合函数和分组查询一般都是一起用的
select count(*) from table group by type;
按照type类型分组,显示查询到的每组商品的数量
select avg(c_inprice) ,c_type from commodity group by c_type having avg(c_inprice) >50;
按照c_type分组,计算每组的进价的平均值,所得结果中平均值大于50的数据显示。
新版本的select 后的avg(c_inprice)如果不写,having也能筛选并显示出来,但建议写完整的语法