SQL语句GROUP BY、HAVING、EXISTS、SQL函数(Null判断、日期相关、计算数值和字符串操作 )
发布人:shili8
发布时间:2025-01-22 09:58
阅读次数:0
**SQL语句大全**
本文将介绍 SQL 中常用的 GROUP BY、HAVING、EXISTS 等关键字,以及一些常见的 SQL 函数,包括 Null 判断、日期相关、计算数值和字符串操作。
### GROUP BYGROUP BY 是用于分组数据的关键字。它可以根据一个或多个列来分组数据,然后对每个分组进行聚合运算,如 SUM、AVG、MAX 等。
**示例1**
sqlSELECT department, AVG(salary) AS avg_salaryFROM employeesGROUP BY department;
在这个示例中,我们使用 GROUP BY 将员工按部门分组,然后计算每个部门的平均薪水。
**示例2**
sqlSELECT year(order_date), SUM(total_amount) AS total_salesFROM ordersGROUP BY year(order_date);
在这个示例中,我们使用 GROUP BY 将订单按年份分组,然后计算每年的总销售额。
### HAVINGHAVING 是用于过滤分组结果的关键字。它可以根据一个或多个列来过滤数据,然后返回满足条件的分组结果。
**示例1**
sqlSELECT department, AVG(salary) AS avg_salaryFROM employeesGROUP BY departmentHAVING AVG(salary) >5000;
在这个示例中,我们使用 HAVING 过滤出平均薪水大于5000 的部门。
**示例2**
sqlSELECT year(order_date), SUM(total_amount) AS total_salesFROM ordersGROUP BY year(order_date) HAVING SUM(total_amount) >100000;
在这个示例中,我们使用 HAVING 过滤出总销售额大于100000 的年份。
### EXISTSEXISTS 是用于检查是否存在满足某个条件的行的关键字。它可以根据一个或多个列来检查是否存在满足条件的行。
**示例1**
sqlSELECT * FROM customersWHERE EXISTS ( SELECT1 FROM orders WHERE customer_id = customers.id AND total_amount >10000 );
在这个示例中,我们使用 EXISTS 检查是否存在一个客户有总金额大于10000 的订单。
**示例2**
sqlSELECT * FROM employeesWHERE EXISTS ( SELECT1 FROM departments WHERE department_id = employees.department_id AND name LIKE '%IT%' );
在这个示例中,我们使用 EXISTS 检查是否存在一个部门名包含 "IT" 的员工。
### Null 判断Null 是 SQL 中的一个特殊值,表示未知或无效的数据。我们可以使用以下函数来判断某个列是否为 Null:
* `IS NULL`:用于检查某个列是否为 Null。
* `IS NOT NULL`:用于检查某个列是否不为 Null。
**示例1**
sqlSELECT * FROM customersWHERE email IS NULL;
在这个示例中,我们使用 `IS NULL` 检查哪些客户的电子邮件地址为空。
**示例2**
sqlSELECT * FROM employeesWHERE department_id IS NOT NULL;
在这个示例中,我们使用 `IS NOT NULL` 检查哪些员工有部门 ID。
### 日期相关我们可以使用以下函数来处理日期:
* `NOW()`:返回当前系统时间。
* `CURDATE()`:返回当前系统日期。
* `DATEDIFF()`:用于计算两个日期之间的天数差异。
* `DATE_FORMAT()`:用于格式化日期。
**示例1**
sqlSELECT NOW() AS current_time;
在这个示例中,我们使用 `NOW()` 返回当前系统时间。
**示例2**
sqlSELECT CURDATE() AS current_date;
在这个示例中,我们使用 `CURDATE()` 返回当前系统日期。
**示例3**
sqlSELECT DATEDIFF('2024-03-16', '2024-02-28') AS date_diff;
在这个示例中,我们使用 `DATEDIFF()` 计算两个日期之间的天数差异。
**示例4**
sqlSELECT DATE_FORMAT('2024-03-16', '%Y-%m-%d') AS formatted_date;
在这个示例中,我们使用 `DATE_FORMAT()` 格式化日期。
### 计算数值我们可以使用以下函数来计算数值:
* `SUM()`:用于计算一列的总和。
* `AVG()`:用于计算一列的平均值。
* `MAX()`:用于计算一列的最大值。
* `MIN()`:用于计算一列的最小值。
**示例1**
sqlSELECT SUM(salary) AS total_salaryFROM employees;
在这个示例中,我们使用 `SUM()` 计算员工总薪水。
**示例2**
sqlSELECT AVG(salary) AS avg_salaryFROM employees;
在这个示例中,我们使用 `AVG()` 计算员工平均薪水。
**示例3**
sqlSELECT MAX(salary) AS max_salaryFROM employees;
在这个示例中,我们使用 `MAX()` 计算员工最高薪水。
**示例4**
sqlSELECT MIN(salary) AS min_salaryFROM employees;
在这个示例中,我们使用 `MIN()` 计算员工最低薪水。
### 字符串操作我们可以使用以下函数来处理字符串:
* `CONCAT()`:用于连接两个或多个字符串。
* `SUBSTRING()`:用于从一个字符串中提取子串。
* `UPPER()`:用于将一个字符串转换为大写。
* `LOWER()`:用于将一个字符串转换为小写。
**示例1**
sqlSELECT CONCAT('Hello, ', 'world!') AS greeting;
在这个示例中,我们使用 `CONCAT()` 将两个字符串连接起来。
**示例2**
sqlSELECT SUBSTRING('Hello, world!',7,5) AS substring;
在这个示例中,我们使用 `SUBSTRING()` 从一个字符串中提取子串。
**示例3**
sqlSELECT UPPER('hello, world!') AS uppercase;
在这个示例中,我们使用 `UPPER()` 将一个字符串转换为大写。
**示例4**
sqlSELECT LOWER('HELLO, WORLD!') AS lowercase;
在这个示例中,我们使用 `LOWER()` 将一个字符串转换为小写。