本篇博客如果没有特别说明的话,皆以下面的表为例
id username pass datenow 1 mysql root 2018-01-10
建表(使用sql命令实现)
新建查询 --> 输入以下格式的代码:
create table customer(
id int not null primary key,
username char(20) not null,
pass char(20) default "123456",
datenow date null
)character set utf8;
详细介绍一下上面的代码,第一行就是创建一个名字为customer的表,下面的四行都是在设定表的字段(也就是每列所代表的属性)首先是属性名,例如id,username这些。下来是属性的类型,也就是int,char这些,char(20)代表该属性的存储上限为20个字符。下来的null和not null 可写可不写,是用来规定该字段是否必须填写,至于再后面的primary key是用来设置关键字的,也可以另起一行写primary key (要作为关键字的字段名称,如id)也是可以起到相同的效果的,default是用来设置默认值的,最后代码是设置编码格式的,如果不设置成utf8的话可能会存在不能输入中文的情况。
增加记录(增加行)
基本语法格式:
insert into 表名(字段1, 字段2)
values (字段1的值,字段2的值)
在具体使用时的样子:
insert into customer(id, username, pass, datenow)
values (1, "lisa", "66666", now())
格式就是这个格式,只需要把values和你要添加的字段名称对应起来就行了,值得注意的是可以不用全部字段都写上,但是如果表中指定not null 的话,想要添加一条记录就必须要把这些字段加上。
删除记录(删除行)
基本语法格式:
delete from 表名 [where + 条件];
具体使用:
delete from customer where id = 1;
更改记录
语法格式:
update 表名 set 字段名 = 属性值 [where + 条件]
具体使用:
update customer set id = 666, pass = "521" where id = 1;
查询记录(重点)
语法格式:
select 字段名 from 表名 [where + 条件]
select id, pass from customer where id = 1;
1.对结果排序:如果要使查询结果排序,可以在where条件之后加上order by 字段名 [asc/desc],asc代表升序,desc代表降序,默认为asc,如果该字段有多个值相同的话,还可以指定在值相同的情况下优先按照其他某个字段排序,也是默认升序。
举个例子:
select * from customer where id > 1 order by id desc, datenow desc
这个就是按照降序排列id,在id都相同的情况下按照datenow降序排列
2.分页查询:一次查询的结果可能很长,可以把结果分成若干页,也就是限制在一个页面显示的结果数量
用法:在where条件之后设置,LIMIT 3 OFFSET 0;这就代表对结果集从0号记录开始,最多取3条。注意SQL记录集的索引从0开始。
3.聚合查询: 如果我们要统计查询结果的条数,总不可能一条一条去数,所以就用到了聚合函数
上例子:
select count(*) num from customer where id > 1;
这就是统计id > 1的结果的条数,num的存在是给得出的值起了一个别名。
除此之外,还有一些常用的聚合函数:
函数 | 说明 |
---|---|
SUM | 计算某一列的合计值,该列必须为数值类型 |
AVG | 计算某一列的平均值,该列必须为数值类型 |
MAX | 计算某一列的最大值 |
MIN | 计算某一列的最小值 |
当然我们也可以分组聚合查询,比如说我在一张名为students表中存放了学生的班级,性别,成绩等信息,我要查询每个班的平均成绩,可以用以下查询:
select 班级, avg(成绩) avge from students group by 性别
其他的小用法也有很多,不再细说。
4.连接查询: 连接查询是一种多表查询。就是先确定一个主表作为结果集,然后,把其他表的行有选择性地“连接”在主表结果集上
例子:假设有students表,有name, id, score, class_id字段,有class表,有class_id, class_name字段
select student.id, student.name, student.class_id, class.class_name
from student
inner join class
on class.id = student.id
这样就能把class表中的classs_name依照class_id属性加到查询结果中了
扩展:
增加字段(在表已经建成的情况下)
alter table customer add sex char(20) null;