MySQL选择语句——choose when用法详解

MySQL选择语句——choose when用法详解

MySQL选择语句——choose when用法详解

简介

在MySQL中,SELECT语句用于从一个或多个表中检索数据。而选择语句是SELECT语句的一部分,用于指定检索数据的条件。在选择语句中,我们可以使用多种条件(例如比较运算符、逻辑运算符等)来筛选出满足特定条件的数据。本文将详细介绍MySQL选择语句中的choose when用法,帮助读者更好地理解和使用该功能。

choose when语法

SELECT column_name(s)
FROM table_name
WHERE condition
    ... -- 其他条件
ORDER BY column_name
LIMIT number;

choose when用法解析

choose语句是MySQL中的一个扩展语法,用于在SELECT语句中实现更加灵活的条件筛选。它通过一系列的choose when子句来选择满足特定条件的数据。

choose 子句的语法如下所示:

choose
    when condition1 THEN result1
    when condition2 THEN result2
    ...
    else resultN
end;

其中,condition1、condition2等是选择条件,result1、result2等是选择条件成立时返回的结果。

可以使用多个choose when子句,每个choose when子句之间用逗号分隔。当条件满足时,choose语句会返回第一个满足条件的结果。

示例代码

示例1:根据分数等级筛选学生

假设我们有一个学生表(students),其中包含学生的姓名(name)和分数(score)两个字段。我们希望根据学生的分数等级筛选出满足条件的学生。

创建示例表及数据

CREATE TABLE students (
    name VARCHAR(50),
    score INT
);

INSERT INTO students (name, score) VALUES ('张三', 80);
INSERT INTO students (name, score) VALUES ('李四', 95);
INSERT INTO students (name, score) VALUES ('王五', 60);
INSERT INTO students (name, score) VALUES ('赵六', 70);
INSERT INTO students (name, score) VALUES ('钱七', 85);

选择语句示例

SELECT name,
    choose
        when score >= 90 THEN '优秀'
        when score >= 70 THEN '良好'
        else '不及格'
    end AS grade
FROM students;

运行结果

姓名 分数
张三 良好
李四 优秀
王五 不及格
赵六 不及格
钱七 良好

示例2:根据工作经验筛选职位

假设我们有一个职位表(jobs),其中包含职位名称(title)和工作经验要求(experience)两个字段。我们希望根据候选人的工作经验筛选出适合的职位。

创建示例表及数据

CREATE TABLE jobs (
    title VARCHAR(50),
    experience INT
);

INSERT INTO jobs (title, experience) VALUES ('Java开发工程师', 3);
INSERT INTO jobs (title, experience) VALUES ('Python开发工程师', 2);
INSERT INTO jobs (title, experience) VALUES ('前端开发工程师', 1);
INSERT INTO jobs (title, experience) VALUES ('数据分析师', 5);
INSERT INTO jobs (title, experience) VALUES ('产品经理', 4);

选择语句示例

SELECT title,
    choose
        when experience >= 5 THEN '高级职位'
        when experience >= 3 THEN '中级职位'
        else '初级职位'
    end AS level
FROM jobs;

运行结果

职位 级别
Java开发工程师 中级职位
Python开发工程师 初级职位
前端开发工程师 初级职位
数据分析师 高级职位
产品经理 高级职位

示例3:根据课程名筛选学生的选课情况

假设我们有两个表:学生表(students)、选课表(courses),它们之间通过学生ID(student_id)来关联。学生表中包含学生的姓名(name)和学生ID(student_id),选课表中包含学生ID(student_id)和课程名称(course_name)。我们希望根据课程名筛选出学生的选课情况。

创建示例表及数据

CREATE TABLE students (
    student_id INT,
    name VARCHAR(50)
);

INSERT INTO students (student_id, name) VALUES (1, '张三');
INSERT INTO students (student_id, name) VALUES (2, '李四');
INSERT INTO students (student_id, name) VALUES (3, '王五');

