使用PostgreSQL进行复杂查询

SQL复杂查询与视图。

数据说明

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

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

使用PostgreSQL进行复杂查询_第1张图片

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;

可以得到:

使用PostgreSQL进行复杂查询_第2张图片

操作

  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;
    

    使用PostgreSQL进行复杂查询_第3张图片

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

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

    使用PostgreSQL进行复杂查询_第4张图片

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

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

    使用PostgreSQL进行复杂查询_第5张图片

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

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

    使用PostgreSQL进行复杂查询_第6张图片

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

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

    53991099326

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

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

    使用PostgreSQL进行复杂查询_第7张图片

你可能感兴趣的:(Database)