What is a UNION in SQL?

If you ever find yourself needing to combine the results from multiple SELECT statements into a single result set, UNION is probably going to be the tool for the job. By “UNION“, I mean the UNION operator.

The UNION operator takes the output from two SELECT queries and stacks them on top of each other. It basically merges two lists into one, removing any duplicates along the way.

Read more

How to Pivot Rows to Columns in SQL Server (5 Methods)

Pivoting takes data stored vertically in rows and spreads it horizontally into columns. This is something you’ll likely encounter regularly when building reports or reshaping data for analysis. Basically, you’ve got data stored in rows, and you need to flip it so those row values become column headers. Maybe you’re building a report, maybe you’re feeding data to another system, or maybe the client just wants to see things the other way around.

SQL Server gives you several ways to handle this. Let’s walk through five different approaches, from the dedicated PIVOT operator to more flexible techniques that work when you need extra control.

Read more

What is a Cross Join?

Cross joins are one of the more straightforward join types in SQL, but they’re also one of the most misunderstood and potentially dangerous if used carelessly. Understanding when and how to use them properly can help you solve certain data problems efficiently while avoiding performance disasters.

A cross join returns the Cartesian product of two tables. This means that it combines every row from the first table with every row from the second table. If you have 10 rows in one table and 5 rows in another, you might immediately assume that it will return 15 rows. But you’d be wrong. A cross join will return 50 rows. No join condition in the ON clause. Just every possible combination of rows.

Read more

Using Window Functions with DATEDIFF() to Calculate Running Time Totals in SQL Server

SQL Server’s window functions allow you to perform calculations across sets of rows that are related to the current row, without collapsing those rows into a single result like traditional GROUP BY aggregates would. When combined with the DATEDIFF() function, they provide a powerful way to analyze temporal patterns in your data.

One potential use case is calculating running totals of time durations. Unlike simple aggregates that give you a single summary value, running totals show you the cumulative duration at each point in a sequence. This can be invaluable for tracking accumulated processing time, measuring cumulative delays, or understanding how total duration builds up over a series of events.

Read more

What is a Self Join?

When working with SQL databases, you’ll sometimes encounter scenarios where the data you need to compare or relate exists in the same table. Typical examples of this include employees who manage other employees, tasks that depend on other tasks, or categories nested within categories. These situations call for a specific querying approach called a self join.

A self join is a technique that lets you compare and relate rows within a single table. This makes them perfect for working with hierarchical data, finding relationships between records, and solving a wide range of queries that would otherwise be difficult or impossible with standard joins alone.

Read more

Calculating Cumulative Offsets with DATEADD() and Window Aggregates in SQL Server

Window functions in SQL Server aren’t just about ranking and numbering rows. When you combine aggregate window functions with DATEADD(), you can create running totals that translate into meaningful date calculations. This approach is particularly valuable when you need to calculate delivery schedules, project timelines, or any scenario where accumulated values should push dates further into the future.

The pattern involves using SUM() or another aggregate with the OVER clause to create a running total, then feeding that total into DATEADD() to offset a base date. The result is a dynamic date that reflects the cumulative impact of your data. Let’s explore this with a simple example.

Read more

What is a Subquery?

A subquery is a query nested inside another SQL statement. It’s basically a query within a query. You’re using the results of one SELECT statement to help another SQL statement do its job.

Subqueries let you break down complex problems into smaller, more manageable pieces, making your SQL more readable and often more powerful. The outer query relies on the inner query (the subquery) to provide data, filter results, or perform calculations. Once the subquery executes and returns its results, the outer query uses that information to complete its task.

Read more

How to Convert JSON to Rows and Columns in SQL Server

Modern applications often exchange information in JSON, and that data often ends up in SQL Server. While JSON’s flexible structure makes it ideal for storing dynamic or nested data, it doesn’t fit neatly into traditional relational tables. The good news is that SQL Server includes a good selection of JSON functions that let you parse, query, and transform JSON content into structured rows and columns. This means that you can work with your JSON data just like any other table.

Read more

What is a Materialized View?

A materialized view is a database object that stores the results of a query physically on disk, rather than computing them on the fly every time you need them. It’s basically a snapshot of your query results that you can refresh periodically. Unlike regular views (which are just saved queries that execute each time you use them), materialized views pre-compute and cache the data, making subsequent reads much faster.

Read more

What is a Cursor in SQL?

If you’ve been working with SQL for a while, you’ve probably heard someone mention cursors, usually followed by a warning to avoid them. Maybe you’ve used them yourself. But what exactly are cursors, and why do they get such a bad rap? Let’s take a look at what cursors are, how they work, and when (if ever) you should actually use them.

Read more