DEV Community

Pranav Bakare
Pranav Bakare

Posted on

SQL Query Logical Order

Image description

In SQL, queries are processed in a specific order known as the Logical Query Processing Order or Order of Execution. Visualizing this can help in understanding how the database processes your query to retrieve, filter, and organize the data. Below is a breakdown of this process:

1. FROM (and JOIN)

  • Data Source Selection: The query starts by identifying the data tables and combining them, if necessary, using JOIN.
  • Example: FROM Orders JOIN Customers ON Orders.CustomerID = Customers.CustomerID

2. WHERE

  • Row Filtering: The query applies filters to eliminate rows that do not meet the conditions specified.
  • Example: WHERE Orders.TotalAmount > 1000

3. GROUP BY

  • Grouping Rows: The query groups rows that have the same values in specified columns.
  • Example: GROUP BY Customers.Country

4. HAVING

  • Group Filtering: Similar to WHERE, but used to filter the results of the GROUP BY operation.
  • Example: HAVING COUNT(Orders.OrderID) > 5

5. SELECT

  • Column Selection: The query selects the columns or expressions to be included in the final result set.
  • Example: SELECT Customers.Country, COUNT(Orders.OrderID) AS TotalOrders

6. DISTINCT

  • Remove Duplicates: The query removes duplicate rows from the result set (if DISTINCT is used).
  • Example: SELECT DISTINCT Customers.Country

7. ORDER BY

  • Sorting: The query sorts the final result set based on one or more columns.
  • Example: ORDER BY TotalOrders DESC

8. LIMIT / OFFSET (or FETCH FIRST N ROWS)

  • Limit Rows: The query limits the number of rows returned, useful for pagination.
  • Example: LIMIT 10 OFFSET 5

Visualization Example for Query:

SELECT Customers.Country, COUNT(Orders.OrderID) AS TotalOrders
FROM Orders
JOIN Customers ON Orders.CustomerID = Customers.CustomerID
WHERE Orders.TotalAmount > 1000
GROUP BY Customers.Country
HAVING COUNT(Orders.OrderID) > 5
ORDER BY TotalOrders DESC
LIMIT 10;
Enter fullscreen mode Exit fullscreen mode
  1. FROM → First, join Orders and Customers on the CustomerID.
  2. WHERE → Filter rows where Orders.TotalAmount > 1000.
  3. GROUP BY → Group the results by Customers.Country.
  4. HAVING → Filter out countries where the total orders are not greater than 5.
  5. SELECT → Select Customers.Country and COUNT(Orders.OrderID) as TotalOrders.
  6. ORDER BY → Sort the results by TotalOrders in descending order.
  7. LIMIT → Finally, return the top 10 rows.

This step-by-step order ensures the SQL query retrieves, processes, and returns the desired data efficiently.

Top comments (0)