https://sqlmother.solargod.cn/
基础语法 - 条件分支
SELECT
name,
CASE WHEN (name = '鸡哥') THEN '会' ELSE '不会' END AS can_rap
FROM
student;
假设有一个学生表 `student`,包含以下字段:`name`(姓名)、`age`(年龄)。请你编写一个 SQL 查询,将学生按照年龄划分为三个年龄等级(age_level):60 岁以上为 "老同学",20 岁以上(不包括 60 岁以上)为 "年轻",20 岁及以下、以及没有年龄信息为 "小同学"。
返回结果应包含学生的姓名(name)和年龄等级(age_level),并按姓名升序排序。
answer
select
name,
case
when (age > 60) then '老同学'
when (age > 20) then '年轻'
else '小同学'
end as age_level
from
student
order by
name asc;
时间函数
-- 获取当前日期
SELECT DATE() AS current_date;
-- 获取当前日期时间
SELECT DATETIME() AS current_datetime;
-- 获取当前时间
SELECT TIME() AS current_time;
函数 - 字符串处理
-- 将姓名转换为大写
SELECT name, UPPER(name) AS upper_name
FROM employees;
-- 计算姓名长度
SELECT name, LENGTH(name) AS name_length
FROM employees;
-- 将姓名转换为小写并进行条件筛选
SELECT name, LOWER(name) AS lower_name
FROM employees;
函数 - 聚合函数
- COUNT:计算指定列的行数或非空值的数量。
- SUM:计算指定列的数值之和。
- AVG:计算指定列的数值平均值。
- MAX:找出指定列的最大值。
- MIN:找出指定列的最小值。
查询进阶 - 子查询 - exists
-- 主查询
SELECT name, total_amount
FROM customers
WHERE EXISTS (
-- 子查询
SELECT 1
FROM orders
WHERE orders.customer_id = customers.customer_id
);
exists not exists
查询进阶 - 组合查询
在 SQL 中,组合查询是一种将多个 SELECT 查询结果合并在一起的查询操作。
包括两种常见的组合查询操作:UNION 和 UNION ALL。
- UNION 操作:它用于将两个或多个查询的结果集合并, 并去除重复的行 。即如果两个查询的结果有相同的行,则只保留一行。
- UNION ALL 操作:它也用于将两个或多个查询的结果集合并, 但不去除重复的行 。即如果两个查询的结果有相同的行,则全部保留。
SELECT name, age, department
FROM table1
UNION
--UNION ALL
SELECT name, age, department
FROM table2;
查询进阶 - 开窗函数 - sum over
SELECT
order_id,
customer_id,
order_date,
total_amount,
SUM(total_amount) OVER (PARTITION BY customer_id) AS customer_total_amount
FROM
orders;
根据 customer_id 分组,然后求 total_amount 和,但是不合并 customer_id,而是显示每一个 customer_id