Skip to content
Datasets/Garden Shop
Dataset

Garden Shop SQL Practice Dataset

Orders, products, inventory, suppliers, and customers for store-operations SQL practice.

Download this dataset, free

No account, no email, no attribution required — free for any use, including commercially. Take the single .sql file to load everything into PostgreSQL, MySQL, SQLite, DuckDB, or SQL Server, or grab the raw CSVs.

garden_shop.sqlAll 6 tables, 130 rows, as CREATE TABLE and INSERT statements.Download →

Garden Shop is the main SQLShed business dataset. It connects customers, orders, order line items, products, categories, and suppliers, so it works well for practicing the joins and aggregate reports people write in real operational databases.

The data includes shipped, pending, processing, and cancelled orders; products with price and cost; inventory quantities; reorder levels; and a few intentional gaps such as null shipped dates and missing supplier email addresses. Those details make it useful for learning how SQL behaves when the data is imperfect.

Schema

Schema · Garden ShopView dataset schema6 tables
Table · customers

One row per customer. Some customers have no phone on file.

9 columns · 20 rows
customer_id intfirst_name textlast_name textemail textphone textcity textstate textsignup_date dateis_active bool
Table · products

One row per product, with price, cost, and inventory levels.

9 columns · 24 rows
product_id intproduct_name textcategory_id intsupplier_id intprice decimalcost decimalquantity_on_hand intreorder_level intdiscontinued bool
Table · categories

Lookup table of product categories.

2 columns · 8 rows
category_id intcategory_name text
Table · orders

One row per order. Unshipped orders have a null shipped_date.

6 columns · 24 rows
order_id intcustomer_id intorder_date dateshipped_date datestatus textcoupon_code text
Table · order_items

One row per line item within an order.

5 columns · 48 rows
order_item_id intorder_id intproduct_id intquantity intunit_price decimal
Table · suppliers

One row per supplier. Some suppliers have no contact email.

4 columns · 6 rows
supplier_id intsupplier_name textcontact_email textstate text

Best for

  • Multi-table joins from orders to line items and products.
  • Revenue, margin, customer value, and inventory reports.
  • NULL handling for unshipped orders and missing supplier contacts.

Starter questions

  • Which products are below their reorder level?
  • How much shipped revenue did each month produce?
  • Which suppliers have the highest gross margin?

Practice lessons