数据库笔记 day02(增删改查、条件语句、模糊匹配、排序、聚合函数、分组)

数据库笔记 day02

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


1. 增

insert into table_name (field1,field2…fieldn) values (value1, value2… valuen);

字段不建议省略,字段名和后面的值要一一对应。(后面的值的顺序可能与建表时对应的字段顺序不一致,如果字段省略不写,容易出错)


2. 删

delete from table_name where condition;
删除时一定要写删除条件,如condition为ct_id=1,如果没有删除条件,整张表的数据都会被删除


3. 改

update table_name set field1 = value1, field2 = value2,…fieldn = valuen where condition;
同样不能漏掉修改的条件语句,否则整张表的对应数据都被改

update不要拼错了

其实很好理解,如果删除和修改时,没有写条件语句,就是没有指出要删除或者要修改的是哪一条数据,那就只能整张表都删或改了。


4. 查

(1) **select *** from table_name;

把某张表里的数据全部显示出来

(2) select field1,field2,…,fieldn from table_name;

只列出指定字段的列的数据

(3) distinct 关键字去掉重复数据

select distinct field1,field2,…,fieldn from table_name;
指定字段所对应值如果都重复了,只会显示一次。比如用来显示所有商品一共有哪些种类。


5. where关键字

(1)带关系运算符 {> < = != !< !> <= >=} 和逻辑运算符 {and or xor(异或) not} ,如

select * from commodity where c_inprice >= 100;
select * from commodity where c_inprice>100 or c_inprice<10;

(2)带between and关键字,查询取值范围的区间

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 加起来要是完整(不多不少)的数据,就不能包含两端的值了。

(3)带is null关键字筛选空字段

select field1 from table_name where field2 is null;
select field1 from table_name where field2 is not null;

(4)带in关键字来匹配给出的任一查询条件

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都不会匹配出来

(5)带like关键字进行模糊查询,要和通配符一起用,否则效果等同于"=",常用通配符有两个:

**""**匹配单个字符
**"%"**匹配任意字符0个或多个
如"张%“可以匹配张姓的人名,”%小米%“可以匹配名字中带有小米关键字的,”
__"(3个)可以匹配价格为3位数的…
select name from table where name like ‘%小米%’


6. 其他关键字

(1)用 order 排序

order by关键字,后面跟asc为升序(默认,一般忽略不写),desc为逆序,如
select field1,field2,…,fieldn from table_name where condition order by fieldn desc;
显示满足condition条件的数据,的field1,field2,…,fieldn对应的列,按fieldn降序排列。也可以没有筛选条件,全部显示。

值为数字的时候,值为null的数据排在值最小的位置(相当于0)

(2)limit筛选显示结果

select * from table limit 2;
只输出前2行;
select * from table limit 0,5;
从第0行开始,输出5行;

用途1:与order结合起来用就可以排序后显示最大或最小的哪几条数据
用途2:常用来显示翻页,但数据量过大时,查询效率会很低,需要优化,相当于做一个目录,具体可见:limit分页优化


7. 聚合函数

(1)count() 统计记录数

**count(*)统计表中记录的所有数据,不管值是否为空,而count(field1)**指定字段时,统计的将忽略null值。

如果表中无数据,count()返回0,而下面4个函数返回null,所以count()常用来规避空指针异常

(2)avg() 求平均值

(3)sum() 求和

(4)max() 求最大数

(5)min() 求最小数

(6)group by关键字 实现分组

select * from table_name group by field;
按field分组来显示数据,但每个组只显示查询到的第一条数据,没什么实际意义

所以实际工作中,聚合函数和分组查询一般都是一起用的
select count(*) from table group by type;
按照type类型分组,显示查询到的每组商品的数量

(7)having关键字 对分组查询的结果进行条件限制

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也能筛选并显示出来,但建议写完整的语法

你可能感兴趣的:(数据库)