数据库教程(一)-MySQL的函数

1. 概述

  • 在 SQL 语言中,同样也包括了内置函数和自定义函数。内置函数是系统内置的通用函数,而自定义函数是我们根据自己的需要编写的

2. 内置函数

  • SQL 的内置函数的分类

    • 算术函数

      • 对数值类型的字段进行算术运算
      • 例如,SELECT ABS(-2),运行结果为 2
    • 字符串函数

      • 包括了字符串拼接,大小写转换,求长度以及字符串替换和截取等

        image-20201006204527665

      • 例如,SELECT CONCAT(‘abc’, 123),运行结果为 abc123

    • 日期函数

      • 日期函数是对数据表中的日期进行处理

        image-20201006205027657

      • 例如,SELECT CURRENT_DATE(),运行结果为 2019-04-03

    • 转换函数

      • 转换函数可以转换数据之间的类型
      • 例如,SELECT CAST(123.123 AS DECIMAL(8,2)),运行结果为 123.12

3. 聚集函数

  • 对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值

    image-20201006220640795

4. 子查询

  • 非关联子查询
    • 子查询从数据表中查询了数据结果,如果这个数据结果只执行一次,然后这个数据结果作为主查询的条件进行执行
  • 关联子查询
    • 如果子查询需要执行多次,即采用循环的方式,先从外部查询开始,每次都传入子查询进行查询,然后再将结果反馈给外部
  • 以 NBA 球员数据表为例,假设我们想要知道哪个球员的身高最高,最高身高是多少,就可以采用子查询的方式
    • $ SQL: SELECT player_name, height FROM player WHERE height = (SELECT max(height) FROM player)
    • 通过SELECT max(height) FROM player可以得到最高身高这个数值,结果为 2.16,然后我们再通过 player 这个表,看谁具有这个身高,再进行输出,这样的子查询就是非关联子查询
    • $ SELECT player_name, height, team_id FROM player AS a WHERE height > (SELECT avg(height) FROM player AS b WHERE a.team_id = b.team_id)
    • 将 player 表复制成了表 a 和表 b,每次计算的时候,需要将表 a 中的 team_id 传入从句,作为已知值。因为每次表 a 中的 team_id 可能是不同的,所以是关联子查询
  • EXISTS 子查询
    • EXISTS 子查询用来判断条件是否满足,满足的话为 True,不满足为 False
    • $ SQL: SELECT player_id, team_id, player_name FROM player WHERE NOT EXISTS (SELECT player_id FROM player_score WHERE player.player_id = player_score.player_id)

10. 参考