SQL语言
SQL(发音为seque)的原意的结构化的查询语言,但实际上它已远远超出经查询的范围,SQL语言实际上是对数据库中数据进行操作的语言,它包括了前面提到过的数据插入、数据删除、数据修改、数据定义和数据控制。说到底,影响数据库的一切操作都可由SQL语言来完成。
SQL是IBM在70年代开发的关系数据库原型System R的一部分,它被关系数据库管理系统的早期商品化软件(如ORACLE等)所采用。80年代初,美国国家标准委员会(ANSI)开始为SQL制定标准,最早的ANSI标准在1986年完成。目前的SQL标准是1992年由国际标准化组织制定有,些版本通常被称为SQL2。
SQL语言仍在继续发展,SQL3正在开发之中,它包括了面向对象的功能。
一、一个样本例子
在本节中,我们将以长城五金批发公司的仓库计算机管理系统为例,逐步介绍SQL语言的使用。
该公司有五个部门(处),它们分别是财务处、供应处、销售处、仓库管理处以及运输处。财务处由三个科组成,它们分别是财务计划科、记帐核算科和日常报帐科。公司的主要业务是从不同的生产制造厂家进货入库,然后再从公司的仓库把货物销售(批发)给有关的客户(零售商店)。货物入库要填写入库验收单,货物销售给客户需要先开发票,仓库再根据提货联发货。
整个系统用下面的七个表存贮了属于公司档案性质的数据以及各种物资的当前库存和物资的出库/入库信息:
⑴本公司各部门(department) 编号 deptcode P00 P10 P11 P12 P13 P20 P30 P31 P40 P50 编号 peopcode 1 2 3 4 5 6 7 名称 deptname 长城五金批发公司 财务处 财务处计划科 财务处记帐科 财务处报销科 供应处 销售处 销售研究中心 仓库管理处 运输管理处 姓名 peopname 李铭棠 周曙 周金海 陈宝娟 陈虹 顾为民 叶铭 地址 address 公司大楼103室 公司大楼303室 公司大楼102室 公司大楼201室 公司大楼101室 公司大楼203室 公司大楼204室 公司大楼202室 公司仓库办公室 公司车库办公室 工作日期 workdate 80/10/01 62/10/20 81/10/20 85/07/12 86/07/19 84/06/11 86/02/08 负责人 manager 1 3 4 6 9 12 17 23 26 职业 job 经理 办事员 处长 科长 计划员 科长 记帐员 电话 telephone 303 103 102 201 101 203 204 202 400 500 所属部门 higher P00 P10 P10 P10 P00 P00 P30 P00 P00 奖金 award 所在部门 deptcode P00 P00 P10 P11 P11 P12 P12 ⑵本公司职工(people)
性别 出生日期 sex birthday 男 40/04/25 女 62/07/15 男 45/08/21 女 51/06/17 女 57/05/10 男 55/10/01 女 60/08/08 工资 salary 200 157 170 150 120 160 120 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 编号 unitcode M001 M002 M003 M004 C001 C002 C003 C004 陈玉妹 郑文华 张明君 罗四明 沈晓华 吴志红 姚志邦 张浩 林光华 赵汉雄 史玲娟 王晨 姚国平 张宗恒 曹向群 王英泉 胡贤明 林芳兵 黄伯尧 沈妙玉 黄金宝 徐雪飞 女 男 女 女 男 女 男 男 男 男 女 男 男 男 男 男 男 女 男 女 男 男 62/02/11 56/06/20 59/11/10 58/12/30 53/09/28 61/05/12 50/01/20 49/02/18 47/04/11 45/05/13 63/08/27 52/06/05 57/09/14 46/07/07 55/12/16 35/12/02 61/11/29 58/04/06 50/10/18 57/04/20 56/08/22 60/09/10 88/05/06 85/04/22 85/11/16 85/04/22 82/12/15 86/09/17 81/08/23 83/05/06 88/04/10 83/02/18 87/11/14 82/01/05 82/04/07 88/04/10 88/04/10 81/09/25 83/12/26 88/04/10 85/08/23 81/08/05 81/08/21 88/04/10 记帐员 科长 报销员 报销员 处长 办事员 采购员 采购员 采购员 处长 办事员 推销员 推销员 推销员 推销员 处长 仓库管理员 仓库管理员 处长 小车驾驶员 卡车驾驶员 卡车驾驶员 电话 telephone 657368 9367543 351928 493946 296377 110 150 125 110 180 125 150 140 110 170 120 150 150 110 110 210 150 110 180 180 170 120 30 10 20 30 30 40 40 20 50 70 信誉 credit A B A C A C P12 P13 P13 P13 P20 P20 P20 P20 P20 P30 P30 P30 P30 P30 P30 P40 P40 P40 P50 P50 P50 P50 ⑶有业务联系的单位(co_unit)
单位名称 unitname 西湖电线厂 上海电器厂 南京工具厂 杭州标准件厂 国际百货大楼 湖光五金商店 保安电器商店 国际供销大厦 单位地址 address 天目山路89号 浦江路19号 南京路103号 秋涛路10号 延安路20号 环城西路33号 延安路80号 解放路93号 计量单位 measure 盆 盆 盆 把 把 把 把 把 只 个 个 联系人 relative 张涛 王群 张志强 王亚芳 陈可 黄燕红 李立 曹向东 传真 fax ⑷物资库存(inventory) 编号 goodscode WJM1 WJM2 WJM3 WGQ1 WGQ2 WGQ3 WGL1 WGL2 WG01 DZ31 DZ32 物资名称 goodsname 木螺丝4*10 木螺丝4*15 木螺丝4*20 大号起子 中号起子 小号起子 榔头0.25公斤 榔头0.5公斤 组合工具包 三相插座 三相插头 计划价格 planprice 10 12 15 5 4 3 7 5 50 0.8 0.6 当前库存量 stock 10 100 50 100 20 500 20 10 15 200 200 最近使用日期 lastupdate 90/08/08 90/08/26 90/08/08 90/08/08 90/08/13 90/08/26 90/08/26 89/02/23 90/07/15 90/08/21 90/08/21 DZ21 DZ22 DZ01 DXT1 DXT1 DXT9 DXT8 二相插座 二相插头 多用插座 铜电线0.5mm 铜电线1.0mm 同轴电缆 铜丝 个 个 个 米 米 米 圈 0.6 0.5 1.9 2 3.75 8 10 300 300 700 1000 2000 600 300 90/08/26 90/08/26 90/06/18 90/08/13 90/08/13 90/08/13 89/08/16 验收员编号 getpeople 24 24 25 25 ⑸物资入库(goodsinput)(假定一张入库单只有一种物资入库) 入库单编号 入库日期 物资编号 入库数量 采购员编号 inputcode inputdate goodscode quantity purcher 90080301 03-AUG-90 WJM2 100 16 90081101 11-AUG-90 DZ01 500 14 90081501 15-AUG-90 DXT9 500 14 90082501 25-AUG-90 WGQ3 400 15 ⑹提货单(out_head)(假定一张提货单可提多项物资) 提货单编号 提货日期 head_code out_date 90080801 08-AUG-90 90081301 13-AUG-90 90082101 21-AUG-90 90082601 26-AUG-90 ⑺提货项目(out_item) 提货单编号 head_code 90080801 90080801 90080801 90081301 90081301 90081301 90081301 90082101 90082101 90082101 90082601 90082601 90082601 90082601 90082601 物资编号 goodscode WJM1 WJM3 WGQ1 WGQ2 DXT1 DXT2 DXT9 DZ31 DZ32 DZ21 WGL1 WGQ3 DZ21 DZ22 WJM2 顾客编号 custcode C001 C002 C003 C004 总金额 total 1900 4800 325 1355 推销员编号 salesman 25 24 24 25 发货员编号 shipper 19 20 21 22 数量 quantity 100 50 50 50 500 500 200 100 100 100 50 100 100 100 50 实际价格 actualprice 9 15 5 4 2 4 8 .8 .6 1.85 7 2.9 .6 .5 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 P00 公司大楼103室 3 P11 财务处计划科 102 P10 公司大楼102室 4 P12 财务处记帐科 201 P10 公司大楼201室 6 P13 财务处报销科 101 P10 公司大楼101室 9 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子句后面,形式如下:
SELECT 要检索的列名 FROM 包含上述列的表名 WHERE 行所需要满足的条件;
带有WHERE子句的SELECT命令只显示那些满足查询条件的行,如果没有WHERE子句,则显示所有的行。
1.如何在WHERE子句中规定查询条件
WHERE子句中的查询条件常常是逻辑表达式,它是由逻辑运算符连接的一系列关系表达式(最简单的逻辑表达式只有一个关系表达式),最常见的关系表达式由三个参数组成,其形式
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库资料 SQL语言在线全文阅读。
相关推荐: