2018/12/21 oracle-sql练习

本文提供了一系列Oracle SQL练习案例,包括创建职员、产品和销售记录表,以及各种复杂查询,如按条件筛选职员信息、统计销售总额和平均销售价格等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oracle-sql练习

创建以下表格用于练习

CREATE TABLE tb_emp
(
   ID        number     PRIMARY KEY,--职员编号
   NAME    VARCHAR2(20)    NOT NULL,--职员姓名
   Sex        VARCHAR2(2)    NOT NULL    CHECK(sex IN ('男','女')),--职员性别                            
   Age        number    NOT NULL CHECK(age>=18),--职员年龄
   Address    VARCHAR2(50)    NOT NULL, --职员地址
   Tel        VARCHAR2(30)    NOT NULL,--职员电话
   Email    VARCHAR2(30)--职员邮箱
);
CREATE TABLE tb_Prod
(
   ID        number     PRIMARY KEY,--商品编号
   TYPE    VARCHAR2(20)    NOT NULL,--商品类型
   Mark    VARCHAR2(20)    NOT NULL,--商品品牌
   Spec    VARCHAR2(20)--商品规格
);
CREATE TABLE tb_Sales
(
   srNO        number     PRIMARY KEY,--记录编号
   eID        number    NOT NULL REFERENCES tb_emp(id),--职员编号
   pID        number    NOT NULL REFERENCES tb_prod(id),--商品编号
   pQty        number    NOT NULL CHECK(pqty>0),--销售数量
   pAmount    number        NOT NULL CHECK(pamount>0),--销售价值
   sDate    date    default sysdate --销售时间
);

tb_emp员工表的数据插入

INSERT INTO tb_emp
(ID,NAME,sex,age,address,tel)
VALUES
(1,'赵龙','男',25,'湖南省长沙市伍家岭江南苑9栋203号','0731-4230123');
INSERT INTO tb_emp
(ID,NAME,sex,age,address,tel)
VALUES
(2,'李云','女',23,'湖南省长沙市东风路东风新村21栋502号','0731-4145268');
INSERT INTO tb_emp
(ID,NAME,sex,age,address,tel)
VALUES
(3,'孙一成','男',24,'湖南省株洲市601厂宿舍15栋308号','0732-8342567');
INSERT INTO tb_emp
(ID,NAME,sex,age,address,tel)
VALUES
(4,'林笑','男',27,'湖南省郴洲市人民医院20栋301号','0735-2245214');
INSERT INTO tb_emp
(ID,NAME,sex,age,address,tel)
VALUES
(5,'卫晴','女',23,'湖南省长沙市望月湖12栋403号','0731-8325124');

tb_Prod产品表的数据插入

INSERT INTO tb_prod VALUES(1,'电视机','长虹','29英寸纯平');

INSERT INTO tb_prod VALUES(2,'电视机','长虹','29英寸纯平艺术');

INSERT INTO tb_prod VALUES(3,'电视机','长虹','32英寸背投');

INSERT INTO tb_prod VALUES(4,'电视机','熊猫','29英寸纯平');

INSERT INTO tb_prod VALUES(5,'电视机','熊猫','29英寸纯平艺术');

INSERT INTO tb_prod VALUES(6,'电视机','熊猫','32英寸背投');

INSERT INTO tb_prod VALUES(7,'笔记本','联想','P4-1.8G');

INSERT INTO tb_prod VALUES(8,'笔记本','联想','P4-2.4G');

INSERT INTO tb_prod VALUES(9,'笔记本','紫光','P4-1.8G');

INSERT INTO tb_prod VALUES(10,'笔记本','紫光','P4-2.4G');

tb_Sales销售表的数据插入

