PLSQL数据库查询语句学习Day03

创建一张表WCEmploy(职工号,姓名,部门名,工种,工资)
	建表语句:
	create table WCEmploy(
	    id number(3) PRIMARY KEY,
	    name varchar2(30) not null, 
	    department_name varchar2(15),
	    type varchar2(30),
	    salary number(8)
	)
	插入数据:
insert into WCEmploy values(1,'张三','车间一','钳工',6000);
insert into WCEmploy values(2,'李四','车间一','电工',8000);
insert into WCEmploy values(3,'王五','车间二','车间主任',10000);
insert into WCEmploy values(4,'泰日天','车间一','钳工',6000);
insert into WCEmploy values(5,'风高放火','车间一','电工',8000);
insert into WCEmploy values(6,'沃尔沃','车间二','车间主任',10000);
insert into WCEmploy values(7,'CVBS','车间二','钳工',2000);
insert into WCEmploy values(8,'单个人','车间三','钳工',4500);
insert into WCEmploy values(9,'人头狗','车间二','钳工',6000);
insert into WCEmploy values(10,'后宫番','车间一','钳工',1500);

SQL
--1.请用一个SQL语句查询每个部门的总人数
--部门 DEPARTMENT_NAME
--WCEMPLOY
select DEPARTMENT_NAME 部门 , count(DEPARTMENT_NAME) 部门人数 FROM WCEMPLOY group by DEPARTMENT_NAME;

--2.请用一个SQL语句查询出不同部门的担任“钳工”的职工平均工资
--不同部门 DEPARTMENT_NAME  职位 TYPE 钳工   工资 SALARY
--WCEMPLOY
select DEPARTMENT_NAME 部门 , avg(salary) from WCEMPLOY where type='钳工' group by DEPARTMENT_NAME;

--3.请用一个SQL语句查询出不同部门的担任“钳工”的职工平均工资高于2000的部门
--查询部门   查询工资    
--WCEMPLOY
select DEPARTMENT_NAME 部门 , avg(salary) from WCEMPLOY where type='钳工' group by DEPARTMENT_NAME having AVG(salary)>2000;

--4.请用一个SQL语句查询每个部门低于平均工资的员工信息
--查询每个部门的平均工资
--查询低于平均工资的员工全部信息
--WCEMPLOY

select *
  from WCEMPLOY w,-- 一个W表
       (select AVG(salary) as 平均工资, department_name 
          from WCEMPLOY
         group by DEPARTMENT_NAME) t -- 一个t表
 where w.DEPARTMENT_NAME = t.DEPARTMENT_NAME
   and w.salary < 平均工资
 order by ID;

插入数据练习

一、类型表数据

    1 食品类

    2 生活用品

    3 电器

    4 厨房用品

二、商品表数据

    1,傻小子 ,20160215, 60天, 2.5, 包,1

    2,海飞丝 ,20160614, 730天数, 18.8, 瓶,2

    3,海飞丝 ,20161112, 30天, 1.5, 包,1

    4,苏泊尔电饭煲 ,20150803, null, 389, 台,3

    5,威猛先生 ,20160621, 730天, 36.8, 瓶,4

三、订单信息表

    001 20160610 1 200 傻小子工厂 张三 400

    002 20161120 1 300 傻小子工厂 张三 500

    003 20160820 2 60 海飞丝生产线 王语嫣 840

    004 20161201 3 100 辣条生产商 段誉 100

    005 20160606 4 100 苏泊尔总经销商 乔峰 3500

    006 20160411 5 200 威猛总代理    阿朱 5000

2.执行如下查询语句: 
      1.查询商品名称和商品价格,商品类型。

2. 查询由业务员王语嫣签订的订单,显示订单的编号,订单价格,订单中商品名称,商品数量。

3. 查询订单总额在1000元以上的所有订单,显示订单编号,订单商品名称,最后根据价钱排序。

4. 根据商品类型分类,查询出每个类型的商品各下个多次订单。

5. 找出订单中金额最高的订单,显示此订单当中的商品名称,单价,订单总额。

6. 查询类型是食品类的所有订单信息,显示订单编号,订单成交的时间。

7. 查询张三的所有订单,但是订单的编号,订单成交的时间,显示订单中商品的名称。

	--类型表
create table t_type(
       id number(10) primary key,
       name varchar2(30) not null
);

--信息录入
insert into t_type(id, name)values(1, '食品类');
insert into t_type(id, name)values(2, '生活用品');
insert into t_type(id, name)values(3, '电器');
insert into t_type(id, name)values(4, '厨房用品');


--商品信息表 
create table p_product(
       id number(10) primary key,
       name varchar2(30) not null,
       pro_date date,
       eff_date varchar2(30),
       price NUMERIC(10,2),
       p_unit varchar2(30),
       t_id number(10) references t_type(id)
);


--信息录入


