Roadmap › SQL Server & T-SQL › Module: Querying
Lessons in this course (19)

9. Set operators, CASE, PIVOT and MERGE

IntermediateMediumLesson 9 of 19
sql
SELECT Email FROM Customers UNION     SELECT Email FROM Leads;   -- distinct
SELECT Email FROM Customers UNION ALL SELECT Email FROM Leads;   -- keeps duplicates, faster
SELECT Email FROM Customers INTERSECT SELECT Email FROM Leads;
SELECT Email FROM Customers EXCEPT    SELECT Email FROM Leads;

SELECT FullName, CASE WHEN Salary >= 150000 THEN 'Senior' WHEN Salary >= 80000 THEN 'Mid' ELSE 'Junior' END AS Band FROM Employees;

-- PIVOT
SELECT * FROM (SELECT Region, Quarter, Amount FROM Sales) s
PIVOT (SUM(Amount) FOR Quarter IN ([Q1], [Q2], [Q3], [Q4])) p;

-- MERGE (upsert) — target vs source
MERGE dbo.Products AS t
USING dbo.StagingProducts AS s ON t.Sku = s.Sku
WHEN MATCHED AND t.Price <> s.Price THEN UPDATE SET t.Price = s.Price
WHEN NOT MATCHED BY TARGET THEN INSERT (Sku, Name, Price) VALUES (s.Sku, s.Name, s.Price)
WHEN NOT MATCHED BY SOURCE THEN DELETE
OUTPUT $action, inserted.Sku, deleted.Sku;

MERGE has known concurrency caveats — use WITH (HOLDLOCK) on the target for concurrent upserts, or separate UPDATE + INSERT in a transaction.