排序查询
一、语法
select 查询表
from 表
where 筛选条件
order by 排序列表[asc / desc]
特点:
1、asc:升序
desc:降序
2、排序列表之中支持单字段,多字段、函数、表达式、别名
3、order by的位置一般放在查询语句的最后(除limit之外)
常见函数:
功能:提高重用性
隐藏了实现细节
调用函数语法:
select 函数名(实参列表);
二、单行函数
1、字符函数
concat:连接
substr:截取字符串
upper/lower:大写、小写
repalce:替换
length:获取字节长度
trim:去前后空格
lpad/rpad:左右填充
instr:获取字串第一次出现的索引
2、数学函数
ceil:向上取整
round:四舍五入
mod:取整
floor:向下取整
truncat:阶段
rand:获取随机数
3、日期函数
date:
now:
year:
month:
day:
date_format:
curdate:
str_to_date:
curtime:
hour:
minute:
second:
datediff:两个时间相差天数
monthname:
4、其他函数
wersion:数据库服务器版本
database:当前打开数据库
password:返回该字符的密码形式
md5:返回该字符的md5加密形式
5、流程控制函数
if(条件表达式,表达式1,表达式2):如果条件表达式成立,返回1,否则返回2
case情况1
case 变量或表达式或字段
when 常量1 then 值1
when。。。。
else。。。
end
case 情况2
case
when 条件1 then 值1
when。。。。
else。。。
end
三、分组函数
1、分类
max:最大值
min:最小值
avg:平均值
sum:求和
count:计数
2、特点
1、语法
select max(字段)from 表名
2、支持的类型
sum和avg一般用于处理数值型
max、min、cuount可以处理任何数据类型
以上分组函数都忽略null
都可以和distinct使用,实现去重统计
count函数
conut(字段):统计该字段非空值的个数
count(*):统计结果集的行数
和分组函数一同查询的字符,要求group by后的字段
分组查询
语法:
select 分组函数,分组后的字段,
from 表
【where 筛选条件】
group by 分组的字段
【having 分组后的筛选】
【order by 排序列表】
特点
使用关键字 筛选的表 位置
分组前的筛选 where 原始表 group by的前面
分组后的筛选 having 分组后的结果 group by的后面
连接查询
含义:当查询中涉及到了多个表的字段,需要使用多表连接
语法
select 字段1,字段2
from 表1,表2;
笛卡尔乘积:当查询多个表时,没有添加有效的连接条件,导致多个表所有行实现全连接
分类:
按年代分类:
sql92:
等值、
语法:
select 查询列表
from 表1 别名,表二,别名
where 表1.key=表2.key
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选 】
【order by 排序自组但】
特点:
起别名
多表顺序可调换
n表连接至少需要n-1个链接条件
等值链接时多表的交集部分
非等值
select 查询列表
from 表1 别名,表二,别名
where 非等值的链接条件
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选 】
【order by 排序自组但】
、自连接
select 查询列表
from 表1 别名,表1,别名
where 表1.key=表1.key
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选 】
【order by 排序自组但】
也支持一部分外连接,但不稳定
sql99【推荐使用】:
内链接
等值,非等值,自连接
外连接
左外、右外、全外(不支持)
交叉连接