mysqlselect字段运算_MySQL必知必会笔记(三)SELECT语
句计算字段数据处。。。
第⼗章 创建计算字段
计算字段
存储在表中的数据⼀般不是应⽤程序所需要的格式。我们需要直接从数据库中检索出转换、计算或格式化的数据。⽽不只是检索出数据,然后再到应⽤程序或报告程序中区格式化。
这就发挥了计算字段的作⽤了。与前⾯的字段不同,计算字段并不实际存在于数据库中。计算字段是运⾏时在SELECT 语句中创建的。
需要注意的是,只有SELECT语句知道那些列是实际列,哪些列不是,客户机的⾓度来看,计算字段和其他字段是⼀样的。
拼接字段
拼接:将值联结到⼀起构成单个值。
⽣成供应商columnOne(columnTwo)的格式
SELECT Concat(columnOne, '(' , columnTwo, ')') FROM table ORDER BY columnOne;
使⽤别名
别名使⽤AS关键字赋予
执⾏算术运算
另⼀常见的⽤途就是对检索出来的数据进⾏算术运算。
例如:检索出column_id 为2005的columnOne乘以columnTwo的值
SELECT column_id, columnOne, columnTwo, columnOne*columnTwo AS column_price FROMtable WHERE column_id = 2005this怎么读音英语
操作符+ - *  /
SELECT 3*2;将返回6
SELECT Now(); 返回当前的⽇期和时间
第⼗⼀章 使⽤数据处理函数
SQL实现了⼀下类型的函数
1 ⽤于处理⽂本串,如删除、填充、装换⼤⼩写
2 ⽤于数据上进⾏的算术操作,如返回绝对值,进⾏代数运算
3⽤于处理⽇期和时间值并从这些值中提取特定的成分,如返回两个⽇期差,检查⽇期有效性
4 返回DBMS正使⽤的特殊信息 ,如⽤户登录信息,检查版本细节信息
⽂本处理函数
Upper()  将⽂本转换为⼤写
SELECT vend_name, Upper(vend_name) AS vend_name_upcase FROM vendors ORDER BYvend_name;
常⽤的⽂本处理函数
Left()            返回串左边的字符
Length()        返回串的长度
Locate()        出串的⼀个⼦串
Lower()        将串转换为⼩写
Right()          返回右边的字符
Soundex()      返回串的SOUNDEX值
SubString()    返回串的字符
Upper()          将串转换ewing⼤写
Soundex()是⼀个将任何⽂字串转换为描述语⾳表⽰的字母数字模式的算法。他考虑了类似发信字符和⾳节,使得能对串进⾏发⾳的⽐较⽽不是字母⽐较,如:Y.lee搜索可以匹配Y.lie
SELECT cust_name , cust_contact  FROM customers WHERE Soundex(cust_contact) =Soundex('Y Lie')
删除多余空格的函数
RTrim()  LTrim()  Trim()  依次是删除 右边左边两边的空格
SELECT Concat(RTrim(vend_name), '( ' ,RTrim(vend_country), ') FROM vendors ORDER BYvend_name;
⽇期和时间处理函数
⽇期和时间常⽤相应的数据类型和特⾊的格式存储,以便能快速和有效的排序或过滤,并节省物理存储空间。
AddDate()      增加⼀个⽇期天、周等
AddTime()      增加⼀个时间时、分等
CurDate()      返回当前⽇期
CurTime()      返回当前时间
Date()            返回⽇期时间的⽇期部分
DateDiff()      计算两个⽇期之差
Date_Add()    ⾼度灵活的⽇期或时间串
Date_Format()      返回⼀个格式的⽇期或时间串
Day()            返回⼀个⽇期的天数部分
DayOfWeek() 对于⼀个⽇期,返回对于星期⼏
Hour()            返回⼀个时间的⼩时部分
Minute()        返回⼀个时间的分钟部分
Moth()          返回⼀个⽇期的⽉份部分
Now()            返回当前的⽇期和时间
Second()        返回⼀个时间的秒部分
Time()          返回⼀个⽇期时间的时间部分
Year()            返回⼀个⽇期的年份部分
数据库基础知识数据类型
MySQl⽇期格式必须为yyyy-mm-dd,如2010-05-03。虽然其他⽇期格式也⾏,但这是⾸选格式,因为他排除了多义性。
例如,存储的⽇期列中的⽇期是2010-11-05 15:23:05 如果想出2010-11-05这天的数据,使⽤前⾯的语句就不⾏了。这是要使⽤Date()函数指⽰mysql提取列的⽇期的部分
SELECT cust_id, order_num FROM orders WHERE Date(order_date) = '2010-11-05';
检索出2005-5⽉份的订单怎么办呢?可以使⽤BETWEEN
SELECT cust_id,order_num FROM orders WHERE Date(order_date) BETWEEN '2005-05-01' AND '2005-05-30';
还有⼀种不需要记住天数的函数Month(),使年份相等,再让⽉份相等就⾏了
SELECTcust_id,order_num  FROM orders WHERE Year(order_date) = 2005 ANDMonth(order_date) = 5;
数值处理函数
Abs()            返回⼀个数的绝对值
Cos()            返回⼀个⾓度的余弦
Exp()            返回⼀个数的指数值
Mod()            返回除操作的余数
Pi()              返回圆周率
Rand()            返回⼀个随机数
Sin()            返回⼀个⾓度的正弦值
Sqrt()            返回⼀个数的平⽅根
Tan()            返回⼀⾓度的正切
第⼗⼆章 汇总函数
Msyql提供这些函数以便分析和报表⽣成,这种类型的检索例⼦有以下⼏种:
汇聚函数:运⾏在⾏组上,计算和返回单个值的函数
1 确定表中的⾏数(或者满⾜某个条件或包括某个特定的值的⾏数)
2 获得表中⾏组的和
3 出表列(或所有⾏或某特定⾏的)最⼤值、最⼩值和平均值
AVG()            返回某列的平均值
COUNT()          返回某列的⾏数
MAX()            返回某列的最⼤值
MIN()            返回某列的最⼩值
SUM()            返回某列值之和
求products表中产品的平均价格
SELECT AVG(prod_price)  AS avg_price FROM products;
求products表中编号为1003产品的平均价格
SELECT AVG(prod_price)  AS avg_price FROM products WHERE vend_id = 1003;
AVG()函数只能⽤来确定特定数值列的平均值,⽽且名必须作为函数参数给出。为了获得多个平均值,必须使⽤多个AVG()函数,AVG()函数忽略列值为NULL的⾏
COUNT()函数的两种使⽤⽅式:
1 COUNT(*) 对表中的数⽬进⾏计数,不管表列中包含的是NULL值还是⾮空值
2 COUNT(column) 对特定的列中具有值的进⾏计数,忽略NULL值
SELECT COUNT(*) AS num_cust FROM customers;
SELECT COUNT(cust_email) AS num_cust FROM customers;
MAX()函数,忽略列值为NULL的⾏
SELECT MAX()  AS max_price FROM products;
MIN()  与MAX()函数⼀样
SUM() 函数
SELECT SUM(quantity) AS items_ordered FROM orderitems WHERE order_num = 2005
下⾯是mysql5以后的函数在mysql4中不能正常运⾏
DISTINCT  参数,作⽤是返回不相同的值
下⾯是返回供应商提供的产品的平均值,它与上⾯的SELECT 语句相同,但使⽤了DISTICT参数,因此平均值只考虑各个不同价格合起来的平均值
SELECT AVG(DISTINCT prod_price)  AS avg_price FROM products WHERE vend_id=10003;
如果指定了列名,DISTINCT参数只能⽤于COUNT(),DISTINCT参数不能⽤于COUNT(*)应为DISTINCT必须使⽤列名。
第⼗三章 分组数据
分组允许把数据分成多个逻辑组,⽐便能对每个组进⾏聚集计算。
分组是在SELECT 语句的 GROUP BY ⼦句中建⽴的。
返回每个⼚商提供了⼏个产品
SELECT vend_id, COUNT(*)  AS num_prods FROM products  GROUP BY vend_id;imgur链接打不开
GROUP BY ⼀些重要规定
1 GROUP BY        ⼦句可以包含任意数⽬的列。这使得能对分组进⾏嵌套,为数据分组提供了更细致的控制
2 如果在GROUP BY  ⼦句中嵌套了分组,数据将在最后规定的分组上进⾏汇总,换句话说,在建⽴分组时,指定的所有列都⼀起计算(所以不能从个别列取回数据)
3 GROUP BY        ⼦句列出的每个列都必须是检索列或有效的表达式,(但不能是聚集函数)如果。在SELECT 中使⽤了表达式,则必须在GROUP BY ⼦句中指定相同的表达式,不能使⽤别名。
4 除聚集计算语句外,SELECT 语句中的每个列都必须在GROUP BY ⼦句中给出
5 如果分组列中具有NULL值,不管⼀个或多个都将作为⼀个分组返回
6 GROUP BY ⼦句必须出现在WHERE ⼦句之后,GROUP BY ⼦句之前
过滤分组
如想要得到⼤于3的不同产品订单
WHERE 是过滤指定的⾏⽽不是列。 HAVING ⽀持所有 WHERE 操作符。
SELECT cust_id, COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >3;
WHERE 是在分组前进⾏过滤, HAVING 是在分组后进⾏过滤
分组和排序区别
ORDER BY                      GROUP BY
排序产⽣的输出分组⾏,单输出可能不是分组的顺序
任意列都可以使⽤(甚⾄只可能使⽤选择列或表达式,⽽且必须使⽤每个选择列表达式
是分选择列也可以使⽤)如果与聚集哈思楠⼀起使⽤列(或表达式)则必须使⽤
不⼀定需要php自学多久可以工作
例⼦:检索总计订单价格⼤于50的订单号和总计订单
SELECT order_num , SUM(quantity* item_price)  AS ordertotal  FROM orderitems GROUP
BYorder_num HAVING SUM(quantity*item_price) >= 50;
按订单价格进⾏排序 ,后⾯加 ORDER BY ordertotal;
SELECT ⼦句顺序
SELECT        要返回的列或表达式
FROM          从中检索数据的表
WHERE        ⾏级过滤
GROUNP BY  分组说明
HAVING        组级过滤
ORDER BY    输出排序顺序
LIMIT          要检索的⾏数
第⼗三章 使⽤⼦查询
Sql还允许使⽤⼦查询,即嵌套在其他查询中的查询。
利⽤⼦查询进⾏过滤
SELECT cust_id FROM orders WHERE order_num IN(
SELECT order_num FROM orderitems WHERE prod_id = 'TNT2'二叉树的遍历结果怎么求
)
可以把⼀条SELECT语句返回的结果⽤于另⼀条SELECT语句的WHERE ⼦句
格式化sql    包含⼦查询的sql语句难以阅读,可以使⽤适当的缩进。
得到了订购物品TNT2的所有客户ID,下⼀步是检索这些客户的信息,总语句是
SELECT cust_name , cust_contact  FROM  customers WHERE cust_id IN(
SELECT cust_id FROM orders WHERE order_num IN  (
SELECT order_num FROM orderitems WHERE prod_id = 'TNT2'
)mysql面试题汇总
)
列必须匹配 在WHERE⼦句中使⽤⼦查询,应该保证SELECT语句具有WHERE ⼦句中相同数⽬的列。通常⼦查询将返回的单个列于单个列匹配,但如果需要也可以多个列。
虽然⼦查询⼀般与IN操作符结婚使⽤,但也可以⽤于测试等于、不等于等符号
作为计算字段使⽤⼦查询
使⽤⼦查询的另⼀个⽅法是创建计算字段。
假设需要显⽰sustomers表中每个客户的订单总数。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。