一、使用计算字段与别名
SELECT CONCAT(vend_name,' (',vend_country,')') as vend_title from vendors ORDER BY vend_name;
二、使用函数处理数据
1:文本处理函数
Left() 返回串左边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Lower() 将串转换为小写
LTrim() 去掉串左边的字符
Right() 返回串右边的字符
RTrim() 去掉串右边的字符
Soundex() 返回串的SOUNDEX值
SubString() 返回子串的字符
Upper() 将串转换为大写
SELECT cust_name,cust_contact from customers WHERE SOUNDEX(cust_contact)=SOUNDEX('Y Lie') ; 返回联系人发音类似于Y Lie的行;
2: 日期和时间处理函数
在MySql中首选的日期格式为yyyy-mm-dd.
下面语句检索出2005年9月下的所有订单.
1:SELECT * from orders WHERE DATE(order_date)BETWEEN '2005-09-01' and '2005-09-30';
2:SELECT * from orders WHERE YEAR(order_date)=2005 and MONTH(order_date)=9;
3:数值处理函数
4:聚集函数
三、分组数据
GROUP BY:
(1):GROUP BY子句可以包含任意数目的列.这使得能对分组进行嵌套,为数据分组提供更细致的控制;
(2):如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总,就是说在建立分组时,指定的所有列都一起计算,所以不能从个别的列中取回数据;
(3):GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能使聚集函数).如果在select中使用表达式,则必须在GROUP BY子句中指定相同的表 达式.不能使用别名.
(4):除聚集计算语句外,select语句中的每个列都必须在GROUP BY子句中给出;
(5):GROUP BY子句必须出现在where子句之后,order by子句之前
(6):使用 with rollup关键字,可以得到每个分组以及每个分组汇总级别的值
HAVING过滤分组:
1: having支持所有where操作符
2:where在数据分组前进行过滤,HAVING在数据分组后进行过滤。
实例:检索总计订单价格大于等于50的订单的订单号和总计订单价格,并排序。
SELECT order_num,SUM(quantity*item_price) as ordertotal from orderitems GROUP BY order_num HAVING SUM(quantity*item_price)>=50 ORDER BY ordertotal;
四:子查询
1:使用嵌套
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'))
2:作为计算字段使用子查询
SELECT cust_name,cust_state,
(SELECT count(*) from orders where orders.cust_id=customers.cust_id)
AS orders
from customers ORDER BY cust_name;