You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
4.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

-- 比较条件
-- 找出所有价格大于500元的产品。
SELECT product_name, price FROM products WHERE price > 500;
-- 列出所有总销售额大于1000元的销售订单。
SELECT order_id, total_amount FROM sales_orders WHERE total_amount > 1000;
-- 集合比较
-- 获取所有来自“科技公司”的产品列表。
SELECT p.product_name
FROM products p
JOIN product_suppliers ps ON p.product_id = ps.product_id
JOIN suppliers s ON ps.supplier_id = s.supplier_id
WHERE s.company_name = '科技公司';
-- 查找由“王明”或“李华”负责的所有销售订单。
SELECT so.order_id, so.customer_id, so.total_amount
FROM sales_orders so
JOIN sales_people sp ON so.salesperson_id = sp.salesperson_id
WHERE sp.saleperson_name IN ('王明', '李华');
-- 范围比较
-- 找到2024年1月1日至2024年1月31日之间的所有销售订单。
SELECT * FROM sales_orders
WHERE order_date BETWEEN '2024-10-01' AND '2024-10-31';
-- 列出库存数量在100到200之间的所有产品。
SELECT product_name, stock_quantity
FROM products
WHERE stock_quantity BETWEEN 100 AND 200;
-- 字符串相似比较
-- 搜索名字中包含“华”的所有客户。
SELECT customer_name, phone
FROM customers
WHERE customer_name LIKE '%华%';
-- 找出公司名称以“电子”开头的所有供应商。
SELECT company_name, phone
FROM suppliers
WHERE company_name LIKE '电子%';
-- 多表连接
-- 显示每个销售订单的详细信息包括订单ID、客户名、销售人员名和总金额。
SELECT so.order_id, c.customer_name, sp.saleperson_name, so.total_amount
FROM sales_orders so
JOIN customers c ON so.customer_id = c.customer_id
JOIN sales_people sp ON so.salesperson_id = sp.salesperson_id;
-- 列出每种产品的供应商及其仓库位置。
SELECT p.product_name, s.company_name, w.location
FROM products p
JOIN product_suppliers ps ON p.product_id = ps.product_id
JOIN suppliers s ON ps.supplier_id = s.supplier_id
JOIN product_warehouses pw ON p.product_id = pw.product_id
JOIN warehouses w ON pw.warehouse_id = w.warehouse_id;
-- 嵌套查询
-- 找到所有购买了“笔记本电脑”的客户。
SELECT DISTINCT c.customer_name
FROM customers c
JOIN sales_orders so ON c.customer_id = so.customer_id
JOIN order_details od ON so.order_id = od.order_id
JOIN products p ON od.product_id = p.product_id
WHERE p.product_name = '笔记本电脑';
-- 列出有退货记录的销售订单。
SELECT so.order_id, so.order_date, so.total_amount
FROM sales_orders so
WHERE so.order_id IN (SELECT r.order_id FROM returns r);
-- EXISTS 查询
-- 检查是否有任何产品没有关联的供应商。
SELECT p.product_name
FROM products p
WHERE NOT EXISTS (
SELECT 1 FROM product_suppliers ps WHERE ps.product_id = p.product_id
);
-- 找出至少有一条退货记录的客户。
SELECT c.customer_name
FROM customers c
WHERE EXISTS (
SELECT 1 FROM returns r
JOIN sales_orders so ON r.order_id = so.order_id
WHERE so.customer_id = c.customer_id
);
-- 进阶查询
-- 计算每个销售人员的总销售额。
SELECT sp.saleperson_name, SUM(so.total_amount) AS total_sales
FROM sales_people sp
JOIN sales_orders so ON sp.salesperson_id = so.salesperson_id
GROUP BY sp.saleperson_name;
-- 统计每个仓库的产品总数。
SELECT w.location, SUM(pw.quantity_in_warehouse) AS total_products
FROM warehouses w
JOIN product_warehouses pw ON w.warehouse_id = pw.warehouse_id
GROUP BY w.location;
-- 找出每个客户的最近一次购买日期。
SELECT c.customer_name, MAX(so.order_date) AS last_purchase_date
FROM customers c
JOIN sales_orders so ON c.customer_id = so.customer_id
GROUP BY c.customer_name;
-- 列出所有销售活动及其对应的总销售额。
SELECT sa.activity_name, SUM(so.total_amount) AS total_sales
FROM sales_activities sa
JOIN sales_orders so ON so.order_date BETWEEN sa.start_date AND sa.end_date
GROUP BY sa.activity_name;
-- 找到最贵的三个产品及其供应商。
SELECT p.product_name, s.company_name, p.price
FROM products p
JOIN product_suppliers ps ON p.product_id = ps.product_id
JOIN suppliers s ON ps.supplier_id = s.supplier_id
ORDER BY p.price DESC
LIMIT 3;
-- 计算每个运输方式的平均单位成本。
SELECT sm.methodname, AVG(sm.cost_per_unit) AS avg_cost
FROM shipping_methods sm
GROUP BY sm.methodname;