USE TPCH;
Go
-- 单表查询（实现投影操作）
-- 查询供应商的名称、地址和联系电话
SELECT name, address, phone
    FROM Sales.Supplier;
Go
-- 单表查询（实现选择操作）
-- 查询最近一周内提交的总价大于1000元的订单的编号、顾客编号等订单的所有信息
SELECT *
    FROM Sales.Orders
    WHERE DATEDIFF(day, orderdate, GETDATE()) < 7 AND totalprice > 1000;
Go
-- 不带分组过滤条件的分组统计查询
-- 统计每个顾客的订购金额
SELECT C.custkey, SUM(O.totalprice)
    FROM Sales.Customer C, Sales.Orders O
    WHERE C.custkey = O.custkey
    GROUP BY C.custkey;
Go
-- 带分组过滤条件的分组统计查询
-- 查询订单平均金额超过1000元的顾客编号及其姓名
SELECT C.custkey, MAX(C.name)
    FROM Sales.Customer C, Sales.Orders O
    WHERE C.custkey = O.custkey
    GROUP BY C.custkey
    HAVING AVG(O.totalprice) > 1000;
Go
-- 单表自身连接查询
-- 查询与“金仓集团”在同一个国家的供应商编号、名称和地址信息
SELECT F.suppkey, F.name, F.address
    FROM Sales.Supplier F, Sales.Supplier S
    WHERE F.nationkey = S.nationkey AND S.name = N'金仓集团';
Go
-- 两表连接查询（普通连接）
-- 查询供应价格大于零售价格的零件名、制造商名、零售价格和供应价格
SELECT P.name, P.mfgr, P.retailprice, PS.supplycost
    FROM Sales.Part P, Sales.Partsupp PS
    WHERE PS.supplycost > P.retailprice;
Go
-- 两表连接查询（自然连接）
-- 查询供应价格大于零售价格的零件名、制造商名、零售价格和供应价格
SELECT P.name, P.mfgr, P.retailprice, PS.supplycost
    FROM Sales.Part P, Sales.Partsupp PS
    WHERE P.partkey = PS.partkey
      AND PS.supplycost > P.retailprice;
Go
-- 三表连接查询
-- 查询顾客“苏举库”订购的订单编号、总价及其订购的零件编号、数量和明细价格
SELECT O.orderkey, O.totalprice, L.partkey, L.quantity, L.extendedprice
    FROM Sales.Customer C, Sales.Orders O, Sales.Lineitem L
    WHERE C.custkey = O.custkey AND O.orderkey = L.orderkey AND C.name = N'苏举库';
Go
