MySql函数应用,分组排序,子查询学习笔记

一、使用计算字段与别名

       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;