一个样本例子
我们将以财经五金批发公司的仓库计算机管理系统为例,逐步介绍SQL语言的使用。
该公司有五个部门(处),它们分别是财务处、供应处、销售处、仓库管理处以及运输处。财务处由三个科组成,它们分别是财务计划科、记帐核算科和日常报帐科。公司的主要业务是从不同的生产制造厂家进货入库,然后再从公司的仓库把货物销售(批发)给有关的客户(零售商店)。货物入库要填写入库验收单,货物销售给客户需要先开发票,仓库再根据提货联发货。
整个系统用下面的七个
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
存贮了属于公司档案性质的数据以及各种物资的当前库存和物资的出库/入库信息:
⑴本公司各部门(Departments)
编号
名称
地址
负责人
电话
所属部门
DeptCode
DeptName
Address
Manager
Telephone
Higher
P00
财经五金批发公司
公司大楼103室
1
303
P10
财务处
公司大楼303室
3
103
P00
P11
财务处计划科
公司大楼102室
4
102
P10
P12
财务处记帐科
公司大楼201室
6
201
P10
P13
财务处报销科
公司大楼101室
9
101
P10
P20
供应处
公司大楼203室
12
203
P00
P30
销售处
公司大楼204室
17
204
P00
P31
销售研究中心
公司大楼202室
202
P30
P40
仓库管理处
公司仓库办公室
23
400
P00
P50
运输管理处
公司车库办公室
26
500
P00
⑵本公司职工(Peoples)
编号
姓名
性别
出生日期
工作日期
职业
工资
奖金
所在部门
PeopCode
PeopName
Sex
Birthday
WorkDate
Job
Salary
Award
DeptCode
1
李铭棠
男
40/04/25
80/10/01
经理
200
P00
2
周曙
女
62/07/15
62/10/20
办事员
157
P00
3
周金海
男
45/08/21
81/10/20
处长
170
P10
4
陈宝娟
女
51/06/17
85/07/12
科长
150
P11
5
陈虹
女
57/05/10
86/07/19
计划员
120
P11
6
顾为民
男
55/10/01
84/06/11
科长
160
P12
7
叶铭
女
60/08/08
86/02/08
记帐员
120
P12
8
陈玉妹
女
62/02/11
88/05/06
记帐员
110
P12
9
郑文华
男
56/06/20
85/04/22
科长
150
P13
10
张明君
女
59/11/10
85/11/16
报销员
125
P13
11
罗四明
女
58/12/30
85/04/22
报销员
110
P13
12
沈晓华
男
53/09/28
82/12/15
处长
180
P20
13
吴志红
女
61/05/12
86/09/17
办事员
125
P20
14
姚志邦
男
50/01/20
81/08/23
采购员
150
30
P20
15
张浩
男
49/02/18
83/05/06
采购员
140
10
P20
16
林光华
男
47/04/11
88/04/10
采购员
110
20
P20
17
赵汉雄
男
45/05/13
83/02/18
处长
170
P30
18
史玲娟
女
63/08/27
87/11/14
办事员
120
P30
19
王晨
男
52/06/05
82/01/05
推销员
150
30
P30
20
姚国平
男
57/09/14
82/04/07
推销员
150
30
P30
21
张宗恒
男
46/07/07
88/04/10
推销员
110
40
P30
22
曹向群
男
55/12/16
88/04/10
推销员
110
40
P30
23
王英泉
男
35/12/02
81/09/25
处长
210
P40
24
胡贤明
男
61/11/29
83/12/26
仓库管理员
150
P40
25
林芳兵
女
58/04/06
88/04/10
仓库管理员
110
P40
26
黄伯尧
男
50/10/18
85/08/23
处长
180
P50
27
沈妙玉
女
57/04/20
81/08/05
小车驾驶员
180
20
P50
28
黄金宝
男
56/08/22
81/08/21
卡车驾驶员
170
50
P50
29
徐雪飞
男
60/09/10
88/04/10
卡车驾驶员
120
70
P50
⑶有业务联系的单位(CoUnit)
单位编号
单位名称
单位地址
联系人
电话
传真
信誉
UnitCode
UnitName
Address
Relative
Telephone
Fax
Credit
M001
西湖电线厂
天目山路89号
张涛
657368
A
M002
上海电器厂
浦江路19号
王群
9367543
B
M003
南京工具厂
南京路103号
张志强
M004
杭州标准件厂
秋涛路10号
王亚芳
351928
A
C001
国际百货大楼
延安路20号
陈可
C
C002
湖光五金商店
环城西路33号
黄燕红
493946
A
C003
保安电器商店
延安路80号
李立
C004
国际供销大厦
解放路93号
曹向东
296377
C
⑷物资库存(Inventory)
编号
物资名称
计量单位
计划价格
当前库存量
最近使用日期
GoodsCode
GoodsName
Measure
PlanPrice
Stock
LastUpdate
WJM1
木螺丝4*10
盆
10
10
90/08/08
WJM2
木螺丝4*15
盆
12
100
90/08/26
WJM3
木螺丝4*20
盆
15
50
90/08/08
WGQ1
大号起子
把
5
100
90/08/08
WGQ2
中号起子
把
4
20
90/08/13
WGQ3
小号起子
把
3
500
90/08/26
WGL1
榔头0.25公斤
把
7
20
90/08/26
WGL2
榔头0.5公斤
把
5
10
89/02/23
WG01
组合工具包
只
50
15
90/07/15
DZ31
三相插座
个
0.8
200
90/08/21
DZ32
三相插头
个
0.6
200
90/08/21
DZ21
二相插座
个
0.6
300
90/08/26
DZ22
二相插头
个
0.5
300
90/08/26
DZ01
多用插座
个
1.9
700
90/06/18
DXT1
铜电线0.5mm
米
2
1000
90/08/13
DXT1
铜电线1.0mm
米
3.75
2000
90/08/13
DXT9
同轴电缆
米
8
600
90/08/13
DXT8
铜丝
圈
10
300
89/08/16
⑸物资入库(Input)(假定一张入库单只有一种物资入库)
入库单编号
入库日期
物资编号
入库数量
采购员编号
验收员编号
InCode
InDate
GoodsCode
Quantity
Purcher
GetPeople
90080301
03-AUG-90
WJM2
100
16
24
90081101
11-AUG-90
DZ01
500
14
24
90081501
15-AUG-90
DXT9
500
14
25
90082501
25-AUG-90
WGQ3
400
15
25
⑹提货单(OutHead)(假定一张提货单可提多项物资)
提货单编号
提货日期
顾客编号
总金额
推销员编号
发货员编号
OutCode
OutDate
CustCode
Total
SalesMan
Shipper
90080801
08-AUG-90
C001
1900
25
19
90081301
13-AUG-90
C002
4800
24
20
90082101
21-AUG-90
C003
325
24
21
90082601
26-AUG-90
C004
1355
25
22
⑺提货项目(OutItem)
提货单编号
物资编号
数量
实际价格
OutCode
GoodsCode
Quantity
ActualPrice
90080801
WJM1
100
9
90080801
WJM3
50
15
90080801
WGQ1
50
5
90081301
WGQ2
50
4
90081301
DXT1
500
2
90081301
DXT2
500
4
90081301
DXT9
200
8
90082101
DZ31
100
.8
90082101
DZ32
100
.6
90082101
DZ21
100
1.85
90082601
WGL1
50
7
90082601
WGQ3
100
2.9
90082601
DZ21
100
.6
90082601
DZ22
100
.5
90082601
WJM2
50
12.1
一、 数据查询
查询就是从数据库中提取数据,它与检索具有相同的含义,是最为普通的一种数据库操作。本节详细描述用来查询数据库中信息的命令——SELECT命令。用SELECT命令可以:
* 选择查询的表
* 选择表中的列
* 选择表中的行
* 控制行的显示顺序
* 分组统计
* 从多个表中检索信息
* 选择组
(一) 选择表中的列
在ORACLE数据库中,数据是按表的形式组织的,所以在查询语句中必须规定数据取自的那个表。最简单的查询语句有如下的形式:
SELECT 希望检索的列名
FROM 包含上述列的表名;
1、 选择表中若干列
在SELECT语句中可以规定表中所要显示的一列或若干列。
例1:显示department表中的deptcode列、deptname列和address列
SELECT deptcode,deptname,address
FROM department;
结果为:
P00
财经五金批发公司
公司大楼303室
P10
财务处
公司大楼103室
P11
财务处计划科
公司大楼102室
P12
财务处记帐科
公司大楼201室
P13
财务处报销科
公司大楼101室
P20
供应处
公司大楼203室
P30
销售处
公司大楼204室
P31
销售研究中心
公司大楼202室
P40
仓库管理处
公司仓库办公室
P50
运输管理处
公司车库办公室
2、 选择表中所有的列
若要显示表中所有的列,可以在SELECT命令中写出每列的名字,但对一个列很多的表来说,输入所有的列名是件很麻烦的事。有一个简单的方法,用输入一个星号(*)来代替全体列名清单,就可显示表的所有列。
例2:显示department表的所有列
SELECT * FROM department;
结果为:
P00
财经五金批发公司
公司大楼303室
1
303
P10
财务处
公司大楼103室
3
103
P00
P11
财务处计划科
公司大楼102室
4
102
P10
P12
财务处记帐科
公司大楼201室
6
201
P10
P13
财务处报销科
公司大楼101室
9
101
P10
P20
供应处
公司大楼203室
12
203
P00
P30
销售处
公司大楼204室
17
204
P00
P31
销售研究中心
公司大楼202室
202
P30
P30
P40
仓库管理处
公司仓库办公室
23
400
P00
P50
运输管理处
公司车库办公室
26
500
P00
3、 控制列的显示顺序
列的显示顺序是由SELECT命令中的列名的顺序决定的,与表中定义时各列的顺序无关。例如,如果输入SELECT deptcode,deptname FROM department,则deptcode列显示在第一列,deptname列显示在第二列;而如果输入SELECT deptname,deptcode FROM department,则deptname列显示在第一列,deptcode列显示在第二列。
当使用星号(*)来选择表中所有列时,列的显示顺序是按建表时的顺序。若要使显示顺序与规定的顺序不同,则必须依次地输入所有的列名,而不能使用星号(*)。
4、 使用表达式列:
在SELECT语句中,不仅可以规定希望显示的列,还可以显示表达式。 最简单的表达式是常量。
例3:显示当前的系统日期
SELECT sysdate FROM dual;
在这儿,sysdate是系统日期,dual是亚表。
例4:显示每一种库存物资目前所占用的库存资金。
SELECT goodsname,planprice*stock
FROM inventory;
例5:在查询结果中增加字符常量来解释查询的内容。
SELECT deptname,'的地址是:',address
FROM department;
财经五金批发公司
的地址是:
公司大楼303室
财务处
的地址是:
公司大楼103室
财务处计划科
的地址是:
公司大楼102室
财务处记帐科
的地址是:
公司大楼201室
财务处报销科
的地址是:
公司大楼101室
供应处
的地址是:
公司大楼203室
销售处
的地址是:
公司大楼204室
销售研究中心
的地址是:
公司大楼202室
仓库管理处
的地址是:
公司仓库办公室
运输管理处
的地址是:
公司车库办公室
5、 使用列的别名
当显示查询结果时,通常SQL*Plus用选出来的列名作为列标题显示。可是这些列名有时很短,并且含义模糊不清。我们可以通过列名后输入一个别名的方法,来改变查询结果中的列标题。
例6: 在显示列名时采用别名(在select子句中采用别名)
SELECT deptcode ,deptname department_name
FROM department;
在引用冗长的、难理解的表达式和函数时,别名对于结果的显示尤其有用。
例7:对于表达式Planpcice*stock,采用stock_money作为标题
SELECT goodsname,planprice*stock stock_money
FROM inventory;
(二) 选择表中的行
若想查询表中的某些行(这是经常发生的,因为用户常常只是关心与之有关的数据),可以在SELECT语句中使用WHERE子句给出查询的条件。WHERE子句必须跟在FROM子句后面,形式如下: