MySQL排序查询,常见函数,分组查询,连接查询


2020-12-1

排序查询
常见函数
分组查询
连接查询

排序查询

1. 语法

select 查询列表
fromwhere 筛选条件
order by 排序列表 【asc升序/desc降序】

2. 特点

  1. asc :升序,如果不写默认升序
    desc:降序
  2. 排序列表 支持 单个字段、多个字段、函数、表达式、别名
  3. order by的位置一般放在查询语句的最后(除limit语句之外)

常见函数

1. 概述

功能:类似于java中的方法
好处:提高重用性和隐藏实现细节
调用:select 函数名(实参列表);

2. 单行函数

  1. 字符函数
    concat:连接
    substr:截取子串
    upper:变大写
    lower:变小写
    replace:替换
    length:获取字节长度
    trim:去前后空格
    lpad:左填充
    rpad:右填充
    instr:获取子串第一次出现的索引
  2. 数学函数
    ceil:向上取整
    round:四舍五入
    mod:取模
    floor:向下取整
    truncate:截断
    rand:获取随机数,返回0-1之间的小数
  3. 日期函数
    now:返回当前日期+时间
    curdate:返回当前日期
    curtime:返回当前时间
    year:返回年
    month:返回月
    monthname:以英文形式返回月
    day:返回日
    hour:返回小时
    minute:返回分钟
    second:返回秒
    date_format:将日期转换成字符
    str_to_date:将字符转换成日期
    datediff:返回两个日期相差的天数
  4. 其他函数
    version : 当前数据库服务器的版本
    database : 当前打开的数据库
    user : 当前用户
    password('字符'):返回该字符的密码形式
    md5('字符') : 返回该字符的md5加密形式
  5. 流程控制函数
    if(条件表达式,表达式1,表达式2):如果条件表达式成立,返回表达式1,否则返回表达式2
#case 情况1
#--------------------------
case 变量或表达式或字段
when 常量1 then1
when 常量2 then2
...
else 值n
end
#--------------------------
#case 情况2
#--------------------------
case 
when 条件1 then1
when 条件2 then2
...
else 值n
end

3. 分组函数

  1. 分类
    max: 最大值
    min: 最小值
    sum: 和
    avg: 平均值
    count: 计算个数
  2. 特点
    ①语法
    select max(字段) from 表名;
    
    ②支持的类型
    sumavg一般用于处理数值型
    maxmincount可以处理任何数据类型
    ③以上分组函数都忽略null
    ④都可以搭配distinct使用,实现去重的统计
    select sum(distinct 字段) from;
    
    ⑤count函数
    count(字段):统计该字段非空值的个数
    count(*):统计结果集的行数
    效率上:
    MyISAM存储引擎,count(*)最高
    InnoDB存储引擎,count(*)count(1)效率高于count(字段)
    ⑥ 和分组函数一同查询的字段,要求是group by后出现的字段

分组查询

1. 语法

select 分组函数,分组后的字段
from 表
【where 筛选条件】
group by 分组的字段
【having 分组后的筛选】
【order by 排序列表】

(【】)表示可选

2. 特点

使用关键字筛选的表位置
分组前筛选where原始表group by的前面
分组后筛选having分组后的结果group by 的后面

连接查询

1. 含义

当查询中涉及到了多个表的字段,需要使用多表连接

select 字段1,字段2
from1,表2,...;

笛卡尔乘积:当查询多个表时,没有添加有效的连接条件,导致多个表所有行实现完全连接
如何解决:添加有效的连接条件

2. 分类

按年代分类:
sql92:

等值
非等值
自连接
也支持一部分外连接(用于oracle、sqlserver,mysql不支持)

sql99【推荐使用】

  • 内连接

等值
非等值
自连接

  • 外连接

左外
右外
全外(mysql不支持)

  • 交叉连接

3. SQL92语法

1. 等值连接

语法:
select 查询列表
from1 别名,2 别名
where1.key=2.keyand 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】
特点:

① 一般为表起别名
②多表的顺序可以调换
③n表连接至少需要n-1个连接条件
④等值连接的结果是多表的交集部分

2. 非等值连接

语法:
select 查询列表
from1 别名,2 别名
where 非等值的连接条件
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】

3. 自连接

语法:
select 查询列表
from 表 别名1,表 别名2
where 等值的连接条件
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】

4. SQL99语法

1.内连接

语法:
select 查询列表
from1 别名
【innerjoin2 别名 on 连接条件
where 筛选条件
group by 分组列表
having 分组后的筛选
order by 排序列表
limit 子句;
特点:

①表的顺序可以调换
②内连接的结果=多表的交集
③n表连接至少需要n-1个连接条件

分类:

等值连接
非等值连接
自连接

2.外连接

语法:
select 查询列表
from1 别名
left|right|fullouterjoin2 别名 on 连接条件
where 筛选条件
group by 分组列表
having 分组后的筛选
order by 排序列表
limit 子句;
特点:

①查询的结果=主表中所有的行,如果从表和它匹配的将显示匹配行,如果从表没有匹配的则显示null
②left join 左边的就是主表,right join 右边的就是主表
full join 两边都是主表
③一般用于查询除了交集部分的剩余的不匹配的行

3.交叉连接

语法:
select 查询列表
from1 别名
cross join2 别名;
特点:

类似于笛卡尔乘积

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值