Welcome to our deep dive into SQL EXCEPT and MINUS, two powerful clauses that help you find the differences between two datasets. Let's get started! 🚀
SQL EXCEPT (oracle) and MINUS (MySQL, PostgreSQL, SQL Server, etc.) are used to find the difference between two sets of rows returned by two SELECT statements.
SELECT_statement1
EXCEPT
SELECT_statement2;Why is this useful? Imagine you have two tables, Orders and Order_Details. You want to find all orders that exist in the Orders table but not in Order_Details. That's exactly what EXCEPT/MINUS helps with!
Let's consider two tables: Orders and Order_Details.
-- Create Orders table
CREATE TABLE Orders (
id INT PRIMARY KEY,
order_name VARCHAR(255)
);
-- Create Order_Details table
CREATE TABLE Order_Details (
id INT PRIMARY KEY,
order_id INT,
order_detail VARCHAR(255)
);Now let's insert some data:
-- Insert data into Orders table
INSERT INTO Orders VALUES (1, 'Order A'), (2, 'Order B'), (3, 'Order C');
-- Insert data into Order_Details table
INSERT INTO Order_Details VALUES (1, 1, 'Detail A'), (1, 1, 'Detail B'), (2, 2, 'Detail C');Now let's find the orders in Orders table but not in Order_Details using EXCEPT/MINUS:
SELECT * FROM Orders
EXCEPT
SELECT * FROM Order_Details;Result:
| id | order_name |
|----|------------|
| 3 | Order C |
Imagine you have a customer management system, and you want to find all customers that are in your main customers table but not in your VIP customers table.
-- Create Customers table
CREATE TABLE Customers (
id INT PRIMARY KEY,
name VARCHAR(255),
is_VIP BOOLEAN
);
-- Create VIP_Customers table
CREATE TABLE VIP_Customers (
id INT PRIMARY KEY,
customer_id INT,
name VARCHAR(255)
);
-- Insert data into Customers table
INSERT INTO Customers VALUES (1, 'John', FALSE), (2, 'Jane', FALSE), (3, 'Bob', TRUE);
-- Insert data into VIP_Customers table
INSERT INTO VIP_Customers VALUES (1, 'John'), (2, 'Jane');Now let's find all customers in the Customers table but not in the VIP_Customers table:
SELECT * FROM Customers
EXCEPT
SELECT * FROM VIP_Customers;Result:
| id | name | is_VIP |
|----|------|--------|
| 3 | Bob | True |
What do SQL EXCEPT and MINUS do?
Let's consider a real-world scenario where you have two tables: Products and Sales. You want to find all products that have sales but not in a specific month (let's say March).
-- Create Products table
CREATE TABLE Products (
id INT PRIMARY KEY,
product_name VARCHAR(255)
);
-- Create Sales table
CREATE TABLE Sales (
id INT PRIMARY KEY,
product_id INT,
sale_month VARCHAR(255),
sale_amount DECIMAL(10,2)
);Now let's insert some data:
-- Insert data into Products table
INSERT INTO Products VALUES (1, 'Product A'), (2, 'Product B'), (3, 'Product C');
-- Insert data into Sales table
INSERT INTO Sales VALUES (1, 1, 'January', 100), (2, 1, 'February', 200), (3, 1, 'March', 300), (4, 2, 'April', 400);Now let's find all products that have sales but not in March:
SELECT * FROM Products
EXCEPT
SELECT * FROM Sales
WHERE sale_month = 'March';Result:
| id | product_name |
|----|--------------|
| 3 | Product C |
How can you modify the above example to find all products that have sales but only in March?
Happy coding! 🤖 If you found this helpful, consider sharing it with a friend. 💬 Stay tuned for more SQL tutorials at CodeYourCraft! 🌟