Linux云计算 |【第四阶段】RDBMS1-DAY2

主要内容:

常用函数(函数分类1:单行、分组;函数分类2:字符、数学、日期、流程控制)、分组查询group by、连接查询

一、常用函数

1. 按使用方式分类

① 单行函数

单行函数(Scalar Functions)是对单个行进行操作的函数,每行返回一个结果。单行函数可以用于 SELECT、WHERE、ORDER BY 等子句中。

示例:

  • 字符函数:UPPER()、LOWER()、CONCAT()
  • 数学函数:ABS()、ROUND()、SQRT()
  • 日期函数:NOW()、DATE_FORMAT()
SELECT UPPER(name) AS upper_name, ABS(salary) AS abs_salary
FROM employees
WHERE DATE_FORMAT(hire_date, '%Y-%m') = '2023-01';
② 分组函数

分组函数(Aggregate Functions)是对一组行进行操作的函数,返回一个汇总结果。分组函数通常与 GROUP BY 子句一起使用。

示例:

  • 求和:SUM()
  • 平均值:AVG()
  • 最大值:MAX()
  • 最小值:MIN()
  • 计数:COUNT()
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id;

2. 按用途分类

① 字符函数

字符函数用于处理字符串数据,包括字符串的拼接、截取、转换等操作。

示例:

  • 字符串拼接:CONCAT()
  • 字符串长度:LENGTH()
  • 字符串截取:SUBSTRING()
  • 字符串转换:UPPER()、LOWER()
SELECT CONCAT(first_name, ' ', last_name) AS full_name, LENGTH(full_name) AS name_length
FROM employees;
② 数学函数

数学函数用于处理数值数据,包括数值的计算、取整、取绝对值等操作。

示例:

  • 绝对值:ABS()
  • 四舍五入:ROUND()
  • 平方根:SQRT()
  • 幂运算:POWER()
SELECT ABS(salary) AS abs_salary, ROUND(salary, 2) AS rounded_salary
FROM employees;
③ 日期函数

日期函数用于处理日期和时间数据,包括日期的格式化、日期差计算、当前日期获取等操作。

示例:

  • 当前日期:NOW()
  • 日期格式化:DATE_FORMAT()
  • 日期差:DATEDIFF()
  • 日期加减:DATE_ADD()、DATE_SUB()
SELECT NOW() AS current_date, DATE_FORMAT(hire_date, '%Y-%m-%d') AS formatted_hire_date
FROM employees;
④ 流程控制函数

流程控制函数用于在 SQL 语句中实现条件判断和流程控制,类似于编程语言中的条件语句。

示例:

  • 条件判断:CASE
  • 空值处理:IFNULL()、COALESCE()
  • 条件选择:IF()
SELECT employee_id, salary,
       CASE
           WHEN salary > 10000 THEN 'High'
           WHEN salary > 5000 THEN 'Medium'
           ELSE 'Low'
       END AS salary_level
FROM employees;

二、函数应用

1、字符函数实例:

LENGTH(s)、CHAR_LENGTH(s)、CONCAT(s1,s2,...)、UPPER(s)、LOWER(s)、SUBSTR(s)、INSTR(s)、TRIM(s)

1)LENGTH(str):返回字符串长度,以字节为单位;

mysql> select length('abc');
+---------------+
| length('abc') |
+---------------+
|             3 |
+---------------+
1 row in set (0.00 sec)

mysql> select length('您好');
+------------------+
| length('您好')   |
+------------------+
|                6 |
+------------------+
1 row in set (0.00 sec)

补充:一个中文字一般占3-4个字节

例如:查询name字段是李平的记录,计算其email的字符串长度

mysql> select name,email,length(email) from employees where name='李平';
+--------+----------------+---------------+
| name   | email          | length(email) |
+--------+----------------+---------------+
| 李平   | liping@tedu.cn |            14 |
+--------+----------------+---------------+
1 row in set (0.00 sec)

2)CHAR_LENGTH(str):返回字符串长度,以字符为单位;

