使用PostgreSQL进行复杂查询

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/crazy_scott/article/details/83176081

SQL复杂查询与视图。

数据说明

现在有一个spj数据库,其中有四个表,分别为:

S P J SPJ
供应商代码表 零件表 工程项目表 供应情况表

53990837542

SQL查询

创建视图

将零件表P表与供应情况SPJ表、供应商S表结合,得到零件与供应商的关系:

CREATE VIEW P_S
AS SELECT P.PNO,PNAME,COLOR,WEIGHT,S.SNO,JNO,QTY,SNAME,STATUS,CITY
FROM P LEFT JOIN SPJ
ON P.PNO = SPJ.PNO 
LEFT JOIN S
ON SPJ.SNO = S.SNO;

可以得到:

53990902126

操作

  1. 在零件表的视图中找出weight < 20 的零件名字(PNAME)

    SELECT DISTINCT PNAME
    FROM P_S
    WHERE WEIGHT < 20;
    

    53990930200

  2. 查询供应商表中城市为北京的供应商姓名(SNAME)

    SELECT DISTINCT SNAME
    FROM S
    WHERE CITY = '北京';
    

    53990941503

  3. 在零件表中查询平均重量在15以上的零件名字和零件代码(PNO)

    SELECT DISTINCT PNAME,PNO
    FROM P_S
    WHERE PNAME IN (
    SELECT DISTINCT PNAME
    FROM P_S    
    GROUP BY PNAME
    HAVING AVG(WEIGHT) > 15);
    

    53990963869

  4. 查询全体供应商的姓名(SNAME)和状态(STATUS)

    SELECT DISTINCT SNAME,STATUS
    FROM P_S;
    

    53990995576

  5. 查询所有weight在13到20岁(含13和20)的零件代码(PNO)、零件名(PNAME)和颜色(COLOR)

    SELECT DISTINCT PNO,PNAME,COLOR
    FROM P_S
    WHERE WEIGHT >= 13 AND WEIGHT <=20;
    

    53991069169

  6. 查询所有“螺”开头的的零件代码(PNO)和零件名(PNAME)

    SELECT DISTINCT PNO,PNAME
    FROM P_S
    WHERE PNAME like '螺%'
    

    53991079728

  7. 查询所有零件的平均重量

    SELECT DISTINCT PNAME,AVG(WEIGHT)
    FROM P_S
    GROUP BY PNAME;
    

    53991088459

  8. 查询同在“天津”的工程项目名(JNAME)

    SELECT JNAME
    FROM J
    WHERE CITY = '天津';
    

    53991099326

  9. 查询在“精益”供应商下的零件,且质量小于15的零件详细信息

    SELECT PNO,PNAME,COLOR,WEIGHT,JNO,QTY
    FROM P_S
    WHERE SNAME = '精益';
    

    53991111772

猜你喜欢

转载自blog.csdn.net/crazy_scott/article/details/83176081