INSERT INTO tb_sales VALUES(1,1,1,10,21000,to_date('2004-3-12','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(2,1,2,5,20000,to_date('2004-3-12','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(3,1,1,4,23500,to_date('2004-3-14','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(4,1,5,4,16500,to_date('2004-3-14','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(5,2,3,3,31000,to_date('2004-3-11','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(6,2,6,4,40000,to_date('2004-3-13','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(7,3,7,5,40000,to_date('2004-3-13','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(8,3,8,3,36000,to_date('2004-3-14','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(9,4,9,6,41500,to_date('2004-3-12','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(10,4,10,5,50000,to_date('2004-3-14','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(11,1,1,10,21000,to_date('2004-4-12','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(12,1,2,5,20000,to_date('2004-4-12','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(13,1,4,12,23500,to_date('2004-4-14','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(14,1,5,4,16500,to_date('2004-4-14','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(15,2,3,3,31000,to_date('2004-4-11','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(16,2,6,4,40000,to_date('2004-4-13','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(17,3,7,5,40000,to_date('2004-4-13','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(18,3,8,3,36000,to_date('2004-4-14','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(19,4,9,6,41500,to_date('2004-4-12','yyyy-mm-dd'));

INSERT INTO tb_sales VALUES(20,4,10,5,50000,to_date('2004-4-14','yyyy-mm-dd'));

查询所有职员的所有信息

select * from tb_emp;

在这里插入图片描述

查询所有职员的姓名,电话,地址

select name,tel,address
from tb_emp;

在这里插入图片描述

查询所有女职员的详细信息

select * 
from tb_emp 
where sex='女'

在这里插入图片描述

查询年龄在24到26岁之间的职员的姓名,性别

select name,sex 
from tb_emp 
where age between 24 and 26

在这里插入图片描述
查询家住长沙的女职员的姓名,电话,地址

select name,tel,address
from tb_emp
where sex='女' and address like ('%长沙%')

在这里插入图片描述
查询李云,孙一成,林笑的电话,地址

select tel,address
from tb_emp
where name in ('李云','孙一成','林笑')

在这里插入图片描述
查询郴洲和株洲的职员的姓名,性别,年龄

select name,sex,age
from tb_emp
where address like ('%郴洲%') or address like ('%株洲%')

在这里插入图片描述
查询家住长沙,年龄在25到28岁之间的男职员的姓名

select name
from tb_emp
where (age between 25 and 28)
and
(address like '%长沙%')
and
(sex='男')

在这里插入图片描述
查询邮件地址为空的职员

select name
from tb_emp
where email is null

在这里插入图片描述
总共有多少个职员?

select count(*)
from tb_emp

在这里插入图片描述
年龄最小的女职员的年龄

select name
from tb_emp
where sex='女'
and
age in (select min(age)
from tb_emp
where sex='女'
group by sex)

在这里插入图片描述
这里两个人都是23岁,原本用的是age = (select。。。)来查询,但是只查询出李云一个人,因为这个子查询返回两行数据,改成in之后,结果正确。

按性别统计职员的最大年龄和最小年龄

select sex,max(age),min(age)
from tb_emp
group by sex

在这里插入图片描述
笔记本单笔销售价值最高的单笔销售价值

select max(pamount)
from tb_prod p,tb_sales s
where p.id=s.pid
group by type
having type='笔记本'

在这里插入图片描述
5. 熊猫电视机的平均销售价格

select avg(pamount)
from tb_prod p,tb_sales s
where p.id=s.pid
group by mark
having mark='熊猫'

在这里插入图片描述
紫光笔记本4月份的销售总额

select sum(pamount)
from tb_prod p,tb_sales s
where p.id=s.pid and to_char(sdate,'mm')=4
group by mark
having mark='紫光' 

在这里插入图片描述
这里to_char函数获得的月数是字符类型,和数字4比较的时候会隐式转换成数字类型。

按类型,品牌统计商品的销售总数量,销售总数量,低于20的不统计

select type,mark,sum(pqty)
from tb_prod p,tb_sales s
where p.id=s.pid
group by type,mark
having sum(pqty)>=20

在这里插入图片描述
按品牌,规格统计笔记本的平均销售价格,按销售价格从高到低的顺序显示

select mark,spec,avg(pamount) a
from tb_prod p,tb_sales s
where p.id=s.pid
group by mark,spec
order by  a desc

在这里插入图片描述
按姓名统计男职员3月份的销售总额,销售总额低于80000的不统计

select e.name,sum(pamount) 销售总额
from tb_prod p,tb_sales s,tb_emp e
where p.id=s.pid and e.id=s.eid 
and e.sex='男' 
and to_char(sdate,'mm')=3
group by e.name
having sum(pamount) >=80000

在这里插入图片描述
找出销售总额最高的职员的姓名

select e.name,sum(pamount) sp
from tb_emp e,tb_sales s
where e.id=s.eid 
group by e.name
having sum(pamount)=(select max(a)
                    from (select sum(pamount) a
                          from tb_emp e,tb_sales s
                          where e.id=s.eid
                          group by e.id
                          order by a desc)  )

在这里插入图片描述
1.先求出每个员工的销售总额倒序排序
2.再求出销售总额最高的额度用max()函数来实现
3.再求出每个人的姓名与销售额度,当销售额度等于最高的销售总额时,输出这个人的姓名和销售额度

按姓名统计每个职员一共完成了多少笔销售业务

select e.name,count(s.eid) 业务数量
from tb_emp e,tb_sales s
where e.id=s.eid(+)
group by e.name

在这里插入图片描述
找出完成销售业务笔数最少的职员的姓名和他完成的业务数

select e.name,count(s.eid) 业务数量
from tb_emp e,tb_sales s
where e.id=s.eid(+)
group by e.name
having count(s.eid) = (select min(ct)
                    from (select e.name,count(s.eid) ct
                    from tb_emp e,tb_sales s
                    where e.id=s.eid(+)
                    group by e.name))

在这里插入图片描述

所有职员,所有商品的销售情况,
包括:职员姓名,商品类别,商品品牌,商品规格,销售数量,销售价值,销售时间,按销售时间从高到低排列

select e.name,type,mark,spec,pqty,pamount,sdate
from tb_emp e,tb_prod p,tb_sales s
where e.id=s.eid and p.id=s.pid
order by sdate desc;

在这里插入图片描述
笔记本4月份的销售情况,
包括:商品编号,商品品牌,商品规格,销售数量,销售价值,按销售数量从低到高排列

select p.id,p.mark,p.spec,s.pqty,s.pamount
from tb_prod p,tb_sales s
where  p.id=s.pid
and type='笔记本'
and to_char(sdate,'mm')=4
order by s.pqty asc;

在这里插入图片描述
李云3月份的销售情况,包括:商品编号,商品品牌,商品规格,销售数量,销售价值

select e.name,p.id,p.mark,p.spec,s.pqty,s.pamount
from tb_emp e,tb_prod p,tb_sales s
where e.id=s.eid and p.id=s.pid 
and e.name='李云' 
and to_char(sdate,'mm')=3;

在这里插入图片描述
长虹29英寸纯平艺术电视机的销售情况,包括:销售数量,销售价值,销售时间

select pamount 销售价值,pqty 销售数量,sdate 销售时间
from tb_prod p,tb_sales s
where p.id=s.pid
and mark='长虹'
and spec='29英寸纯平艺术';

在这里插入图片描述
长沙男职员4月份的销售情况,包括:职员姓名,商品类别,商品品牌,商品规格,销售数量,销售价值

select e.name,p.type,p.mark,p.spec,s.pqty,s.pamount
from tb_emp e,tb_prod p,tb_sales s
where e.id=s.eid and p.id=s.pid
and sex='男'
and address like '%长沙%'
and to_char(sdate,'mm')=4;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值