MySQL:DQL数据查询语言

查询

desc 表名; // 查询表的结构
select * from 表名;	// 查询表中的所有数据
select 字段名 from 表名;	// 查询表中指定字段的数据
select 字段名 as 别名 from 表名;	// 给查询出来的字段起别名,如果别名中是中文或者含有空格,可以用单引号''括起来

// 条件查询
select 字段名 from 表名 where 条件;
// >= 大于等于 <= 小于等于 > 大于 < 小于 
// between ... and ..  在...之间
// is null 为空; is not null 不为空
// and 并且 or 或者 in 包含(相当于多个or); 前面加not表示非
// like 模糊查询,%代表任意字符,_代表一个字符

排序

// 排序(默认升序asc),[]里的表示可要可不要
select 字段名 from 表名 [where 条件] order by 排序字段 [asc]; //升序
select 字段名 from 表名 [where 条件] order by 排序字段 desc; // 降序
select 字段名 from 表名 [where 条件] order by 排序字段1,排序字段2; // 多个字段排序,只有当第一个排序字段相等时才启用第二个排序字段

数据处理函数

单行处理函数

lower(字段名) 转换小写
upper(字段名) 转换大写
substr(被截取的字段, 起始下标, 截取的长度) 取子串,起始下标从1开始
concat(拼接字段1,拼接字段2) 字符串拼接
length(字段名) 取长度
trim('') 去空格

round(数值, 保留的小数位数) 四舍五入
rand() 生成随机数
round(rand()*100, 0) 100以内的随机数

ifnull(数据, 被当做哪个值) 可以将null转换成一个具体值
注意:NULL只要参与运算,最终结果一定是NULL。为了避免这个现象,需要使用ifnull函数。
ifnull(字符串, 0) 把出现的null当作0处理

case..when..then..when..then..else..end 当什么时候怎么做,当什么时候怎么做

str_to_date('日期字符串','格式') 将字符串转换成日期
例如:str_to_date(‘01-01-1970’,‘%d-%m-%Y’)
如果日期字符串格式是 %Y-%m-%d,就不需要使用str_to_date函数,会自动进行类型转换
date_format(日期字段名,'格式') 格式化日期
例如:date_format(birth,‘%m/%d/%Y’) 这个会把birth字段日期类型转换成 01/01/1970 格式字符串
如果日期字符串格式是 %Y-%m-%d,就不需要使用date_format函数,会自动格式化日期
now() 获取系统当前时间,带有时分秒信息,是datetime类型
format 设置千分位

分组函数(多行处理函数)

特点:输入多行,输出一行。使用前必须先分组,如果没有分组,整张表默认为一组。分组函数在使用时会自动忽略null。分组函数不能直接使用在where子句中,但是可以在having子句中使用。

sum(字段名) 求和
avg(字段名) 平均值
max(字段名) 最大值
min(字段名) 最小值
count(字段名) 计数

注意:
count(具体字段) 表示统计该字段下所有不为NULL的元素的总数。
count(*) 表示统计表中的总行数。

分组查询

// 分组查询,字段名 写分组字段和分组函数,其它的没意义
select 字段名 from 表名 [where 条件] group by 分组字段;
select 字段名 from 表名 [where 条件] group by 分组字段1,分组字段2; // 多个字段联合分组

// 使用having对分组后的数据进一步过滤
select 字段名 from 表名 [where 条件] group by 分组字段 having 条件;	// 优先使用where,where实现不了,再考虑having

总结:关键字的执行顺序

select 字段名 from 表名 where 条件 group by 分组字段 having 条件 order by 排序字段;
// 执行顺序:
// 1.from
// 2.where
// 3.group by
// 4.having
// 5.select
// 6.order by

distinct关键字

作用:去除查询结果的重复记录

// 去重
select distinct 字段名 from 表名;
// 去除查询结果中字段2的重复记录
select 字段1,distinct 字段2 from 表名;
// 去除字段1,字段2联合的重复记录
select distinct 字段1,字段2 from 表名;
// 统计去重后的字段个数
select count(distinct 字段名) from 表名;

连接查询

内连接:等值连接、非等值连接、自连接
外连接:左外连接、右外连接
全连接

当两张表进行连接查询,没有任何条件限制的时候,最终查询结果条数,是两张表条数的乘积,这种现象被称为:笛卡尔积现象。

内连接

select 
	... 
from1 
join2 
on1和表2的连接条件
	
// 条件是等量关系,所以被称为等值连接。
// 条件不是一个等量关系,称为非等值连接。
// 表1、表2是同一张表,同一张表的不同字段进行等值连接,称为自连接。

外连接

// 左外连接(表1是主表)
select 
	... 
from1 
left join2 
on1和表2的连接条件

// 右外连接(表2是主表)
select 
	... 
from1 
right join2 
on1和表2的连接条件

子查询

select语句中嵌套select语句,被嵌套的select语句称为子查询。

from子句中的子查询,可以将子查询的查询结果当作一张临时表。

子查询可以在以下场景中提供数据
在这里插入图片描述

union合并查询结果集

union的效率要高一些。
对于表连接来说,每连接一次新表,则匹配的次数满足笛卡尔积,成倍的翻,X * Y * Z 。
使用union可以减少匹配的次数。在减少匹配次数的情况下,还可以完成两个结果集的拼接。(union把乘法变成了加法运算 X * Y + X * Z)

select 字段名 from 表名 where 条件
union
select 字段名 from 表名 where 条件;

注意:union在进行结果集合并的时候,要求两个结果集的列数相同。结果集合并时列和列的数据类型也要一致。

limit(非常重要)

作用:将查询结果集的一部分取出来。通常使用在分页查询当中。
用法:

完整用法:limit startIndex, length
	startIndex是起始下标,length是长度。
	起始下标从0开始。
	limit 0,5; //取前5
缺省用法:limit 5; //取前5

注意:mysql当中limit在order by之后执行

分页

每页显示5条记录
	第1页:limit 0,5		[0 1 2 3 4]2页:limit 5,5		[5 6 7 8 9]3页:limit 10,5 	[10 11 12 13 14]4页:limit 15,5	[15 16 17 18 19]
	...
	//每页显示pageSize条记录
	第pageNo页:limit (pageNo - 1) * pageSize, pageSize
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值