资源描述
第三某些 关系数据库原则语言SQL
一、 SQL概述
1.1 SQL概念:SQL(Structured Query Language)是构造化查询语言简称,它引领着关系数据库发展方向,是将来关系数据库发展原则。
1.2 SQL特点:
u 一体化
u 高度非过程化
u 非常简洁
u 直接以命令方式交互使用
1.3 SQL重要命令:
u 数据查询:SELECT
u 数据定义:CREATE、DROP、ALTER
u 数据操纵:INSERT、UPDATE、DELETE
二、 使用命令建立SQL查询
2.1查询概念:查询是从指定表或视图中提取满足条件记录,然后按照想得到输出类型定向输出查询成果。
2.2 SQL查询语句格式:
u SELECT :要查询数据(字段)
u FROM :数据来源(要查询数据来自哪个或哪些表)
u WHERE :查询需要满足条件
u GROUP BY :对查询数据进行分组
u ORDER BY :对查询成果进行排序
2.3 SQL简朴查询:
1. 在目前数据库目前表中查询某一数据
基本格式:SELECT Select_Item FROM Table
其中:Select_Item :字段名列表 Table :数据表名称
例题2.1:从职工关系中检索所有工资值。
实现语句:SELECT 工资 FROM 职工
2. 在指定数据库指定表中查询某一数据
基本格式:SELECT [Alias.]Select_Item FROM [DatabaseName!]Table
例题2.2:从订货管理数据库中职工数据表中检索所有工资值。
实现语句:SELECT 职工.工资 FROM 订货管理数据库!职工
3. 在目前数据库目前表中查询所有数据
基本格式:SELECT * FROM Table
例题2.3:从目前数据库中目前数据表中检索所有数据。
实现语句:SELECT * FROM 职工
4. 在目前数据库目前表中查询所有数据(不容许内容反复)
基本格式:SELECT [ALL | DISTINCT] Select_Item FROM Table
例题2.4:从目前数据库中目前数据表中检索所有不反复工资数据。
实现语句:SELECT DISTINCT 工资 FROM 职工
5. 在目前数据库目前表中进行条件查询
基本格式:SELECT Select_Item FROM Table WHERE JoinCondition
例题2.5:在目前数据库目前表中,查询工资不不不小于1210元职工仓库号
Select 仓库号 from 职工 where 工资>1210
实现语句:SELECT 仓库号 FROM 职工 WHERE 工资>1210
例题2.6:查询在仓库“WH1”或“WH2”工作,并且工资少于1250元职工工号
实现语句:SELECT 职工号 FROM 职工 WHERE 工资<1250 AND (仓库号=”WH1” OR 仓库号=”WH2”)
完整格式:
SELECT [ALL|DISTINCT] [Alias.]Select_Item |* FROM [DatabaseName!]Table [WHERE JoinCondition]
2.4 SQL联接查询:
联接查询含义:联接查询是一种基于多种关系查询,即将多种数据表中数据构成一种查询集合,并在其中查询出符合规定记录。
例题2.7:找出工资多于1230元职工号和她们所在都市。
实现语句:SELECT 职工号,都市 FROM 职工,仓库 WHERE 工资>1230 AND (职工.仓库号=仓库.仓库号)
特别注意:
u 职工.仓库号=仓库.仓库号 是连接条件
u 如果在FROM之后有两个关系,则这两个关系之间必然有一种联系,否则无法构成检索体现式
例题2.8:找出工作在面积不不不小于400仓库职工号以及这些职工工作所在都市。
实现语句:SELECT 职工号,都市 FROM 职工,仓库 WHERE 面积>400 AND (职工.仓库号=仓库.仓库号)
2.5 SQL嵌套查询:
例题2.9:哪些都市至少有一种仓库职工工资为1250元?
实现语句:SELECT 都市 FROM 仓库 WHERE 仓库号 in (SELECT 仓库号 FROM 职工 WHERE 工资=1250)
例题2.10:查询所有职工工资都多于1210元仓库信息。
实现语句:SELECT * FROM 仓库 WHERE 仓库号 NOT IN (SELECT 仓库号 FROM 职工 WHERE 工资<=1210)
例题2.11:找出和职工E4挣同样工资所有职工。
实现语句:SELECT 职工号 FROM 职工 WHERE 工资=(SELECT 工资 FROM 职工 WHERE 职工号=”E4”)
2.6 SQL几种特殊运算符:
u BETWEEN …AND :…和…之间
u LIKE:字符串匹配运算符
例题2.12:检索出工资在1220元到1240元范畴内职工信息。
实现语句:SELECT * FROM 职工 WHERE 工资 BETWEEN 1220 AND 1240
例题2.13:从供应商关系中检索出所有公司信息,不要工厂或其她供应商信息。
实现语句:SELECT * FROM 供应商 WHERE 供应商名 LIKE “%公司”
通配符:
u % :体现任意多种字符(含0个)
u _ :体现一种字符
2.7 SQL排序:
基本格式:ORDER BY Order_Iten [ASC|DESC] [,Order_Iten [ASC|DESC]…]
例题2.14:按职工工资值升序检索出所有职工信息。
实现语句:SELECT * FROM 职工 ORDER BY 工资
注意:默觉得升序
例题2.15:先按仓库号排序,再按工资排序并输出所有职工信息。
实现语句:SELECT * FROM 职工 ORDER BY 仓库号,工资
2.8 SQL计算查询:
1.用于检索函数:
COUNT()—计数 SUM()—求和 AVG()—计算平均值 MAX()—求最大值 MIN()—求最小值
2.例子:
例题2.16:找出供应商所在地数目。
实现语句:SELECT COUNT(DISTINCT 地址) FROM 供应商
例题2.17:求出供应商数据表中记录数目。
实现语句:SELECT COUNT(*) FROM 供应商
例题2.18:求支付工资总数。
实现语句:SELECT SUM(工资) FROM 职工
例题2.19:求北京和上海仓库职工工资总和。
实现语句:SELECT SUM(工资) FROM 职工 WHERE 仓库号 IN (SELECT 仓库号 FROM 仓库 WHERE 都市=”北京” OR 都市=”上海”)
例题2.20:求所有职工工资都多于1210元仓库平均面积。
实现语句:SELECT AVG(面积) FROM 仓库 WHERE 仓库号 NOT IN (SELECT 仓库号 FROM 职工 WHERE 工资<=1210)
例题2.21:求在WH2仓库工作职工最高工资值。
实现语句:SELECT MAX(工资) FROM 职工 WHERE 仓库号=”WH2”
2.9 SQL分组与计算查询:
基本格式:GROUP BY GroupColumn [,GroupColumn …]
例题2.22:求每个仓库职工平均工资。
实现语句:SELECT 仓库号,AVG(工资) FROM 职工 GROUP BY 仓库号
2.10 SQL几种特殊选项:
1. 将查询成果存储到数组中:
语句格式:INTO ARRAY ArrayName
例题:将查询到职工放到数组TEMP中。 SELECT * FROM 职工 INTO ARRAY temp
2. 将查询成果存储到临时文献中
语句格式:INTO CURSOR CursorName
临时文献是一只读DBF文献,可以像一般DBF文献同样使用,但只读。当关闭该文献时该文献会自动删除。
例题:将查询到职工放到DBF文献TEMP中。 SELECT * FROM 职工 INTO CURSOR temp
3. 将查询成果存储到永久表中
语句格式:INTO DBF|TABLE TableName
例题:将查询到职工放到DBF文献TEMP中。 SELECT * FROM 职工 INTO DBF temp
4. 将查询成果存储到文本文献中
语句格式:TO FILE FileName
例题:将查询到职工放到文本文献TEMP中。 SELECT * FROM 职工 TO FILE temp
5. 将查询成果直接输出到打印机中
语句格式:TO PRINT [PROMPT]
例题:SELECT * FROM 职工 TO PRINT
三、 运用查询设计器查询
3.1 查询设计器:
1. 建立查询措施:
u 使用“项目管理器”建立查询;
u 使用“新建”对话框建立查询;
u 使用命令CREATE QUERY命令建立查询;
u 通过直接编辑.qpr文献建立。
2. 查询设计器:
u 字段:选用需要显示字段;
u 联接:编辑联接条件;
u 筛选:指定查询条件;
u 排序根据:用于指定排序字段;
u 分组根据:用于分组;
u 杂项:指定与否要反复记录及列在前面记录,与DISTINCT及TOP相应。
3.2 查询设计器局限性:运用查询设计器不可以设计出所有查询,如:嵌套查询、查询去向到数组等。
3.3 运营查询:
1.查询运营措施:
u 使用“项目管理器”运营;
u 使用命令运营:
格式:DO QueryFile
注意:使用命令运营查询时,必要给出查询文献扩展名qpr,如:DO abc.qpr
如果不给出扩展名(DO abc),VFP将把命令解释为 DO abc.prg,即执行程序文献。
2.查询去向:
u 浏览:在“浏览(BROWSE)”窗口显示;
u 临时表:命名临时文献;
u 表:命名表;
u 图形:记录图;
u 屏幕:屏幕直接输出(类似LIST);
u 报表:报表文献.frx
u 标签:标签文献.lbx
四、 数据表记录SQL操作:
4.1 插入:
原则格式:INSERT INTO dbf_name[(fname1[,fname2,…])] VALUES(eExoression1[,eExoression2,…])
VFP特殊格式:INSERT INTO dbf_name FROM ARRAY ArrayName|FROM MEMVAR
例题4.1:往订购单关系中插入元组(”E7”,”S4”,”OR01”,/05/25)。
实现语句:INSERT INTO 订购单 VALUE(”E7”,”S4”,”OR01”,{^-05-25})
例题4.2:往订购单关系中插入元组(”E7”,”OR01”)。
实现语句:INSERT INTO 订购单(职工号,订购单号) VALUE(”E7”,”OR01”)
注意:
u 用INSERT命令在数据表中插入数据时,该数据表事先可以不必打开;
u 当数据表设立了“主索引”或“候选索引”时,不能用此前INSERT与APPEND来添加记录,只能使用INSERT INTO添加。(实际有出入)
4.2 更新:
格式:
UPDATE TableName SET Column_Name1=eExoression1[,Column_Name2=eExoression2…] [WHERE Condition]
例题3.4:给WH1仓库职工提高10%工资。
实现语句:UPDATE 职工SET 工资=工资+工资*0.1 WHERE 仓库号=”WH1”
等价语句:replace工资 with工资*1.1 for仓库号=”WH1”
4.3 删除:
格式:DELETE FROM TableName [WHERE Condition]
例题3.5:删除仓库关系中仓库号值是WH2元组。
实现语句:DELETE FROM 仓库 WHERE 仓库号=”WH2”
注意:在VFP中,SQL DELETE命令同样是逻辑删除,如果要物理删除记录同样需要使用PACK命令。
五、 数据表构造SQL操作:
5.1 表定义:
1.建立数据表简朴操作
基本格式:CREATE TABLE|DBF TableName [Name LongTableName] | [FREE]
(FieldName1 FieldType[(nFieldWidth[,nPrecision])]…)
其中:TableName:新建数据表表名称
FieldName :字段名
FieldType :用字母体现字段类型
NFieldWidth:字段总宽度
NPrecision:小数位数
FREE:建立自由表
例题5.1:用SQL命令建立“订货管理1”数据库,然后建立“仓库1”数据表。
实现语句:CREATE DATABASE 订货管理1
CREATE TABLE 仓库1 (仓库号 C(5),都市 C(10),面积 I)
2.数据表字段有效性设立措施
基本格式:CREATE TABLE|DBF TableName1 [Name LongTableName] [FREE]
(FieldName1 FieldType[(nFieldWidth[,nPrecision])]
[CHECK lExpression [ERROR cMessageText1]] …)
例题5.2:用SQL命令建立“订货管理1”数据库,然后建立“仓库1”数据表,并定义面积字段有效性规则为[面积必要不不不小于0]。
实现语句:CREATE DATABASE 订货管理1
CREATE TABLE 仓库1 (仓库号 C(5),都市 C(10),面积 I ;
CHECK(面积>0) ERROR “面积必要不不不小于0”)
3.数据表字段默认值设立措施
基本格式:CREATE TABLE|DBF TableName1 [Name LongTableName] [FREE]
(FieldName1 FieldType[(nFieldWidth[,nPrecision])]
[DEFAULT eExpression] …)
例题5.3:建立数据表“仓库1”,并将“仓库1”数据表“面积”字段默认值设立为200。
实现语句:CREATE TABLE 仓库1(仓库号 C(5),都市 C(10),面积 I DEFAULT 200)
4.数据表字段主核心字或候选索引设立措施
基本格式:CREATE TABLE|DBF TableName1 [Name LongTableName] [FREE]
(FieldName1 FieldType[(nFieldWidth[,nPrecision])]
[PRIMARY KEY | UNIQUE] …) 注意:UNIQUE在此处是候选索引
例题5.4:建立数据表“仓库1”,并将“仓库号”字段设立为主核心字。
实现语句:CREATE TABLE 仓库1(仓库号 C(5) PRIMARY KEY,都市 C(10),面积 I)
5.2 表删除:
基本格式:DROP TABLE | DBF TableName
例题5.5:删除数据表“仓库1”。
实现语句:DROP TABLE 仓库1
5.3 表构造修改:
1.添加新字段、修改已有字段并设立字段级有关规则:
基本格式:
ALTER TABLE TableName ADD | ALTER [COLUMN] FieldName FieldType[(nFieldWidth[,nPrecision])]
[NULL | NOT NULL] &&字段与否容许为空
[CHECK lExpression [ERROR cMessageText]] &&设立字段有效性规则
[DEFAULT eExpression] &&设立字段有效性规则
[PRIMARY KEY | UNIQUE] &&设立字段索引类型
例题5.6:为订购单1表增长一种货币类型总金额字段。
实现语句:ALTER TABLE 订购单1 ADD 总金额 Y CHECK 总金额>0 ERROR “总金额应当不不不小于0”
例题5.7:将订购单1表订购单号字段宽度由本来5改为6。
实现语句:ALTER TABLE 订购单1 ALTER 订购单号 C(6)
2.定义、修改、删除字段级有效性规则和默认值定义:
基本格式:
ALTER TABLE TableName ALTER [COLUMN] FieldName NULL | NOT NULL &&字段与否容许为空
ALTER TABLE TableName ALTER [COLUMN] FieldName SET CHECK lExpression [ERROR cMessageText]
&&设立字段有效性规则
ALTER TABLE TableName ALTER [COLUMN] FieldName DROP CHECK &&删除字段有效性规则
ALTER TABLE TableName ALTER [COLUMN] FieldName SET DEFAULT eExpression
&&设立字段默认值
ALTER TABLE TableName ALTER [COLUMN] FieldName DROP DEFAULT &&删除字段默认值
例题5.8:修改(定义)总金额字段有效性规则。
实现语句:ALTER TABLE 订购单1 ALTER 总金额 SET CHECK 总金额>100 ERROR “总金额应当不不不小于100”
例题5.9:删除总金额字段有效性规则。
实现语句:ALTER TABLE 订购单1 ALTER 总金额 DROP CHECK
3.删除字段、修改字段名,定义、修改、删除表一级有效性规则:
基本格式:
ALTER TABLE TableName DROP [COLUMN] FieldName &&删除字段
ALTER TABLE TableName RENAME [COLUMN] FieldName1 TO FieldName2 &&修改字段名
ALTER TABLE TableName SET CHECK lExpression [ERROR cMessageText] &&设立表有效性规则
ALTER TABLE TableName DROP CHECK &&删除表有效性规则
例题5.10:将订购单1表总金额字段名改为金额。
实现语句:ALTER TABLE 订购单1 RENAME 总金额 TO金额
例题5.11:删除订购单1金额字段。
实现语句:ALTER TABLE 订购单1 DROP 金额
六、 视图:
6.1 视图命令操作:
1.视图定义格式:
格式:CREATE VIEW ViewName AS SelectStatement
其中:SelectStatement :查询语句,用于限定视图中数据
2.从单个表派生出视图:构成视图内容来源于单个表。
例题6.1:运用“职工”数据表,建立涉及职工号与仓库号视图。
实现语句:CREATE VIEW ew AS SELECT 职工号,仓库号 FROM 职工
注:视图一旦定义,就可以和基本表同样进行多种查询与修改。
3.从多种表派生出视图:
例题6.2:运用“职工”和“仓库”数据表,建立涉及职工号、仓库号、都市、面积、工资视图。
实现语句:CREATE VIEW ew AS;
SELECT 职工号,职工.仓库号,都市,面积,工资 FROM 职工,仓库 WHERE 仓库.仓库号=职工.仓库号
注:视图一旦定义,就可以和基本表同样进行多种查询与修改。
4.删除视图:
基本格式:DROP VIEW ViewName
例题6.3:删除视图ew。
实现语句:DROP VIEW dw
5.有关视图阐明:
u 视图可以更新;
u 视图不含真正数据,仅是原表一种窗口;
u 在视图中可以进行查询操作,但视图插入、更新操作有一定限制;
u 如果一种视图来源于单个表,则可以进行插入与更新操作,不能进行删除操作;
u 如果一种视图来源于多种表,则插入、更新与删除操作都不能进行。
u 可以从一种表或多种有关联表中提取有用信息;
u 可以用来更新表,并将成果永久保存在磁盘上;
u 只有在涉及视图数据库打开时,才干使用视图。
6.2 建立视图:
1.建立视图措施:
u 使用“项目管理器”建立视图;
u 使用“新建”对话框建立视图;
u 使用命令CREATE VIEW命令打开视图设计器建立视图;
u 通过直接使用命令CREATE VIEW … AS … 建立。
2.视图设计器与查询设计器区别:
u 视图建立后直接保存在数据库中,在磁盘上没有相应文献,查询要形成.qpr文献;
u 视图可以更新,查询不能更新(除非重新查询);
u 查询有“查询去向”,视图没有。
6.3 视图分类:
u 本地视图:使用目前数据库中表建立视图。
u 远程视图:使用非目前数据库中表建立视图。
展开阅读全文