资源描述
数据库管理系统中的SQL语言
SQL的9条核心命令动词:
SELECT数据查询
CREATE/DROP/ALTER数据定义
INSERT/UPDATE/DELETE数据操纵
GRANT/REVOKE数据控制
数据库的定义
SQL的作法:CREATE DATABASE 〈数据库文献名〉
VFP的作法:无直接创建数据库的SQL命令
数据库的管理
1、显示数据库信息
SP-HELPDB数据库名]
2、配置数据库
SP_DBOPTION['数据库名']选项名']值,]
3、重新命名
SP_RENAMEDB'原名',新名'
4、删除数据库
DROP DATABASE数据库名
数据表的定义
在SQL Server 202和 Visual FoxPi中都可以使用SQL语言定、操作管理和删除数据表
SQL基本表作法:CREATE TABLE数据库名,所有者,亦表名〉
VFP基本表作法:CREATE TABLE|DBF〈表名〉[FREE](〈字段名1>〈类型>(<长度〉[,<小数位数>])
数据表的管理
1、查看表的结构
SQL 作法:SP_HELP[[@OBJNAME=]NAME]
2、修改表结构
SQL 作法:ALTER TABALE 表名
ADD |ALTER COLUMN | DROP COLUMN 〈字段名 1> 类型[(长度)]]
[NULL] [ NOT NULL]
VFP 作法:ALTER TABALE 表名
ADD |ALTER [COLUMN ]<字段名1>〈类型>(<长度〉[,< 小数位数>]
[ NULL] [ NOT NULL]
3、表的删除
SQL作法和VFP作法相同
DROP TABALE〈表名〉
4、数据的插入
SQL 作法:INSERT [INTO 〈表名 > [(列名)]VALUES (表达式)
VFP 作法:INSERT INTO 〈表名〉(〈字段名 1 >[,< 字段名 2>]...) VALUES (〈表达式 1 >,< 表达式 2>]...)
5、数据的更新
SQL 作法:UPDATE 〈表名〉SET 列名= < 表达式 | DEFAULT | NULL > [..]
[WHERE 〈条件〉]
VFP作法:UPDATE库名!]〈表名〉SET字段=<表达式〉[,…]
[WHERE <条件>]
6、数据的删除
SQL 作法:DELETE [FROM] < 表名〉[WHERE 〈条件 >]
VFP 作法:DELETE FROM〈表名〉[WHERE 〈条件〉]
索引的建立与删除
索引的创建
SQL 作法:CAEATE [UNIQUE] [ CLUSTERED] INDEX 〈索引名〉ON 〈表名〉
VFP作法:无创建索引的SQL语句
索引的删除
SQL 作法:DROP INDEX 〈表名〉.〈索引名〉[,...]
VFP作法:无
视图的定义与删除
定义视图
SQL 作法:CREATE VIEW〈视图名〉[列名 1,列名 2[,...])]
[WITH ENCRYRTION]
AS查询语句
[WITH CHECK OPTION]
VFP作法:CREATE VIEW 〈视图名〉[列名[列名…])]AS任意SELECT语句
视图的删除
SQL 作法:DROP VIEW 〈视图名〉[,...]
VFP作法:DROP VIEW〈视图名〉
SQL语言的数据查询功能
SQL中SELECT作法:SELECT [ALL | DISTINCT^表名.列名表达式|表名.]*> [ AS列标题][,]
FROM 〈表名或视图名〉[,...]
[WHERE 〈条件表达式>]
VFP 中 SELECT 作法:SELECT [ALL | DISTINC别名.]< 字段表达式〉[AS 列名][,]
FROM [库名!]〈表名或视图名〉[[AS本地别名]
简朴查询
1、查询单表所有字段
SQL作法和VFP作法相同
SELECT * FROM 表名
2、查询数据表的指定列
EG:
在QL Server 202中查找表STUDENT1中XH、XM、CJ三列的所有行,并将CJ列用“成绩”标题表达
SQL 作法:SELECT XH、XM、CJ AS 成绩 FROM STUDENT1
在Visual FoxPro,查询课程KC的KM、XF字段的所有记录,并将KM字段用“课程名”表达
VFP 作法:SELECT KM AS 课程名,XF FROM KC
3、使用列表达式查询
EG:
在QL Server 202中,查询表STUDENT1中XM列及4门课程的平均成绩,并且查询每人的出生年份
SQL 作法:SELECT XM ,ROUND (CJ4,1) AS 平均成绩,YEAR (GETDATE ())-NL 出生年份 FROM STUDENT1
在Visual FoxPi中,查询课程表KC的KH、KM、XF的所有记录,并将XF字段值加1用“总学分”表达
VFP 作法:SELECT KH、KM、XF+1 AS 总学分 FROM KC
4、不输出反复行的查询
EG:
在QL Server 202中,查询表STUDENT1所有行的XB和NL列值,再查询不符合反复行的情况
SQL 作法:SELECT XB,NL FROM STUDENT1
在Visual FoxPro,查询课程表KC的XF字段的所有记录,不显示反复记录
VFP 作法:SELECT DISTINCT XF FROM KC
5、查询结果排序输出
EG:
在QL Server 202中,查询表STUDENT1时规定先按年龄由小到大,再按总平均成绩由大到小显示学生信息
SQL 作法:SELECT * FROM STUDENT1 ORDER BY NL,CJ/ DESC
在Visual FoxPro,查询课程表KC中XF按降序排列,KH按升序排列后的的结果
VFP 作法:SELECT * FROM KC ORDER BY XF DESC,KH
6、只输出部分行的查询
EG:
在QL Server 202中,查询表STUDENT1时规定先按年龄由小到大排序后显示前3条学生信息,或显示前60%记录
SQL 作法:SELECT TOP * 3 FROM STUDENT1 ORDER BY NL
SELECT TOP 60 PERCENT * FROM STUDENT1 ORDER BY NL
在Visual FoxPr中,只显示KC表排序后的70%的记录,再显示前3条记录
VFP 作法:SELECT * FROM KC ORDER BY XF DESC TOP 70 PERCENT
SELECT * FROM KC ORDER BY XF DESC TOP 3
7、满足逻辑条件的查询
EG:
在QL Server 202中,查询表STUDENT1中总成绩大于等于3分的男学生
SQL 作法:SELECT *
FROM STUDENT1 WHERE CJ>=3 AND XB= 男'
在Visual FoxPro,查询课程表KC中XF字段值不为5的所有记录
VFP 作法:SELECT * FROM KC WHERE XF!=5
8、查询具有空值NULL的记录
语法格式:IS NULL / IS NOT NULL
EG:
在QL Server 202中,查询表STUDENT1中性别XB为空的行
SQL作法和VFP作法相同:
SELECT * FROM STUDENT1 WHERE XB IS NULL
9、控制输出方向
EG:
在QL Server 202中,查询表STUDENT1中只有女生数据的子集作为查询结果备份
SQL 作法:SELECT * INTO STUDENT_A FROM STUDENT1 WHERE XB='女'
在Visual FoxPro,查询KC表所有字段的所有记录,并用打印机方式输出
VFP 作法:SELECT * FROM KC TO PRINTER
10、使用记录(聚合)函数查询
EG:
在QL Server 202中,在表STUDENT按NL平均值和CJ总分记录查询
SQL 作法:SELECT,记录,AS 类别,AVG (NL ) AS 平均年龄,SUM (CJ) AS 总分 FROM STUDENT1
在Visual FoxPro,记录KC表XF字段的最大值
VFP作法:SELECT,记录,AS类别,MAX (XF) AS 最高学分FROM KC
11、分组查询
EG:
在QL Server 202中,在表STUDENT1中记录NL值不同的学生人数
SQL 作法:SELECT '记录,AS 类别,NL AS 年龄,COUNT (XB ) AS 人数,AVG(CJ) AS总平均分 FROM STUDENT1 GROUP BY NL
在Visual FoxPr中,记录KC表中按XF的不同分组各门课程的数量
VFP 作法:SELECT,记录,AS 类别,XF AS学分,COUNT (KH)AS 课程数 FROM KC GROUP BY XF
12、带清单的记录查询
EG:
登记表STUDENT1中学生平均年龄总人数和总平均分
SELECT * FROM STUDENT1 COMPUTE AVG(NL), COUNT(XH), AVG(CJ)
13、模糊查询
EG:
在QL Server 202中,查询表STUDENT1中所有李姓的学生
SQL 作法:SELECT * FROM STUDENT1 WHERE XM LIKE '李%’
在Visual FoxPr中,显示KC表中KH数的第二位是2的所有课程记录
VFP 作法:SELECT * FROM KC WHERE KH LIKE ’ 一2_’
14、使用BETWEEN查询
语法格式:[NOT] BETWEEN 〈表达式1> ADN <表达式2>
EG:
在QL Server 202中,查询表STUDENT1中所有成绩在3~320的学生
SQL 作法:SELECT * FROM STUDENT1 WHERE CJ BETWEEN 3 AND 320 (求反,在 WHERE 前加 NOT)
在Visual FoxPr中,显示KC表中XF在3~5的记录
VFP 作法:SELECT * FROM WHERE XF BETWEEN 3 AND
15、使用IN查询
语法格式:[NOT] IN (表达式1,表达式2[,])
EG:
在QL Server 202中,查询表STUDENT1中年龄是20或18的学生
SQL 作法:SELECT * FROM STUDENT1 WHERE NL IN(20,18)
在Visual FoxPro,显示KC表中XF是3或5的记录
VFP 作法:SELECT * FROM KC WHERE XF IN ( 3,5)
高级查询
1、连接查询
SQL作法和VFP作法相同,具有两个命令格式
①SELECT〈列名表〉FROM 〈表1> [类型]JOIN〈表2>ON 〈表1.列>=〈表2.列〉
②ELECT〈列名表〉FROM〈表1,表2>WHERE 〈表1.列>=〈表2.列〉
2、嵌套查询
3、联合查询
语法格式:〈查询语句〉UNION [ALL] <查询语句〉[UNION [ALL]
EG:
在QL Server 202中,两个班级的学生表STUDENT1和STUDENT_A,将成绩大于等于350分的学生挑出来组参赛明星对
SQL 作法:SELECT XH,XM,XB,CJ FROM STUDENT1 WHERE CJ >=350
SELECT XH,XM,XB,CJ FROM STUDENT_A WHERE CJ >=350
在Visual FoxPi中,同时将JZG1和JZG2表的基本工资大于4的人显示输出
JBZG>4
VFP 作法:SELECT XM,ZC FROM JZG1 WHERE JBGZ> 4 UNION SELECT XM,ZC FROM JZG2 WHERE
展开阅读全文