mysql> select char_length('abc');
+--------------------+
| char_length('abc') |
+--------------------+
|                  3 |
+--------------------+
1 row in set (0.00 sec)

mysql> select char_length('您好');
+-----------------------+
| char_length('您好')   |
+-----------------------+
|                     2 |
+-----------------------+
1 row in set (0.00 sec)

3)CONCAT(str1,str2,...):返回连接参数产生的字符串(一个或多个待拼接的内容,任意一个为NULL,则返回值为NULL);

mysql> select concat(dept_id,'-',dept_name) from departments;
+-------------------------------+
| concat(dept_id,'-',dept_name) |
+-------------------------------+
| 1-人事部                      |
| 2-财务部                      |
| 3-运维部                      |
| 4-开发部                      |
| 5-测试部                      |
| 6-市场部                      |
| 7-销售部                      |
| 8-法务部                      |
| NULL                          |
+-------------------------------+
9 rows in set (0.00 sec)

4)UPPER(str)和UCASE(str): 将字符串中的字母全部转换成大写;

mysql> select upper('hello');
+----------------+
| upper('hello') |
+----------------+
| HELLO          |
+----------------+
1 row in set (0.00 sec)

mysql> select ucase('abc');
+--------------+
| ucase('abc') |
+--------------+
| ABC          |
+--------------+
1 row in set (0.00 sec)

例如:查询name字段为“李某”,将email字段记录转换成大写

mysql> select name,upper(email) from employees where name like '李_';
+--------+-------------------+
| name   | upper(email)      |
+--------+-------------------+
| 李平   | LIPING@TEDU.CN    |
| 李莹   | LIYING@TEDU.CN    |
| 李柳   | LILIU@TARENA.COM  |
| 李慧   | LIHUI@TARENA.COM  |
| 李静   | LIJING@TARENA.COM |
| 李瑞   | LIRUI@TARENA.COM  |
+--------+-------------------+
6 rows in set (0.00 sec)

5)LOWER(str)和LCASE(str):将str中的字母全部转换成小写;

mysql> select lower('HELLO');
+----------------+
| lower('HELLO') |
+----------------+
| hello          |
+----------------+
1 row in set (0.00 sec)

mysql> select lcase('ABC');
+--------------+
| lcase('ABC') |
+--------------+
| abc          |
+--------------+
1 row in set (0.00 sec)

6)SUBSTR(str, start, length):从字符串str的start位置开始,取出length长度的子串,位置从1开始计算;

mysql> select substr('hello world',7);
+-------------------------+
| substr('hello world',7) |
+-------------------------+
| world                   |
+-------------------------+
1 row in set (0.00 sec)

mysql> select substr('hello world',7,3);
+---------------------------+
| substr('hello world',7,3) |
+---------------------------+
| wor                       |
+---------------------------+
1 row in set (0.00 sec)

7)INSTR(str,str1):返回str1参数,在str参数内的位置;

mysql> select instr('hello world','o');
+--------------------------+
| instr('hello world','o') |
+--------------------------+
|                        5 |
+--------------------------+
1 row in set (0.00 sec)

mysql> select instr('hello world','or');
+---------------------------+
| instr('hello world','or') |
+---------------------------+
|                         8 |
+---------------------------+
1 row in set (0.00 sec)

mysql> select instr('hello world','ol');      //不存在的参数,返回0
+---------------------------+
| instr('hello world','ol') |
+---------------------------+
|                         0 |
+---------------------------+
1 row in set (0.00 sec)

例如:查询name字段为“李某”,返回email字段的记录中“@”的位置

mysql> select name,email,instr(email,'@') from employees where name='李平';
+--------+----------------+------------------+
| name   | email          | instr(email,'@') |
+--------+----------------+------------------+
| 李平   | liping@tedu.cn |                7 |
+--------+----------------+------------------+
1 row in set (0.00 sec)

8)TRIM(str):返回并删除两边空格之后的字符串str(仅字符串两边的空格);

mysql> select trim('  Hello World  ');
+-------------------------+
| trim('  Hello World  ') |
+-------------------------+
| Hello
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小安运维日记

Hey~ 感谢您的充电支持!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值