MySQL IF Statement and Function Explanation with LeetCode Problem Example
There are two types of IFs in MySQL: the IF statement and the IF function. Both are different from each other.
In this article, we will explain their diversities since understanding the differences between these two is crucial for effective query and procedure development in MySQL.
The IF statement is used to execute a block of SQL statements based on a condition, while the IF function is used to return a value based on a condition.
MySQL IF Statements: Syntax and Examples
MySQL IF statements provide a way to conditionally execute code based on specified conditions. There are three main types of MySQL IF statements:
1. IF-THEN Statement:
The IF-THEN statement is the simplest form of conditional statement. It checks a condition and if the condition evaluates to true, it executes a single statement or block of statements.
IF condition THEN
statement(s);
END IF;
Example: Suppose we want to check if a product's quantity is below a certain threshold and take action accordingly:
IF quantity < 10 THEN
SET status = 'Low Stock';
END IF;
2. IF-THEN-ELSE Statement:
The IF-THEN-ELSE statement extends the functionality of the IF-THEN statement by providing an alternative set of statements to execute when the condition evaluates to false.
Syntax:
IF condition THEN
statement(s);
ELSE
statement(s);
END IF;
Example: Consider a scenario where we want to update an employee's status based on their age:
IF age > 60 THEN
SET status = 'Retired';
ELSE
SET status = 'Active';
END IF;
Let's consider a trigger that inserts a record into a log table whenever a new product is inserted into the main product table.
CREATE TRIGGER ProductInserted
AFTER INSERT ON products
FOR EACH ROW
BEGIN
IF NEW.quantity > 100 THEN
INSERT INTO product_log (product_id, action) VALUES (NEW.id, 'High Quantity Product Inserted');
ELSE
INSERT INTO product_log (product_id, action) VALUES (NEW.id, 'Product Inserted');
END IF;
END;
3. IF-THEN-ELSEIF-ELSE Statement:
The IF-THEN-ELSEIF-ELSE statement allows for multiple conditions to be checked sequentially. It provides a series of conditions to evaluate, executing the corresponding block of statements for the first condition that evaluates to true. If none of the conditions are true, the ELSE block, if provided, is executed.
IF condition1 THEN
statement(s);
ELSEIF condition2 THEN
statement(s);
...
ELSE
statement(s);
END IF;
Example: Suppose we want to categorize students into different grade levels based on their exam scores:
IF score >= 90 THEN
SET grade = 'A';
ELSEIF score >= 80 THEN
SET grade = 'B';
ELSEIF score >= 70 THEN
SET grade = 'C';
ELSE
SET grade = 'D';
END IF;
Suppose we have a stored procedure that updates employee salaries based on their performance rating:
CREATE PROCEDURE UpdateSalary(IN employee_id INT)
BEGIN
DECLARE rating CHAR(1);
SELECT performance_rating INTO rating FROM employees WHERE id = employee_id;
IF rating = 'A' THEN
UPDATE employees SET salary = salary * 1.1 WHERE id = employee_id;
ELSEIF rating = 'B' THEN
UPDATE employees SET salary = salary * 1.05 WHERE id = employee_id;
ELSE
UPDATE employees SET salary = salary * 1.02 WHERE id = employee_id;
END IF;
END;
So, MySQL IF statements provide a powerful means of implementing conditional logic within SQL code. By understanding the syntax and usage of these statements, you can efficiently control the flow of execution and handle various conditions in your MySQL queries and procedures.
IF Function
The IF function in MySQL is used within SQL queries to conditionally return values based on a specified condition.
It follows the syntax:
IF(condition, value_if_true, value_if_false)
Recommended by LinkedIn
Examples of IF Function:
SELECT
student_name,
IF(age < 12, 'Child', IF(age < 18, 'Teenager', 'Adult')) AS age_group
FROM students;
2. Aggregate Function with IF: Let's calculate the total salary increase for all employees based on their performance rating.
SELECT
SUM(IF(performance_rating = 'A', salary * 0.1,
IF(performance_rating = 'B', salary * 0.05, 0))) AS total_salary_increase
FROM employees;
In these examples provided earlier, the IF statement is used within stored procedures and triggers to control the flow of execution based on conditions, while the IF function is used within SQL queries to conditionally return values based on conditions.
Since we already learned differences between two types of IFs, let's solve the following SQL problem number 626 provided by LeetCode platform under SQL50 package :
Table: Seat
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| student | varchar |
+-------------+---------+
id is the primary key (unique value) column for this table.
Each row of this table indicates the name and the ID of a student.
id is a continuous increment.
Write a solution to swap the seat id of every two consecutive students. If the number of students is odd, the id of the last student is not swapped.
Return the result table ordered by id in ascending order.
The result format is in the following example.
Example 1:
Input:
Seat table:
+----+---------+
| id | student |
+----+---------+
| 1 | Abbot |
| 2 | Doris |
| 3 | Emerson |
| 4 | Green |
| 5 | Jeames |
+----+---------+
Output:
+----+---------+
| id | student |
+----+---------+
| 1 | Doris |
| 2 | Abbot |
| 3 | Green |
| 4 | Emerson |
| 5 | Jeames |
+----+---------+
Explanation:
Note that if the number of students is odd, there is no need to change the last one's seat.
Intuition
To solve this problem, we have to use IF function with SQL queries to conditionally return values based on a specified condition.We need to swap the seat ids of every two consecutive students. We can achieve this by iterating through the seat table and swapping the ids as required. If the number of students is odd, we should leave the last student's seat id unchanged.Additionally, as mentioned in the explanation part, at the bottom - if the number of students is odd, there is no need to change the last one's seat.
Approach
Iterate through the Seat table.
Solution
Here is my uploaded solution in LeetCode:
SELECT
IF(id = (SELECT MAX(id) FROM seat) AND id % 2 = 1, id,
IF(id % 2 = 1, id + 1, id - 1)) AS id,
student
FROM seat
ORDER BY id;
SELECT:
The query starts with the SELECT clause, indicating that it will retrieve data from the seat table.
IF Function:
The outer IF function with subquery checks if the current id is the last one with help of MAX() function and if it's odd. If both conditions are true, it returns the current id (id).Otherwise, it proceeds to the inner IF function.
Let's break down the expression IF(id % 2 = 1, id + 1, id - 1):
id % 2 = 1: This condition checks if the id is odd. The % operator calculates the modulus, so id % 2 will be 1 if id is odd.
If id % 2 = 1 is true (meaning id is odd), the expression evaluates to id + 1. This means it adds 1 to the id, effectively swapping it with the next sequential id.
If id % 2 = 1 is false (meaning id is even), the expression evaluates to id - 1. This means it subtracts 1 from the id, effectively swapping it with the previous sequential id.
So, overall, the expression swaps the seat ids of consecutive students. If the current id is odd, it adds 1 to it to swap with the next id; otherwise, it subtracts 1 from it to swap with the previous id.
Thank you for reading! I'd love to hear your thoughts on topic. Feel free to share your insights and solutions how you would solve LeetCode problem differently in the comments below. Don't hesitate to reach out if you have any questions.