1.SQL基本查询语句
SELECT 列名,类名……
FROM 表名/视图名,表名/视图名……
WHERE 条件表达式
GROUP BY 列名1 HAVING 条件表达式
ORDER BY 列名2
根据WHERE子句的条件表达式,从FROM子句指定的基本表或者视图中找出满足条件的元组,再按照SELECT子句中的目标列表达式,选出元组中属性值形成结果表。
如果有GROUP BY子句,就按照列名1的值进行分组,该属性列值相等的元组为一组,通常会在每组中使用聚集函数。如果GROUP BY子句带有HAVING短语,则只有满足指定条件的组才能输出。
如果有ORDER BY子句,结果还要按照列名2的值升序或者降序。
2.基本查询
/*2.1供应商名称、地址、联系电话*/
SELECT name,address,phone
FROM supplier;
/*2.2最近一周内提交的总价大于1000元的订单编号、顾客编号等订单的所有信息*/
SELECT *
FROM orders
WHERE Datediff(dd,orderdate,GETDATE())<=7
AND totalprice>1000;
/*2.3每个顾客的订单金额*/
SELECT orders.custkey,name,SUM(totalprice) sumprice
FROM customer,orders
WHERE customer.custkey=orders.custkey
GROUP BY orders.custkey,name
ORDER BY SUM(totalprice) DESC;
/*2.4订单平均金额超过元的顾客编号以及姓名*/
SELECT orders.custkey,name,AVG(totalprice) avgerage
FROM customer,orders
WHERE customer.custkey=orders.custkey
GROUP BY orders.custkey,name
HAVING AVG(totalprice)>1000
ORDER BY orders.custkey DESC;
/*2.5 查询与“上海黎顺服装经营部”在同一个国家的供应商编号、名称和地址信息*/
SELECT suppkey,name,address
FROM supplier
WHERE nationkey=
(
SELECT nationkey
FROM supplier
WHERE name='上海黎顺服装经营部'
);
SELECT a.suppkey,a.name,a.address
FROM supplier a , supplier b
WHERE b.nationkey=b.nationkey
AND b.name ='上海黎顺服装经营部';
/*2.6 供应商价格大于零售价格的零件名、制造商名、零售价格和供应商价格*/
SELECT name,mfgr,retailprice,supplycost
FROM part,partsupp
WHERE supplycost >retailprice
AND part.partkey=partsupp.partkey
/*2.8顾客“阿波罗"订单的订单编号、总价、订购的零件编号、数量和明细价格*/
SELECT orders.orderkey,totalprice,partkey,quantity,extendedprice
FROM orders,lineitem
WHERE orders.orderkey=lineitem.orderkey
AND custkey =
(
SELECT custkey
FROM customer
WHERE name='阿波罗'
);
3.高级查询
/*3.1订购“沈阳市新民高中压阀门厂”制造“竹炭黄土按摩皂”的顾客*/
SELECT custkey,name /* 找出订购的顾客的编号和姓名*/
FROM customer
WHERE custkey IN
(
SELECT custkey/*含有该订单编号的顾客编号*/
FROM orders
WHERE orderkey IN
(
SELECT orderkey /*含有该零件编号的的订单编号*/
FROM lineitem
WHERE partkey=
(
SELECT partkey/* 找出零件编号*/
FROM part
WHERE name='竹炭黄土按摩皂'
AND mfgr='沈阳市新民高中压阀门厂'
)
)
);
/*3.2 没有购买过“沈阳市新民高中压阀门厂”制造的“竹炭黄土按摩皂”的顾客*/
SELECT custkey,name /* 找出订购的顾客的编号和姓名*/
FROM customer
WHERE custkey NOT IN
(
SELECT custkey/*含有该订单编号的顾客编号*/
FROM orders
WHERE orderkey IN
(
SELECT orderkey /*含有该零件编号的的订单编号*/
FROM lineitem
WHERE partkey=
(
SELECT partkey/* 找出零件编号*/
FROM part
WHERE name='竹炭黄土按摩皂'
AND mfgr='沈阳市新民高中压阀门厂'
)
)
);
/*3.3 至少购买过顾客“董浩川”购买过的全部零件的顾客姓名*/
SELECT name FROM customer WHERE custkey IN
(
SELECT custkey FROM orders WHERE orderkey IN
(
SELECT orderkey FROM lineitem WHERE partkey IN
(
SELECT partkey FROM lineitem WHERE orderkey IN
(
SELECT orderkey FROM orders WHERE custkey=
(
SELECT custkey FROM customer WHERE name='董浩川'
)
)
)
)
)
GROUP BY name
HAVING(COUNT(*)=
(
SELECT count ( DISTINCT partkey) FROM lineitem WHERE orderkey IN
(
SELECT orderkey FROM orders WHERE custkey=
(
SELECT custkey FROM customer WHERE name='董浩川'
)
)
)
)
/*3.4查询订单平均金额超过万元的顾客的中国国籍顾客信息*/
SELECT *
FROM customer
WHERE customer.custkey IN
(
SELECT orders.custkey
FROM customer,orders
WHERE customer.custkey=orders.custkey
GROUP BY orders.custkey
HAVING AVG(totalprice)>10000
)
AND nationkey=
(
SELECT nationkey
FROM nation
WHERE name='中国'
);
/*3.5“董浩川”和“戴美竹”都订购过的全部零件信息*/
SELECT *
FROM part
WHERE partkey IN
(
SELECT partkey FROM lineitem WHERE orderkey IN
(
SELECT orderkey FROM orders WHERE custkey=
(
SELECT custkey FROM customer WHERE name='董浩川'
)
)
INTERSECT
SELECT partkey FROM lineitem WHERE orderkey IN
(
SELECT orderkey FROM orders WHERE custkey=
(
SELECT custkey FROM customer WHERE name='戴美竹'
)
)
);
/*3.6“董浩川”和“戴美竹”订购过的全部零件信息*/
SELECT *
FROM part
WHERE partkey IN
(
SELECT partkey FROM lineitem WHERE orderkey IN
(
SELECT orderkey FROM orders WHERE custkey=
(
SELECT custkey FROM customer WHERE name='董浩川'
)
)
UNION
SELECT partkey FROM lineitem WHERE orderkey IN
(
SELECT orderkey FROM orders WHERE custkey=
(
SELECT custkey FROM customer WHERE name='戴美竹'
)
)
);
/*3.8“董浩川”订购过而且“戴美竹”没有订购过的全部零件信息*/
SELECT *
FROM part
WHERE partkey IN
(
SELECT partkey FROM lineitem WHERE orderkey IN
(
SELECT orderkey FROM orders WHERE custkey=
(
SELECT custkey FROM customer WHERE name='董浩川'
)
)
EXCEPT
SELECT partkey FROM lineitem WHERE orderkey IN
(
SELECT orderkey FROM orders WHERE custkey=
(
SELECT custkey FROM customer WHERE name='戴美竹'
)
)
);