Skip to main content

Basic Query Examples

Learn by example! Here are common BigQuery queries for the MCP server.

Product Queries

Find Product by SKU

-- Search by Artikelnummer or External Article Number
SELECT
Artikelnummer,
`Externe Artikelnummer`,
Name,
Brand,
Status
FROM `your-project.products.Produkt`
WHERE Artikelnummer = '142300'
OR `Externe Artikelnummer` = '142300'
tip

Always check both Artikelnummer and Externe Artikelnummer fields when searching by SKU, as products may use either.

List Active Products

SELECT 
Name,
Brand,
Price,
Status
FROM `your-project.products.Produkt`
WHERE Status = 'Aktiv'
ORDER BY Name
LIMIT 100

Search by Brand

SELECT 
Artikelnummer,
Name,
Price
FROM `your-project.products.Produkt`
WHERE Brand = 'Nike'
AND Status = 'Aktiv'
ORDER BY Price DESC

Aggregation Queries

Count Products by Status

SELECT 
Status,
COUNT(*) as ProductCount
FROM `your-project.products.Produkt`
GROUP BY Status
ORDER BY ProductCount DESC

Average Price by Brand

SELECT 
Brand,
COUNT(*) as ProductCount,
AVG(Price) as AvgPrice,
MIN(Price) as MinPrice,
MAX(Price) as MaxPrice
FROM `your-project.products.Produkt`
WHERE Price IS NOT NULL
GROUP BY Brand
HAVING COUNT(*) >= 5
ORDER BY AvgPrice DESC

Top 10 Most Expensive Products

SELECT 
Name,
Brand,
Price,
Artikelnummer
FROM `your-project.products.Produkt`
WHERE Price IS NOT NULL
ORDER BY Price DESC
LIMIT 10

Filtering Queries

Products in Price Range

SELECT 
Name,
Brand,
Price
FROM `your-project.products.Produkt`
WHERE Price BETWEEN 50 AND 150
AND Status = 'Aktiv'
ORDER BY Price

Search by Product Name

-- Case-insensitive search
SELECT
Artikelnummer,
Name,
Brand
FROM `your-project.products.Produkt`
WHERE LOWER(Name) LIKE '%shoe%'
LIMIT 50

Multiple Conditions

SELECT 
Name,
Brand,
Price,
Status
FROM `your-project.products.Produkt`
WHERE Brand IN ('Nike', 'Adidas', 'Puma')
AND Status = 'Aktiv'
AND Price < 100
ORDER BY Brand, Price

GTIN Queries

Find by GTIN

SELECT 
Artikelnummer,
Name,
GTIN,
`GTIN VPE`,
`GTIN Karton`,
`GTIN Palette`
FROM `your-project.products.Produkt`
WHERE GTIN = '4250847198292'
OR `GTIN VPE` = '4250847198292'
OR `GTIN Karton` = '4250847198292'
OR `GTIN Palette` = '4250847198292'

Products with Missing GTIN

SELECT 
Artikelnummer,
Name,
Brand
FROM `your-project.products.Produkt`
WHERE GTIN IS NULL
AND Status = 'Aktiv'
LIMIT 20

Date-Based Queries

Recently Updated Products

SELECT 
Name,
Brand,
UpdatedAt
FROM `your-project.products.Produkt`
WHERE UpdatedAt >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
ORDER BY UpdatedAt DESC

Products Created This Month

SELECT 
Name,
CreatedAt,
Status
FROM `your-project.products.Produkt`
WHERE CreatedAt >= DATE_TRUNC(CURRENT_DATE(), MONTH)
ORDER BY CreatedAt DESC

Interactive Examples

Try It Yourself!

Here's a template you can modify:

SELECT 
-- Add columns you want to see
Name,
Brand,
Price
FROM `your-project.products.Produkt`
WHERE
-- Add your conditions
Status = 'Aktiv'
-- AND Brand = 'YourBrand'
-- AND Price > 0
ORDER BY
-- Choose sort order
Price DESC
LIMIT 10 -- Adjust limit as needed
Quick Tips
  • Use -- for comments in SQL
  • Press Ctrl+Space for autocomplete (in some tools)
  • Always use LIMIT when testing queries

Common Patterns

NULL Handling

-- Find products without prices
SELECT Name, Brand
FROM `your-project.products.Produkt`
WHERE Price IS NULL

-- Exclude NULL values
SELECT AVG(Price) as AvgPrice
FROM `your-project.products.Produkt`
WHERE Price IS NOT NULL

Case Statements

SELECT 
Name,
Price,
CASE
WHEN Price < 50 THEN 'Budget'
WHEN Price < 150 THEN 'Mid-range'
ELSE 'Premium'
END as PriceCategory
FROM `your-project.products.Produkt`
WHERE Price IS NOT NULL

String Operations

-- Concatenate fields
SELECT
CONCAT(Brand, ' - ', Name) as FullName,
Artikelnummer
FROM `your-project.products.Produkt`

-- Extract substring
SELECT
Name,
SUBSTR(Artikelnummer, 1, 3) as CategoryCode
FROM `your-project.products.Produkt`

Performance Tips

1. Always Use Limits When Testing

-- Good: Limited results for testing
SELECT * FROM Produkt LIMIT 10

-- Avoid: May return thousands of rows
SELECT * FROM Produkt

2. Filter Early

-- Efficient: Filter before join
SELECT p.Name, i.Quantity
FROM Produkt p
JOIN Inventory i ON p.Artikelnummer = i.SKU
WHERE p.Status = 'Aktiv'

-- Less efficient: Filter after join
SELECT p.Name, i.Quantity
FROM Produkt p
JOIN Inventory i ON p.Artikelnummer = i.SKU
WHERE p.Status = 'Aktiv'

3. Use Specific Columns

-- Good: Only needed columns
SELECT Name, Price FROM Produkt

-- Avoid: All columns when not needed
SELECT * FROM Produkt

Next Steps

Ready for more complex queries? Check out: