--1/显示面积小于仓库平局面积的仓库信息:
SELECT 面积 FROM 仓库 WHERE 面积<(SELECT AVG(面积) FROM 仓库);
--2/统计性别为女,工资大于1500的职工人数:
SELECT COUNT(*) FROM 职工 WHERE sex='女' AND 工资>1500;
--3/显示仓库表中有多少个仓库号:
SELECT COUNT(仓库号) FROM 仓库;
--4/显示不重复仓库号的个数: ORACLE中的count()函数只能用于number数据类型;
SELECT COUNT(DISTINCT(仓库号)) FROM 仓库;
--5/显示使用员工的工资总和;
SELECT SUM(工资) FROM 职工;
--6/显示w1仓库号的工资总和;
SELECT SUM(工资) FROM 职工 WHERE 仓库号='w1';
--7/显示上海地区的工资总和;
---先在仓库表中查询出属于上海地区的仓库号;
SELECT SUM(工资) FROM 职工 WHERE 仓库号 IN (SELECT 仓库号 FROM 仓库 WHERE 城市='上海');
--8/显示w1仓库中工资大于1500的职工的平均工资;先求出符合条件的工资总和、职工人数,再求值;
SELECT SUM(工资)/COUNT(*) FROM 仓库 WHERE 仓库号='w1' AND 工资>1500;
--9/显示工资大于平均工资的职工的总人数、工资总和;
SELECT COUNT(*),SUM(工资) FROM 职工 WHERE 工资>(SELECT SUM(工资)/COUNT(*) FROM 职工);
--10、显示评语信息,如果最大工资与最小工资之差超过200,则评语为“工资差别大”,否则为“工资差别小”;
SELECT MAX(工资)-MIN(工资) AS 工资差,工资评语=
CASE
WHEN MAX(工资)-MIN(工资)>200 THEN "工资差别大"
ELSE "工资差别小"
END
FROM 职工 ;
--11/显示工资大于仓库号为W1中最大工资的职工信息;
SELECT * FROM 职工 WHERE 工资>(SELECT MAX(工资) FROM 职工 WHERE 仓库号='W1');
--12/显示除了工资最高、最低的职工的所有信息;
SELECT * FROM 职工 WHERE 工资 NOT IN ((SELECT MAX(工资) FROM 职工),(SELECT MIN(工资) FROM 职工));
--13、添加平均工资虚拟字段: 每一个记录后面都添加一个值相同的字段;
SELECT *,AVG(工资) AS 平均工资 FROM 职工;
--14、显示职工工资与其对应的仓库的平均工资之差:
--先按仓库分组,并求出各组的平均值,以此结果为一个表,命名为aaa;
--以表aaa和表fruits(别名为ff)结合查询,用仓库号关联;
select ff.*,aaa.平均工资,ff.工资-aaa.平均工资
from 职工 as ff,(select 仓库号,avg(工资) as 平均工资 from 职工 group by 仓库号) as aaa
where ff.仓库号=aaa.仓库号
--15/显示面积最大和面积最小的职工信息;
select * from 职工
where 仓库号 in (select 仓库号 from 仓库 where 面积 in ((select max(面积) from 仓库),(select min(面积) from 仓库)))
书籍上的学习笔记