SQL语法基础篇(三)

注:摘自极客时间《SQL必知必会》,纯属个人学习笔记总结

上一篇

07丨什么是SQL函数?为什么使用SQL函数可能会带来问题?

  • 思考
  1. 什么是 SQL 函数?
  2. 内置的 SQL 函数都包括哪些?
  3. 如何使用 SQL 函数对一个数据表进行操作,比如针使用这些函数完成哪些操作?
  4. 什么情况下使用 SQL 函数?为什么使用 SQL 函数
  • 算术函数在这里插入图片描述
    select ABS(-2),运行结果为2;
    select MOD(101, 3),运行结果为2;
    select ROUND(37.25, 1),运行结果为37.3
  • 字符串函数
    在这里插入图片描述
    SELECT CONCAT('abc', 123),运行结果为 abc123。
    SELECT LENGTH('你好'),运行结果为 6。
    SELECT CHAR_LENGTH('你好'),运行结果为 2。
    SELECT LOWER('ABC'),运行结果为 abc。
    SELECT UPPER('abc'),运行结果 ABC。
    SELECT REPLACE('fabcd', 'abc', 123),运行结果为 f123d。
    SELECT SUBSTRING('fabcd', 1,3),运行结果为 fab。
  • 日期函数
    在这里插入图片描述
    SELECT CURRENT_DATE(),运行结果为 2019-04-03。
    SELECT CURRENT_TIME(),运行结果为 21:26:34。
    SELECT CURRENT_TIMESTAMP(),运行结果为 2019-04-03 21:26:34。
    SELECT EXTRACT(YEAR FROM '2019-04-03'),运行结果为 2019。
    SELECT DATE('2019-04-01 12:00:05'),运行结果为 2019-04-01。
  • 转换函数在这里插入图片描述
    SELECT CAST(123.123 AS INT),运行结果会报错。(不会四舍五入)
    SELECT CAST(123.123 AS DECIMAL(8,2)),运行结果为 123.12。
    SELECT COALESCE(null,1,2),运行结果为 1。
  • 总结
    在这里插入图片描述

08丨什么是SQL的聚集函数,如何利用它们汇总表的数据?

  • 思考
  1. 聚集函数都有哪些,能否在一条 SELECT 语句中使用多个聚集函数;
  2. 如何对数据进行分组,并进行聚集统计;
  3. 如何使用 HAVING 过滤分组,HAVING 和 WHERE 的区别是什么。
  • 聚集函数
    在这里插入图片描述
    (1).射手(主要定位或者次要定位是射手)的英雄数、平均最大生命值、法力最大值的最大值、攻击最大值的最小值,以及这些英雄总的防御最大值等汇总数据。
SELECT COUNT(*), AVG(hp_max), MAX(mp_max), MIN(attack_max), 
SUM(defense_max) FROM heros WHERE role_main = '射手' or role_assist = '射手'

(2).AVG、MAX、MIN 等聚集函数会自动忽略值为 NULL 的数据行,MAX 和 MIN
函数也可以用于字符串类型数据的统计,如果是英文字母,则按照 A—Z 的顺序排列,越往后,数值越大。如果是汉字则按照全拼拼音进行排列。
SELECT MIN(CONVERT(name USING gbk)), MAX(CONVERT(name USING gbk)) FROM heros (name 字段统一转化为 gbk)
(3).对数据行中不同的取值进行聚集,先用 DISTINCT 函数取不同的数据,然后再使用聚集函数。比如我们想要查询不同的生命最大值的英雄数量是多少。
SELECT COUNT(DISTINCT hp_max) FROM heros (MIN, MAX除外)

  • 如何对数据进行分组,并进行统计(GOUNP BY)
    (1).按照英雄的主要定位进行分组,并统计每组的英雄数量:
    SELECT COUNT(*), role_main FROM heros GROUP BY role_main
    (2).使用多个字段进行分组,比如,按照英雄的主要定位、次要定位进行分组,查看这些英雄的数量,并按照这些分组的英雄数量从高到低进行排序。
    SELECT COUNT(*) as num, role_main, role_assist FROM heros GROUP BY role_main, role_assist ORDER BY num DESC
  • 如何使用 HAVING 过滤分组,它与 WHERE 的区别是什么?
    HAVING 的作用和 WHERE 一样,都是起到过滤的作用,只不过 WHERE 是用于数据行,而 HAVING 则作用于分组
    比如:筛选最大生命值大于 6000 的英雄,按照主要定位、次要定位进行分组,并且显示分组中英雄数量大于5 的分组,按照数量从高到低进行排序。
SELECT COUNT(*) as num, role_main, role_assist
FROM heros
WHERE hp_max > 6000 GROUP BY role_main, role_assist HAVING num > 5
ORDER BY num DESC
  • 总结
    在这里插入图片描述
    续~~ 见下一篇
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值