基础查询
语法
select 查询列表
from 表名;
特点
- 查询列表可以是一个虚拟表
- 查询列表可以是单个字段,多个字段,常量,表达式,函数,可以是以上的组合
别名
select 字段名 as 别名 from 表名;
select 字段名 “别名” from 表名;
+的作用
- 如果两个操作数都是数值型,则直接做加法运算
- 如果其中一个为非数值型,则强制转换成数值型,如果转换失败,则当做0
- 如果其中一个为null,则结果直接为null
去重
select distinct 字段名 from 表名;
补充函数
select verslon();
select database();
select user();
select ifnull(字段名,表达式);
select concat(字符1,字符2,字符3);
select length(字符/字段); 获取字节长度
条件查询
语法
select 查询列表
from 表名
where 筛选条件;
特点
筛选条件分类:
-
按条件表达式筛选
关系运算符:> ; >= ; < ; <= ; <> ; = -
按逻辑表达式筛选
逻辑运算符:and ; or ; not -
模糊查询
like:一般和通配符搭配使用
_ 任意单个字符
% 任意多个字符between and:一般用于判断某字段是否在指定的区间
in:一般用于判断某字段是否在指定的列表
is null:判断null值
排序查询
语法
select 查询列表
from 表名
where 筛选列表
order by 排序列表;
特点:
- 排序列表可以是单个字段,多个字段,函数,表达式,别名,列的索引,以及以上的组合
- 升序 asc 降序desc
常见函数
sql中的函数分为单行函数和分组函数
调用语法:select 函数名(实参列表);
-
字符函数
concat(str1,str2,……):拼接字符substr(str,pos):截取从pos开始的所有字符,起始索引从1开始
substr(str,pos,len):截取len个从pos开始的字符,起始索引从1开始
length(str):获取字节个数
char_length(str):获取字符个数
upper(str):变大写
lower(str):变小写
trim([substr from] str):去前后指定字符,默认是去空格
left(str,len):从左边截取指定len个数的字符
right(str,len):从右边截取指定len个数的字符
lpad(str,substr,len):左填充
rpad(str,substr,len):右填充
strcmp(str1,str2):比较两个字符的大小
instr(str,substr):获取substr在str中第一次出现的索引
-
数学函数
ceil(x):向上取整floor(x):向下取整
round(x,d):四舍五入
mod(x,y):取模/取余
truncate(x,d):截断,保留小数点后d位
abs(x):求绝对值
-
日期函数
now():获取当前日期——时间curtime():只有时间
curdate():只有日期
date_format(data,格式):格式日期为字符
str_to_date(str,格式):将字符转换成日期
datediff(date1,date2):获取两个日期之间的天数差
year(date)
month(date)
…… -
流程控制函数
①if(条件,表达式1,表达式2):如果条件成立,返回表达式1,否则返回表达式2②case表达式
when 条件1 then 结果1
when 条件2 then 结果2
……
else 结果n
end
分组函数
sum 求和
avg 平均
max 最大
min 最小
count 个数
特点
- 实参的字段的类型,sum和avg只支持数值型,其他三个可以支持任意类型
- 这五个函数都忽略bull值
- count可以支持以下参数
count(字段):查询该字段非空值的个数
count(*):查询结果集的行数
count(1):查询结果集的行数 - 分组函数可以和distinct搭配使用,实现去重的统计
select count(distinct 字段)from 表;
分组查询
语法
select 分组函数,分组的字段
from 表名
where 分组前的筛选条件
group by 分组列表
having 分组后的筛选条件
order by 排序顺序;
特点
- 分组列表可以是单个字段,多个字段
- 筛选条件分为两类
连接查询
当查询中涉及到了多个字段,则需要通过多表连接
笛卡尔乘积:
出现原因:没有有效的连接条件
解决办法:添加有效的连接条件
-
SQL92语法
select 查询列表
from 表1 别名,表2 别名 ……
where 连接条件
and 筛选条件
group by 分组列表
having 分组后筛选
order by 排序列表; -
SQL99语法
内连接
select 查询列表
from 表1 别名
[innner] join 表2 别名 on 连接条件
[innner] join 表3 别名 on 连接条件
where 筛选条件
group by 分组列表
having 分组后的筛选
order by 列表列表
外连接
select 查询列表
from 表1 别名
left/right/full [outer] join 表2 别名
on 连接条件
where 筛选条件
group by 分组
having 分组后筛选
order by 排序列表
limit 分页参数;
特点
①外连接的查询结果=内连接的查询结果+主表有但从表没有的记录
②区分主从表
left join 左边的是主表
right join 右边的是主表
③一般来讲,外连接往往用于查询主表有但从表没有的记录
子查询
说明:
在一个select语句中,有嵌套了另一个完整的select语句。
里面的select语句称为子查询或内查询,外面的select语句称为主查询或外查询
分类:
- 放在select后面
- 放在from后面
- 放在where或having后面
- 放在exists后面
特点:
-
子查询最后用小括号括起来
-
子查询一般放在条件的右侧
-
子查询优先于主查询执行,主查询使用到了子查询的结果
-
放在where或having后面的子查询,一般分为两种
单行子查询:结果集为单行单列,一般搭配关系运算符使用(> < >= <= = <>)
多行子查询:结果集为多行多列,一般搭配多行操作符使用(any,some,all,in)
分页查询
语法
select 查询列表
from 表名
where 筛选条件
limit 起始索引,条目数
特点
- 表中条目索引默认从0开始
- 如果limit子句中,起始索引为0,则可以不写
limit 5;等价于 limit 0,5; - 公式
显示第page页,每页size条
limit(page-1)*size,size;
union联合查询
语法
完整的select语句1 union
完整的select语句2 union
完整的select语句3 union
……
完整的select语句n
特点
- union默认去重,可以使用union all 包含重复项
- 多条待合并的查询语句的查询列数必须一致