2018/12/21 oracle-sql練習
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;