1.单表查询
1.1排序 order by (asc 升序,desc 降序)
1)单列排序
select * from <表名> order by <列名> asc;
2)组合排序
select * from <表名> order by <列名1> asc,<列名2> desc;
1.2聚合函数
聚合函数 | 作用 |
---|---|
count() | 统计列不为null的行数个数 |
sulm() | 计算指定列的行数 |
max() | 计算指定列的最大值 |
min() | 计算指定列的最小值 |
avg() | 计算指定列的平均值 |
语法结构:
select <聚合函数> from <表名>;
1.3分组 group by
语法结构:
select <分组字段/聚合函数> from <表名> group by <分组字段> having <条件>;
注:
1)分组一般会与聚合函数一起使用。
2)group by的字段必须出现在select后面,而且select后面只能是分组,聚合函数的字段,不能出现其他的字段。
2)分组后,对分组数据进行过滤,可使用having + 条件(类似于where条件)。
where和having的区别
过滤方式 | 特点 |
---|---|
where | 分组前,不能进行聚合函数 |
having | 分组后,可进行聚合函数 |
1.4 limit 函数(返回查询结果的函数)
语法结构:
select <字段1>,<字段2>,...from <表名> limit/offset/length;
limit ,offset和 length 区别
函数 | 作用 |
---|---|
limit | limit 3,6 从0开始计数,从第4条开始,查询6条 |
offset | 从0开始计数,如省略,默认0 |
length | 返回的行数 |
2.sql约束
常见的约束
约束名 | 约束关键字 |
---|---|
主键 | primary key |
唯一 | unique |
非空 | not null |
外键 | foreign key |
2.1 主键约束(唯一,非空)
语法结构:
create table (
<字段名>,<字段类型> primary key
);
#主键自增
create table (
<字段名>,<字段类型> primary key auto_increment
);
#修改主键自增的起始值
create table (
<字段名>,<字段类型> primary key auto_increment
)auto_increment =<数值>;
2.2 非空约束(某一列不允许为空)
create table (
<字段名>,<字段类型> not null
);
2.3 唯一约束(某一列的值不重复)
create table (
<字段名>,<字段类型> unique
);
2.4 默认值(指定某列的默认值)
create table (
<字段名>,<字段类型> default <默认值>
);
3.多表查询
3.1 笛卡尔积(交叉查询,会产生笛卡尔积,基本不用)
语法格式:
select <字段名> from <表1>,<表2>;
3.2 多表查询分类
3.2.1 内连接
1)隐式内连接:取交集
select <字段名> from <左表>,<右表> where <连接条件>
2)显式内连接:取交集
select <字段名> from <左表> (inner) join <右表> on <条件>
3.2.2 外连接
1)左外连接:左表为基准,匹配右表数据,匹配不到,左表数据显示,右表的展示为null
select <字段名> from <左表> left (outer) join <右表> on <条件>
2)右外连接:右表为基准,匹配左表数据,匹配不到,右表数据显示,左表的展示为null
select <字段名> from <左表> right (outer) join <右表> on <条件>
4.合并查询
4.1 union
语法结构:
select column1 [, column2 ]
from table1 [, table2 ]
[where condition]
union
select column1 [, column2 ]
from table1 [, table2 ]
[where condition]
注:
1)选择的列数必须相同;
2)所选列的数据类型必须在相同的数据类型组中(如数字或字符)
3)列的名称不必相同
4)在重复检查期间,NULL值不会被忽略.
4.2 union all
union all 重复行包含在内,所遵从的规则与 union 一致。
语法结构:
select column1 [, column2 ]
from table1 [, table2 ]
[where condition]
union all
select column1 [, column2 ]
from table1 [, table2 ]
[where condition]
总结:
union和union all关键字都是将两个结果集合并为一个,也有区别。
1、重复值:union在进行表连接后会筛选掉重复的记录,而union all不会去除重复记录。
2、union all只是简单的将两个结果合并后就返回。
3、在执行效率上,union all 要比union快很多,因此,若可以确认合并的两个结果集中不
包含重复数据,那么就使用union all。
5.子查询
5.1 子查询结果作为查询条件:
语法结构:
select <查询字段> from <表> where <字段> = (子查询)
5.2 子查询结果作为一张表:
select <查询字段> from (子查询) <表别名> where <条件>
5.3 子查询结果是单列多行:
select <查询字段> from <表> where <字段> in (子查询)
6.mysql函数–扩展函数
6.1 数学函数
函数 | 作用 |
---|---|
abs(x) | 返回x的绝对值 |
floor(x)向下取整,ceil(x) 向上取整 | 返回不大于x的最大整数值 |
rand() | 返回0·1的随机数 |
pi() | 返回圆周率的值 |
mod(x,y) | 返回x除以y后的余数 |
6.2 字符串函数
函数 | 作用 |
---|---|
concat(s1,s2…) | 将字符串拼接,连接为一个字符串 |
lsft(s,n) | 返回从字符串s开始的n最左字符 |
trim(s) | 移除掉字串中s的字头或字尾处空格 |
replace(s,s1,s2) | 用字符串s2替代字符串s重的字符串s1 |
substring(s,n,len) | 截取字符串s中第n个位置开始,长度为len的字符串 |
mid(s,n.len) | 同substring(s,n,len) |
reverse(s) | 将字符串s的顺序翻转过来 |
6.3 日期和时间函数
函数 | 作用 |
---|---|
curdate() | 返回当前日期 |
curtime() | 返回当前时间 |
now() | 返回当前日期和时间 |
month(d) | 返回月份 |
year(d) | 返回年份 |
6.4 条件判断函数
函数 | 作用 |
---|---|
if(expo,v1,v2) | 如果表达式成立,则执行v1,否则执行v2 |
case when | 用于计算条件列表并返回多个可能结果表达式之一 |
6.5 系统信息函数
函数 | 作用 |
---|---|
version() | 返回数据库的版本号 |
databases() | 返回当前数据库名 |
user() | 返回当前用户名 |