• # MySQL基础03


    MySQL基础03

    1. 创建计算字段


    1.1 计算字段

    • 计算字段是运行时在SELECT语句内创建的。

    1.2 拼接字段

    • 拼接(concatenate) 将值联结到一起构成单个值。

    • 在MySQL的SELECT语句中,可使用Concat()函数来拼接两个列。

      SELECT Concat(vend_name, ' (', vend_country, ')')
      FROM vendors
      ORDER BY vend_name;
      
      • Concat()拼接串,即把多个串连接起来形成一个较长的串。Concat()需要一个或多个指定的串,各个串之间用逗号分隔。

    使用别名

    别名(alias)是一个字段或值的替换名。别名用AS关键字赋予。

    SELECT Concat(vend_name, ' (', vend_country, ')') AS vend_title
    FROM vendors
    ORDER BY vend_name;
    
    • 它指示SQL创建一个包含指定计算的名为vend_title的计算字段。
    • 从输出中可以看到,结果与以前的相同,但现在列名为vend_title,任何客户机应用都可以按名引用这个列,就像它是一个实际的表列一样

    1.3 执行算术计算

    SELECT prod_id,
    	   quantity,
    	   item_price,
    	   quantity*item_price AS expanded_price
    FROM orderitems
    WHERE order_num = 20005;
    
    • 输出中显示的expanded_price列为一个计算字段,此计算为quantity*item_price。

    2. 数据处理函数


    2.1 文本处理函数

    函数 说明
    Left() 返回串左边的字符
    Length() 返回串的长度
    Locate() 找出串的一个子串
    Lower() 将串转换为小写
    LTrim() 去掉串左边的空格
    Right() 返回串右边的字符
    RTrim() 去掉串右边的空格
    Soundex() 返回串的SOUNDEX值
    SubString() 返回子串的字符
    Upper() 将串转换为大写

    Soundex()

    SOUNDEX是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。

    customers表中有一个顾客Coyote Inc.,其联系名为Y.Lee。但如果这是输入错误,此联系名实际应该是Y.Lie,怎么办?显然,按正确的联系名搜索不会返回数据,如下所示:

    SELECT cust_name, cust_contact
    FROM customers
    WHERE cust_contact = 'Y. Lie';
    

    现在试一下使用Soundex()函数进行搜索,它匹配所有发音类似于Y.Lie的联系名:

    SELECT cust_name, cust_contact
    FROM customers
    WHERE Soundex(cust_contact) = Soundex('Y. Lie');
    
    • 因为Y.Lee和 Y.Lie发音相似,所以它们的SOUNDEX值匹配,因此WHERE子句正确地过滤出了所需的数据。

    2.2 日期和时间处理函数(略)

    2.3 数据处理函数(略)

    3. 聚集函数


    聚集函数(aggregate function) 运行在行组上,计算和返回单个值的函数。

    函数 说明
    AVG() 返回某列的平均值
    COUNT() 返回某列的行数
    MAX() 返回某列的最大值
    MIN() 返回某列的最小值
    SUM() 返回某列的之和

    4. 分组


    • GROUP BY子句

    • HAVING子句

    4.1 GROUP BY子句创建分组

    分组是在SELECT语句的GROUP BY子句中建立的。

    SELECT vend_id, COUNT(*) AS num_prods
    FROM products
    GROUP BY vend_id;
    
    • 上面的SELECT语句指定了两个列,vend_id包含产品供应商的ID,num_prods为计算字段(用COUNT(*)函数建立)。
    • GROUP BY子句指示MySQL按vend_id排序并分组数据。

    4.2 HAVING子句过滤分组

    HAVING非常类似于WHERE,唯一的差别是WHERE过滤行,而HAVING过滤分组

    HAVING支持所有WHERE操作符

    SELECT cust_id, COUNT(*) AS orders
    FROM orders
    GROUP BY cust_id
    HAVING COUNT(*) >= 2;
    
    • 这条SELECT语句的前3行类似于上面的语句。最后一行增加了HAVING子句,它过滤COUNT(*) >=2(两个以上的订单)的那些分组。
    SELECT cust_id, COUNT(*) AS orders
    FROM orders
    GROUP BY cust_id
    HAVING orders >= 2;
    
    • 这个代码和上面的等价。

    HAVING和WHERE的差别

    • WHERE在数据分组前进行过滤,过滤的是
    • HAVING在数据分组后进行过滤,过滤的是分组

    4.3 分组和排序

    ORDER BY GROUP BY
    排序产生的输出 分组行,但输出可能不是分组的顺序
    任意列都可以使用,甚至非选择的列也可以使用 只可能使用选择列或者表达列,而且必须使用每个选择列表达式
    不一定需要 如果与聚集函数一起使用列或表达式,则必须使用
    SELECT order_num, SUM(quantity*item_price) AS ordertotal
    FROM orderitems
    GROUP BY order_num
    HAVING SUM(quantity*item_price) >= 50;
    
    • 输出按照order_num排序。

    为按总计订单价格排序输出,需要添加ORDER BY子句,如下所示:

    SELECT order_num, SUM(quantity*item_price) AS ordertotal
    FROM orderitems
    GROUP BY order_num
    HAVING SUM(ordertotal) >= 50
    ORDER BY ordertotal;
    
    • 按订单总价排序输出。

    4.4 SELECT子句顺序

    子句 说明 是否必须使用
    SELECT 要返回的列或表达式
    FROM 从中检索数据的表 仅在从表选择数据时使用
    WHERE 行级过滤
    GROUP BY 分组说明 仅在按组计算聚集时使用
    HAVING 组级过滤
    ORDER BY 输出排序顺序
    LIMIT 要检索的行数

    5. 小结


    • Concat()拼接函数
    • AS取别名
    • 聚集行数AVG()、SUM()、 MAX()、 MIN()、 COUNT()
    • 分组的GROUP BY子句和HAVING子句过滤组
    TO BE CONTINUED...
  • 相关阅读:
    深入理解sizeof
    trie树详解
    高精度计算
    编写高效的Android代码
    Android Architecture
    AIDL Android中的远程接口
    性能测试常见术语
    软件与软件测试相关
    注解实现Springmvc+jsp步骤
    非注解实现SpringMvc+JSP (一般用不到 主要用于了解研究底层)
  • 原文地址:https://www.cnblogs.com/ly-leah/p/13732274.html
Copyright © 2020-2023  润新知