EquationDB

← Back to all articles

The Demo: a guided tour you can run yourself

10 October 2026 · EquationDB team

Most database evaluations start the same way. Someone reads the documentation, copies an example into a console, changes a table name and hopes. An hour later they know the product parses a query. They do not yet know what it is good at, what a correct answer looks like, or how long anything should take.

We wanted that first hour to go differently, so EquationDB ships with its own demonstration inside the product. Open Demo and you get three tabs: a Quick tour, a Demo sheet and Power queries. Everything on them is a real statement that runs against the live database under your own account. This article is about the first two.

Why a database should ship with a runnable demo

A page of examples tells you what the syntax is. It does not tell you whether the answer you got is the right one. So every item on the demo pages carries the same four things:

  • The command, exactly as you would type it.
  • Copy, Open in Query and Run. Run shows the result in place, under the card. Open in Query puts the statement in the editor, where you can change it.
  • Expect: what the result should contain, down to the columns and roughly how many rows.
  • Look for: the one thing worth noticing, when there is one.

Each card also shows the server time the statement should take, as a band such as under 100 ms or under 5 s. If a query that should take a second takes twenty, you know something is wrong before you have read a row.

Run goes through the same path as the query editor. Your plan's limits and quotas apply, and nothing on the page is a recording.

The Quick tour and the Demo sheet

The two tabs answer different questions.

The Quick tour answers "what is this product?". It is a sequence of queries in ten levels, from a one-word lookup to a study with statistics you can act on: look anything up, screen the market, fundamentals and earnings, what just happened, does it work, relationships, reports, subqueries and SQL. You click Run on each in order, and a sentence under each title says what it shows. One of the first is this:

GET SPY SELECT close, $BRD.A50@close AS pct_above_50, $VIX@close AS vix LAST 3mo

Three months of the S&P 500 fund next to the share of stocks above their 50-day average and the volatility index, aligned by date with no join. The point it makes is that market context is just another column.

The Demo sheet answers "does all of it work?". It is the full catalogue: several hundred items in 27 sections, organised by capability, with a section rail, a search box over titles, commands and expectations, and filters for queries and screens. It covers single symbols, screens and lists, indicators, intraday bars, percentiles and regimes, events, event studies, backtests, every analysis report, the datasets, fundamentals, SQL, taxonomy and themes, the supply-chain graph, the correlation graph, currencies and crypto, market statistics, transcripts, options, scripts, alerts, exports, plain-English questions, the screens to click through, error handling and performance checks.

The sheet has two more views. Demo script is a short ordered sequence for a live walk-through, with a talking point per step. Setup & cleanup says which account and plan to use, which statements need US market hours, and what to remove afterwards. Items that create something, such as an alert or a saved list, are labelled and say how to delete it.

Eight statements, eight capabilities

Here are seven items from the sheet, after the tour query above, each from a different section.

The catalogue. The first thing to run on any database:

SHOW DATASETS

One row per dataset: prices, earnings, dividends, splits, statements, estimates, ratings, insider filings and more, each with its columns, the number of symbols, the number of rows and the date range covered. The database describes itself, and the numbers are computed from what is loaded, not typed into a brochure.

SQL over a list. Any list of symbols is a table:

SELECT country, count(*) AS companies, round(sum(mcap) / 1e12, 2) AS mcap_tn_usd, round(avg(ret), 2) AS avg_ret FROM global.top1000 WHERE country <> '' GROUP BY country ORDER BY mcap_tn_usd DESC LIMIT 20

The world's thousand largest companies grouped by country, with the combined market value in trillions of dollars and the average return on the day. Expect the United States first.

Events, scored for rarity.

EVENTS * IN top500 LAST 1d WHERE rarity >= 95 SORT rarity DESC

The last session's most unusual events across the 500 largest US stocks. Rarity is the percentile of the event's size among the same stock's past occurrences, so every row was in the top 5% of that stock's own history. The columns after it are the forward returns, which fill in as the future arrives, and a summary of what followed earlier occurrences.

An event study.

OUTCOMES AFTER rsi(14) CROSS BELOW 30 AND close > sma(200) IN top500 SINCE 2010-01-01 FWD 5d, 20d

Two rows, one per horizon. Each has the number of occurrences, the mean and median forward return, the share that went up, a t-statistic, the baseline for the same stocks over the same period, and edge_pct, the difference between the two. The Look-for note is short: every number has a baseline. More in OUTCOMES.

A graph result as a list.

GET (GRAPH MATCH company -supplies-> NVDA) SELECT symbol, name, ret, rsi(14) SORT ret

The inner statement walks the supply-chain graph and returns NVIDIA's stated suppliers. The outer one treats that answer as a list and screens it. Anything that accepts a list accepts a graph walk. See GRAPH.

A what-if.

GRAPH PROPAGATE NVDA -5% VIA beta DEPTH 2 LIMIT 20

Twenty stocks with the move each would be expected to make if NVIDIA fell 5%, from betas in the correlation graph, with the path the shock travelled. The sheet's note is deliberately modest: an illustrative linear what-if, not a forecast.

Two asset classes in one statement.

WITH b AS (SELECT timestamp, ret AS btc FROM bars WHERE symbol = 'BTCUSD' AND timestamp >= '2025-01-01'), q AS (SELECT timestamp, ret AS ndx FROM bars WHERE symbol = 'QQQ' AND timestamp >= '2025-01-01') SELECT corr(b.btc, q.ndx) AS corr, beta(b.btc, q.ndx) AS beta_to_nasdaq, count(*) AS days FROM b JOIN q ON b.timestamp = q.timestamp

One row: the correlation of bitcoin's daily returns with the Nasdaq 100 fund, bitcoin's beta to it, and the number of days used. Crypto has a bar for every calendar day and the fund only for trading days, so the join keeps the days both have. corr and beta are aggregates, like avg.

Run those eight and you have touched the catalogue, SQL, events, outcomes, both graphs and two asset classes in about ten minutes, and for each one you knew in advance what a correct answer looks like.

How we use it ourselves

The sheet did not start as marketing. It is our release checklist, and the public page is the same data with one layer removed.

When staff open the sheet, each card has three more buttons, Pass, Fail and Skip, and a note field. A mark is saved with who made it, when, the note, and the timing and row count of the run that was on screen at that moment. Marks are appended, never overwritten, so each item keeps its history. The top of the page shows how many items are passed, failed, skipped and not yet marked, and a filter lists only the failures or only what is left.

Before a release we run the sheet against the new build. A statement that returns the wrong shape, takes longer than its band, or gives an error message a user could not act on gets a Fail and a note, and that note is the bug report. The error-handling section exists for the last case: it is a list of mistakes, each with the short, specific message it should produce. The performance section is a list of statements with the time each should take.

This is also why the Expect lines are specific. "Returns results" cannot fail. "Two rows, 5d and 20d, with edge_pct equal to the mean minus the baseline" can.

Ordinary users see the published sections without the staff marks, and without the items that create shared objects or exercise the API directly. Everything else is the same list we test with.

Try it

Open the Quick tour and press Run on the first five cards. Then open the Demo sheet, search for a word from your own work, such as "earnings", "gap" or "sector", and run what comes up. When one of them is close to a question you actually have, press Open in Query and change it. If you are new to the language, Your first query covers the grammar in a few minutes.