【什么是计算字段】
*存储在数据库表中的数据一般不是应用程序所需要的格式
*需要直接从数据库中检索出转换、计算或格式化过的数据
计算字段并不实际存在于数据库表中。计算字段是运行时在SELECT语句内创建的
>>>计算字段 是对select检索得到的字段的再处理
字段(field) 基本上与列(column)的意思相同,经常互换使用,不过数据库列一般称为列,
而术语字段通常用在计算字段的连接上
计算返回的字段叫做计算字段
【方法1:拼接】
Concat()拼接串,即把多个串连接起来形成一个较长的串
Concat(zd,zd1,"pinjie",zd2,"pinjie"," ") 拼接多个字符串 用逗号,隔开
RTrim()函数去掉值右边的所有空格
LTrim()函数去掉值左边的所有空格
Trim() 去掉串左右两边的空格
【方法2: 使用别名】
select zd as zd_bieming
【用途】常见的用途包括在实际的表列名包含不符合规定的字符(如空格)时重新命名它,在
原来的名字含混或容易误解时扩充它,等等
【方法3:算数计算】
select zd1*zd2 as noe_zd
支持的计算方法:加减乘除
【*技巧*】
SELECT 3*2
>> 6
【使用函数来处理 select筛选的字段】
1、mysql的函数 在这里 转换和处理 数据
2、介绍什么是函数,MySQL支持何种函数,以及如何使用这些函数
3、多数SQL语句是可移植的
4、而函数的可移植性却不强。几乎每种主要的DBMS的实现都支持其他实现不支持的函数,而且有时差异还很大
使用方法 可带where筛选
select 函数名(zd) where
>>返回 处理后的结果
【支持函数类型】
1、文本处理 去掉左边 右边字符 大小写转换 返回左右 字符 返回串的长度
2、算数计算 加减成除 代数 三角函数 圆周率 平方根
3、处理日期和时间值 时间模块 返回当前时间 放回当前日期 返回 时 分 秒 返回 年 月 日 返回时间
4、DBMS 系统函数
SOUNDEX是一个将任何文本串转换为描述其语音表示的字母数字模式的算法
日期和时间采用相应的数据类型和特殊的格式存储
一般,应用程序不使用用来存储日期和时间的格式,因此日期和时间函数总是被用来读取、统计和处理这些值
用日期进行过滤需要注意一些别的问题和使用特殊的MySQL函数
【日期使用注意】
日期必须为格式yyyy-mm-dd 2005年9月1日 >>> 005年9月1日
Date(order_date) MySQL仅提取列的日期部分
Date(order_date) = "005年9月1日"
Date(order_date) between "2005-09-01" and "2005-09-30"
Year(order_date) = 2005 AND Month(order_date) = 9
【时间格式的一些处理】
【数值处理】
本小结 还是一些 函数的使用
汇总数据而不用把它们实际检索出来
【SQL的聚集函数以及如何利用它们汇总表的数据】
确定表中行数(或者满足某个条件或包含某个特定值的行数)。
获得表中行组的和。
找出表列(或所有行或某些特定的行)的最大值、最小值和平均值。
MySQL还支持一系列的标准偏差聚集函数
5个聚集函数
使用方法和 一般函数一样的 可带where筛选
select 函数名(zd) where
>>返回 处理后的结果
【聚集函数使用的一个误区】
场景:比如说求一个平均值a列是不同的厂家 b列是不同厂家的产品的价格
希望求得 某一个厂家的所有产品的平均值
CREATE TABLE `test4` (
`organization` varchar(20) DEFAULT NULL,
`price` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `test`.`test4` (`organization`, `price`) VALUES ('a', '10');
INSERT INTO `test`.`test4` (`organization`, `price`) VALUES ('a', '9');
INSERT INTO `test`.`test4` (`organization`, `price`) VALUES ('a', '11');
INSERT INTO `test`.`test4` (`organization`, `price`) VALUES ('b', '5');
INSERT INTO `test`.`test4` (`organization`, `price`) VALUES ('b', '4');
INSERT INTO `test`.`test4` (`organization`, `price`) VALUES ('b', '3');
select organization ,avg(price) from test4 where organization in( 'a','b')
>>a 7.8
起码没有报错 但是结果是不正确的
select organization ,avg(price) from test4 where organization = 'a'
>>a 10 可以看到结论 b是没有被搜索出来的 a的条件就把table 一次性的过了一遍
【注意点就是】
1、聚合函数 可以只聚合单个字段 也可以聚合多个字段 但尽量不要把 聚合和非聚合的字段
混合在一起select 出来 要么没有被聚合的字段全都是一样的
2、
1、AVG() 返回某列的平均值
求平均值 为了获得多个列的平均值, 必须使用多个AVG()函数。
AVG()函数忽略列值为NULL的行
2、COUNT() 返回某列的行数 返回select结果的行数
使用COUNT(*) 不忽略NULL值
使用COUNT(column) 忽略NULL值
3、MAX() 返回某列的最大值 求最大值 数值或日期
在用于文本数据时,如果数据按相应的列排序,则MAX()返回最后一行
忽略NULL值
4、MIN() 返回某列的最小值 求最小值
用于文本数据时,如果数据按相应的列排序,则MIN()返回最前面的行
忽略NULL值
5、SUM() 返回某列值之和 求和
忽略NULL值
【标准的算术操作符 和 聚集函数的结合使用】
SUM(item_price*quantity)
【注意使用的先后顺序】
操作的先后顺序 函数操作符 和字段的使用 先后
【聚集不同值】
select AVG(DISTINCT zd) as zd_new
默认方式 ALL
DISTINCT 用于指定列名 不能 DISTINCT *
【组合聚集函数】
组合聚集函数 判定的点是组合聚集的过程是对 同统一大片的数据 同时发生的
没有先后
select
聚集函数1 zd1
聚集函数2 zd2
聚集函数3 zd3
from table where