insert into p_product (id, name, pro_date, eff_date, price, p_unit, t_id)
values(1,'傻小子',to_date( '2016-02-15' , 'YYYY-MM-DD' ),'60天', 2.5, '包',1);
insert into p_product (id, name, pro_date, eff_date, price, p_unit, t_id)
values(2,'海飞丝',to_date( '2016-06-14' , 'YYYY-MM-DD' ),'730天', 18.8, '瓶',2);
insert into p_product (id, name, pro_date, eff_date, price, p_unit, t_id)
values(3,'辣条',to_date( '2016-11-12' , 'YYYY-MM-DD' ),'30天', 1.5, '包',1);
insert into p_product (id, name, pro_date, eff_date, price, p_unit, t_id)
values(4,'苏泊尔电饭煲',to_date( '2015-08-03' , 'YYYY-MM-DD' ),null, 389, '台',3);
insert into p_product (id, name, pro_date, eff_date, price, p_unit, t_id)
values(5,'威猛先生',to_date( '2016-06-21' , 'YYYY-MM-DD' ),'730天', 36.8, '瓶',4);

--订单信息表
create table o_orders(
id number(10) primary key,
dealtime date,
p_id number(10)references p_product(id) ,
p_num number(10),
c_name varchar2(30),
o_oper varchar2(30),
tatol number(10)
)

--信息录入
insert into o_orders (id, dealtime, p_id, p_num, c_name, o_oper, tatol)
values(001, to_date( '2016-06-10' , 'YYYY-MM-DD' ), 1, 200, '傻小子工厂', '张三', 400);
insert into o_orders (id, dealtime, p_id, p_num, c_name, o_oper, tatol)
values(002, to_date( '2016-11-20' , 'YYYY-MM-DD' ), 1, 300 , '傻小子工厂', '张三', 500 );
insert into o_orders (id, dealtime, p_id, p_num, c_name, o_oper, tatol)
values(003, to_date( '2016-08-20' , 'YYYY-MM-DD' ), 2, 60 , '海飞丝生产线', '王语嫣', 840 );
insert into o_orders (id, dealtime, p_id, p_num, c_name, o_oper, tatol)
values(004, to_date( '2016-12-01' , 'YYYY-MM-DD' ), 3, 100 , '辣条生产商', '段誉', 100 );
insert into o_orders (id, dealtime, p_id, p_num, c_name, o_oper, tatol)
values(005, to_date( '2016-06-06' , 'YYYY-MM-DD' ), 4, 100 , '苏泊尔总经销商', '乔峰', 3500 );
insert into o_orders (id, dealtime, p_id, p_num, c_name, o_oper, tatol)
values(006, to_date( '2016-04-11' , 'YYYY-MM-DD' ), 5, 200, '威猛总代理', '阿朱', 5000 );

---
drop table t_type;
drop table p_product;
drop table o_orders;
---
select * from t_type;
select * from p_product;
select * from o_orders;

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
UPDATE p_product SET name = '辣条' WHERE id = 3;


--1.查询商品名称和商品价格,商品类型。
select p.name 商品名称 , price 商品价格 , t.name 商品类型 from p_product p join t_type t on p.t_id=t.id;

--2. 查询由业务员王语嫣签订的订单,显示订单的编号,订单价格,订单中商品名称,商品数量。
select o_orders.id 订单编号 , tatol 订单价格 , p_product.name 商品名称 , p_num 商品数量 from o_orders join p_product on p_product.id=o_orders.p_id where o_oper='王语嫣';


--3. 查询订单总额在1000元以上的所有订单,显示订单编号,订单商品名称,最后根据价钱排序。
select o.id 订单编号 , p.name 商品名称 from o_orders o join p_product p on p.id=o.p_id where tatol>1000 order by price;

--4. 根据商品类型分类,查询出每个类型的商品订单数量。
select t.id 商品类型 , count(o.p_id) 订单数量 from o_orders o join p_product p on p.id=o.p_id join t_type t on p.t_id=t.id group by t.id;

--5. 找出订单中金额最高的订单,显示此订单当中的商品名称,单价,订单总额。
select p.name 商品名称 , price 单价 , tatol 订单总额 from o_orders o join p_product p on p.id=o.p_id where tatol=(select max(tatol) from o_orders);

--6. 查询类型是食品类的所有订单信息,显示订单编号,订单成交的时间。
select o2.id 订单编号 , o2.dealtime 成交时间 from (select * from o_orders o join p_product p on p.id=o.p_id join t_type t on p.t_id=t.id where t.name='食品类')o2;


--7. 查询张三的所有订单,但是订单的编号,订单成交的时间,显示订单中商品的名称。
select o.id 订单编号 , o.dealtime 成交时间 , p.name 商品的名称 from o_orders o join p_product p on p.id=o.p_id where o_oper='张三';
	


版权声明:本文为qq_52992141原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。