SQL语句
SQL分类:
DDL:数据定义语句
create,alter,drop...
DML:数据操作语句
insert(添加记录),update(修改记录中的值),delete(删除记录),select(查询语句(表中))
添加记录:INSERT
语法1:
insert into 表名 (列名1,列名2,...,列名n)
values (值1,值2,...,值n);
语法2:
insert into 表名
values (值1,值2,...,值n);
注意:
列可以按照自己的顺序来写,值必须和列一一对应
主键列:如果设定为自动增长,不指定值,默认从1开始,如果已经有数据,取上一个记录值+1,也可以根据自己需要指定值,如果赋值0或者NULL,也是表示自动增长,建议使用NULL
单表查询:
select 字段,...
from 表
where 行筛选
group by 分组字段
having 组筛选
order by 列排序
limit m,n取结果中的一部分行;
1.基本查询语句:
select 字段,...,字段
from 表名;
注意:
1.执行流程:from,确定表-->select,确定列
2.如果要查询所有的列,可以用*
3.对于数值,日期时间类型的列可以做算术运算, +,-,*,/
4.查询的结果称为结果集,由行和列组成
5.在查询时,可以修改结果集中的列名,就是给列取别名:
select 列名或者表达式 [as] 别名,...
from 表名;
6.查询时,可以把多个值拼接到一起, concat(值1,值2,...,值n)
7.null: 代表的未知的,不确定的,不是一个固定值,一种语义的描述,很特殊
表达式中如果有空值,结果还是空,如果null需要转换成某一个值:
ifnull(列或表达式,特殊值)
列或表达式为空时,结果取特殊值
8.查询去重的结果,利用distinct
select distinct 字段
from 表;
2.查询语句之排序子句:order by
语法:
order by 字段 asc|desc,...,字段 asc|desc;
注意:
1.执行流程:from,确定表-->select,确定列,结果集确定->order by,排序
2.asc:升序, desc:降序, 如果不指定升降,默认升序
3.如果要按照多个列排序
order by 列1 asc|desc,列2 asc|desc
优先看前面的列,前面的列值相等再看下一个列
3.查询语句之行筛选子句--where
语法:
where 条件表达式
注意:
1.执行流程:from,确定表-->where,行筛选,一行一行筛选->select,列->order by,排序
2.条件运算符
关系运算符:>,>=,<,<=,=(等于),!=,<>(不等于)
between...and...: 在...和...之间,闭区间,包含两个端点值
in(点值,...):在列举的值中存在
is null:是空的, null代表未知不确定,语义表达
判断是否是空的,不能用=,无法查询结果,只能用is null
like:模糊查询
通配符:_:可以代表任意一个字符 %:可以代表任意个(0,1,多个)字符
where 列或表达式 like '通配符组合表达式'
eg:查询名字中包含a '%a%'
逻辑运算符:
not, and, or
与或非和Java中一样
注意:优先级, not>and>or
如果判断时,可以利用()改变顺序
not使用
not between...and...:
not in(点值,...):
is not null:
not like:
4.limit:取一部分结果
语法:
limit m,n;
注意:
1.执行流程:from->where->select->order by,排序->limit,取一部分结果
2.limit m,n:
m:从第m条开始, 计数从0开始计数
n:共取多少行
如果从0开始,m可以省略 , limit n
作用:可以实现分页效果
eg:设定一页10条
一共有105条,需要11页
第1页:limit 0,10
第2页:limit 10,10
第n页:limit (n-1)*10,10
5.查询之分组子句---group by
目的:统计时,把数据分成多块,分别统计
语法:
group by 字段,...
注意:
1.执行流程:from->where,行的筛选->group by,剩下的所有行分组->
select,对每个组做统计,一个组得到一个结果->order by,排序->limit
2.当使用group by分组时,除了查询每组统计结果,建议把分组的列查询出来,这样会更有意义
3.如果查询中涉及到组, select中使用组函数,或者使用了group by子句,不能直接查询普通的列,但可以查询分组的列
4.同时按照多个列分组,多个列值都相等才算作一组
group by 列1,列2...
函数:
mysql中内置了很多函数
单行函数:一个行得到一个结果, ifnull(), concat()
多行函数(组函数):多个行(一个组)得到一个结果, 统计函数,聚合函数
如果所有的数据没有分组,算作一组
聚合函数,组函数:
sum(列或表达式):求和
avg(列或表达式):求平均
max(列或表达式):求最大值
min(列或表达式):求最小值
count(列或表达式):统计个数
注意:
1.组函数,统计是不包括空值
2.sum(),avg()只针对数值型,其它三个可以针对任意类型
3.count()为了统计有多少行,建议统计非空列,主键最合适,还可以用count(*)
4.select中使用组函数,就不能同时查询普通的列或使用单行函数
未完待续......