mirror of
https://github.com/h-sphere/sql-seal.git
synced 2026-07-22 10:10:28 +00:00
211 lines
5.2 KiB
Markdown
211 lines
5.2 KiB
Markdown
# Markdown Tables Reference Guide
|
|
|
|
> [!NOTE] Compatibility
|
|
> Introduced in version 0.16.0. Make sure you are using up to date version.
|
|
> Header-based references and cross-file references introduced in version 0.30.0.
|
|
|
|
This guide provides detailed documentation on using SQL Seal to query markdown tables within your notes. For a basic introduction, see the [Querying Markdown Tables](/query-markdown-tables.md) page.
|
|
|
|
## Reference Methods
|
|
|
|
SQL Seal offers several ways to reference tables in your markdown files:
|
|
|
|
- **By numeric index**: `table(tableIndex)`
|
|
- **By header name**: `table(headerName)`
|
|
- **By header name and index**: `table(headerName, tableIndex)`
|
|
- **From other files**: `table(file:path/to/file.md, ...)`
|
|
|
|
## Referencing Tables by Index
|
|
|
|
Indexing starts from 0, so the first table in your note is referenced as `table(0)`, the second as `table(1)`, and so on.
|
|
|
|
```sqlseal
|
|
TABLE expenses = table(0)
|
|
|
|
SELECT * FROM expenses
|
|
```
|
|
|
|
This approach is simple but can be fragile if you add or remove tables from your document, as the indices will shift.
|
|
|
|
## Referencing Tables by Header
|
|
|
|
Instead of using numeric indices, you can reference tables by the header they appear under, making your queries more resilient to document changes.
|
|
|
|
### Basic Header Reference
|
|
|
|
If you have a header followed by a table:
|
|
|
|
```markdown
|
|
# Monthly Expenses
|
|
| Date | Category | Amount |
|
|
| ---- | -------- | ------ |
|
|
| 2025-01-01 | Grocery | 20.40 |
|
|
```
|
|
|
|
You can reference this table using:
|
|
|
|
```sqlseal
|
|
TABLE expenses = table(Monthly Expenses)
|
|
```
|
|
|
|
This finds the first table that appears after the "Monthly Expenses" header. The reference is case-insensitive, so `table(monthly expenses)` works too.
|
|
|
|
### Multiple Tables Under the Same Header
|
|
|
|
If multiple tables exist under the same header, you can specify which one to use with a second parameter:
|
|
|
|
```markdown
|
|
# Financial Data
|
|
|
|
## Revenue by Category
|
|
| Category | Amount |
|
|
| -------- | ------ |
|
|
| Product A| 5000 |
|
|
| Service B| 7000 |
|
|
|
|
## Expense Breakdown
|
|
| Category | Amount |
|
|
| -------- | ------ |
|
|
| Salaries | 6000 |
|
|
| Rent | 2000 |
|
|
```
|
|
|
|
You can reference these tables using either:
|
|
|
|
```sqlseal
|
|
-- By subheader
|
|
TABLE revenue = table(Revenue by Category)
|
|
TABLE expenses = table(Expense Breakdown)
|
|
|
|
-- Or by parent header and index
|
|
TABLE revenue = table(Financial Data, 0) -- First table under Financial Data
|
|
TABLE expenses = table(Financial Data, 1) -- Second table under Financial Data
|
|
```
|
|
|
|
## Referencing Tables from Other Files
|
|
|
|
You can reference tables from any markdown file in your vault using the `file:` prefix.
|
|
|
|
### Basic File Reference
|
|
|
|
To reference a table in another file by index:
|
|
|
|
```sqlseal
|
|
TABLE expenses = table(file:Finance/expenses.md, 0)
|
|
```
|
|
|
|
This accesses the first table in the `Finance/expenses.md` file.
|
|
|
|
### File Reference with Header
|
|
|
|
You can combine file references with header references:
|
|
|
|
```sqlseal
|
|
TABLE summary = table(file:Finance/annual-report.md, Revenue Summary)
|
|
```
|
|
|
|
This finds the table under the "Revenue Summary" header in the `Finance/annual-report.md` file.
|
|
|
|
You can also include an index if needed:
|
|
|
|
```sqlseal
|
|
TABLE revenue = table(file:Finance/annual-report.md, Financial Data, 0)
|
|
TABLE expenses = table(file:Finance/annual-report.md, Financial Data, 1)
|
|
```
|
|
|
|
### File Path Options
|
|
|
|
When referencing other files, you have these path options:
|
|
|
|
1. **Absolute Paths** (from vault root):
|
|
```sqlseal
|
|
TABLE data = table(file:Finance/reports/q1.md, 0)
|
|
```
|
|
|
|
2. **Relative Paths** (relative to current file):
|
|
```sqlseal
|
|
-- Same folder, reports subfolder
|
|
TABLE data = table(file:./reports/q1.md, 0)
|
|
|
|
-- Parent folder
|
|
TABLE summary = table(file:../summary.md, 0)
|
|
```
|
|
|
|
3. **Optional Extension**:
|
|
The `.md` extension is optional and will be added automatically:
|
|
```sqlseal
|
|
TABLE data = table(file:Finance/reports/q1, 0) -- Will look for q1.md
|
|
```
|
|
|
|
## Practical Examples
|
|
|
|
### Example 1: Joining Data from Different Files
|
|
|
|
```sqlseal
|
|
TABLE sales = table(file:Data/sales.md, Monthly Sales)
|
|
TABLE targets = table(file:Plans/targets.md, Monthly Targets)
|
|
|
|
SELECT
|
|
s.Month,
|
|
s.Revenue,
|
|
t.Target,
|
|
ROUND((s.Revenue / t.Target) * 100, 1) as Achievement
|
|
FROM
|
|
sales s
|
|
JOIN
|
|
targets t ON s.Month = t.Month
|
|
ORDER BY
|
|
s.Month
|
|
```
|
|
|
|
### Example 2: Analyzing Data Under Different Headers
|
|
|
|
```sqlseal
|
|
TABLE q1 = table(Q1 Results)
|
|
TABLE q2 = table(Q2 Results)
|
|
TABLE q3 = table(Q3 Results)
|
|
TABLE q4 = table(Q4 Results)
|
|
|
|
SELECT
|
|
'Q1' as Quarter, SUM(Revenue) as Revenue FROM q1
|
|
UNION ALL
|
|
SELECT
|
|
'Q2' as Quarter, SUM(Revenue) as Revenue FROM q2
|
|
UNION ALL
|
|
SELECT
|
|
'Q3' as Quarter, SUM(Revenue) as Revenue FROM q3
|
|
UNION ALL
|
|
SELECT
|
|
'Q4' as Quarter, SUM(Revenue) as Revenue FROM q4
|
|
ORDER BY
|
|
Quarter
|
|
```
|
|
|
|
### Example 3: Expense Summary
|
|
|
|
```sqlseal
|
|
TABLE expenses = table(0)
|
|
|
|
HTML
|
|
SELECT
|
|
strftime('%Y-%m', Date) as Month,
|
|
Category,
|
|
ROUND(SUM(Amount), 2) as Total
|
|
FROM
|
|
expenses
|
|
GROUP BY
|
|
Month, Category
|
|
ORDER BY
|
|
Month, Total DESC
|
|
```
|
|
|
|
## Inline Queries
|
|
|
|
You can use inline queries to embed values directly in your text:
|
|
|
|
```
|
|
Total revenue: `S> SELECT SUM(Revenue) FROM sales`.
|
|
Average sale: `S> SELECT ROUND(AVG(Amount), 2) FROM transactions`.
|
|
```
|
|
|
|
Note that inline queries require table definitions elsewhere in the document, as they can't define tables themselves.
|