SQL语句(二)查询语句

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='戴美竹'
             )
          )
  
);

猜你喜欢

转载自blog.csdn.net/shujian_tianya/article/details/81067206