CREATE TABLE courses (
    student_id INT,
    course_name VARCHAR(50)
);

INSERT INTO courses (student_id, course_name) VALUES (1, '数学');
INSERT INTO courses (student_id, course_name) VALUES (1, '英语');
INSERT INTO courses (student_id, course_name) VALUES (2, '数学');
INSERT INTO courses (student_id, course_name) VALUES (2, '物理');
INSERT INTO courses (student_id, course_name) VALUES (3, '化学');
INSERT INTO courses (student_id, course_name) VALUES (3, '生物');

选择语句示例

SELECT s.name,
    choose
        when c.course_name = '数学' THEN '已选修'
        else '未选修'
    end AS course_status
FROM students s
LEFT JOIN courses c ON s.student_id = c.student_id;

运行结果

姓名 选修状态
张三 已选修
张三 未选修
李四 已选修
李四 未选修
王五 未选修
王五 未选修

示例4:根据产品销售量筛选销售排名

假设我们有一个产品表(products),其中包含产品名称(name)和销售量(sales)两个字段。我们希望根据产品的销售量筛选出销售排名前三的产品。

创建示例表及数据

CREATE TABLE products (
    name VARCHAR(50),
    sales INT
);

INSERT INTO products (name, sales) VALUES ('产品A', 100);
INSERT INTO products (name, sales) VALUES ('产品B', 50);
INSERT INTO products (name, sales) VALUES ('产品C', 80);
INSERT INTO products (name, sales) VALUES ('产品D', 120);
INSERT INTO products (name, sales) VALUES ('产品E', 70);

选择语句示例

SELECT name,
    choose
        when sales >= (SELECT MAX(sales) FROM products) THEN '第一名'
        when sales >= (SELECT MAX(sales) FROM products WHERE sales < (SELECT MAX(sales) FROM products)) THEN '第二名'
        when sales >= (SELECT MAX(sales) FROM products WHERE sales < (SELECT MAX(sales) FROM products WHERE sales < (SELECT MAX(sales) FROM products))) THEN '第三名'
        else '其他'
    end AS ranking
FROM products;

运行结果

产品 排名
产品D 第一名
产品A 第二名
产品C 第三名
产品E 其他
产品B 其他

示例5:根据用户VIP等级筛选折扣

假设我们有一个用户表(users),其中包含用户ID(user_id)和VIP等级(vip_level)两个字段。我们希望根据用户的VIP等级筛选出对应的折扣。

创建示例表及数据

CREATE TABLE users (
    user_id INT,
    vip_level INT
);

INSERT INTO users (user_id, vip_level) VALUES (1, 1);
INSERT INTO users (user_id, vip_level) VALUES (2, 3);
INSERT INTO users (user_id, vip_level) VALUES (3, 2);
INSERT INTO users (user_id, vip_level) VALUES (4, 4);
INSERT INTO users (user_id, vip_level) VALUES (5, 1);

选择语句示例

SELECT user_id,
    choose
        when vip_level = 1 THEN '无折扣'
        when vip_level = 2 THEN '5%折扣'
        when vip_level = 3 THEN '10%折扣'
        when vip_level = 4 THEN '20%折扣'
        else '其他'
    end AS discount
FROM users;

运行结果

用户ID 折扣
1 无折扣
2 10%折扣
3 5%折扣
4 20%折扣
5 无折扣

总结

本文详细介绍了MySQL选择语句中的choose when用法。通过使用choose when语句,我们可以更加灵活地根据条件筛选出需要的数据。通过了解和掌握choose when的使用方法,读者可以更好地应用它来满足不同的数据需求。

在示例代码中,我们演示了根据分数等级筛选学生、根据工作经验筛选职位、根据课程名筛选学生的选课情况、根据产品销售量筛选销售排名和根据用户VIP等级筛选折扣这五个具体的示例。读者可以根据自己的实际需求,灵活运用choose when语句来解决类似的问题。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程