数据库管理系统中的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 2000和Visual FoxPro中都可以使用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 | DISTINCT] [别名.]<字段表达式>[ AS 列名][,…]FROM [库名!] <表名或视图名>[ [AS] 本地别名]简单查询1、查询单表所有字段SQL作法和VFP作法相同SELECT *FROM 表名2、查询数据表的指定列EG:在QL Server 2000中查找表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 KC3、使用列表达式查询EG:在QL Server 2000中,查询表STUDENT1中XM列及4门课程的平均成绩,并且查询每人的出生年份SQL作法:SELECT XM ,ROUND (CJ/4,1) AS 平均成绩, YEAR (GETDATE ())-NL AS 出生年份FROM STUDENT1在Visual FoxPro中,查询课程表KC的KH、KM、XF的全部记录,并将XF字段值加1用“总学分”表示VFP作法:SELECT KH、KM、XF+1 AS 总学分FROM KC4、不输出重复行的查询EG:在QL Server 2000中,查询表STUDENT1全部行的XB和NL列值,再查询不符合重复行的情况SQL作法:SELECT XB,NL FROM STUDENT1在Visual FoxPro中,查询课程表KC的XF字段的全部记录,不显示重复记录VFP作法:SELECT DISTINCT XF FROM KC5、查询结果排序输出EG:在QL Server 2000中,查询表STUDENT1时要求先按年龄由小到大,再按总平均成绩由大到小显示学生信息SQL作法:SELECT *FROM STUDENT1 ORDER BY NL,CJ/4 DESC在Visual FoxPro中,查询课程表KC中XF按降序排列,KH按升序排列后的的结果VFP作法:SELECT *FROM KC ORDER BY XF DESC,KH6、只输出部分行的查询EG:在QL Server 2000中,查询表STUDENT1时要求先按年龄由小到大排序后显示前3条学生信息,或显示前60%记录SQL作法:SELECT TOP *3 FROM STUDENT1 ORDER BY NLSELECT TOP 60 PERCENT *FROM STUDENT1 ORDER BY NL在Visual FoxPro中,只显示KC 表排序后的70%的记录,再显示前3条记录VFP作法:SELECT *FROM KC ORDER BY XF DESC TOP 70 PERCENTSELECT *FROM KC ORDER BY XF DESC TOP 37、满足逻辑条件的查询EG:在QL Server 2000中,查询表STUDENT1中总成绩大于等于300分的男学生SQL作法:SELECT *FROM STUDENT1 WHERE CJ>=300 AND XB='男'在Visual FoxPro中,查询课程表KC中XF字段值不为5的全部记录VFP作法:SELECT *FROM KC WHERE XF!=58、查询含有空值NULL的记录语法格式:IS NULL / IS NOT NULLEG:在QL Server 2000中,查询表STUDENT1中性别XB为空的行SQL作法和VFP作法相同:SELECT *FROM STUDENT1 WHERE XB IS NULL9、控制输出方向EG:在QL Server 2000中,查询表STUDENT1中只有女生数据的子集作为查询结果备份SQL作法:SELECT *INTO STUDENT_A FROM STUDENT1 WHERE XB='女'在Visual FoxPro中,查询KC表所有字段的全部记录,并用打印机方式输出VFP作法:SELECT *FROM KC TO PRINTER10、使用统计(聚合)函数查询EG:在QL Server 2000中,在表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 KC11、分组查询EG:在QL Server 2000中,在表STUDENT1中统计NL值不同的学生人数SQL作法:SELECT '统计'AS 类别,NL AS 年龄, COUNT(XB)AS 人数,AVG(CJ) AS 总平均分FROM STUDENT1 GROUP BY NL 在Visual FoxPro中,统计KC表中按XF的不同分组各门课程的数量VFP作法:SELECT '统计'AS 类别, XF AS 学分, COUNT(KH)AS 课程数FROM KC GROUP BY XF12、带清单的统计查询EG:统计表STUDENT1中学生平均年龄总人数和总平均分SELECT *FROM STUDENT1 COMPUTE AVG(NL), COUNT(XH), AVG(CJ)13、模糊查询EG:在QL Server 2000中,查询表STUDENT1中所有李姓的学生SQL作法:SELECT *FROM STUDENT1 WHERE XM LIKE '李%'在Visual FoxPro中,显示KC表中KH数的第二位是2的所有课程记录VFP作法:SELECT *FROM KC WHERE KH LIKE '_2_'14、使用BETWEEN查询语法格式:[NOT] BETWEEN <表达式1>ADN<表达式2>EG:在QL Server 2000中,查询表STUDENT1中所有成绩在300~320的学生SQL作法:SELECT *FROM STUDENT1 WHERE CJ BETWEEN 300 AND 320(求反,在WHERE前加NOT)在Visual FoxPro中,显示KC表中XF在3~5的记录VFP作法:SELECT *FROM WHERE XF BETWEEN 3 AND15、使用IN查询语法格式:[NOT] IN(表达式1,表达式2[,﹎])EG:在QL Server 2000中,查询表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 2000中,两个班级的学生表STUDENT1和STUDENT_A,将成绩大于等于350分的学生挑出来组参赛明星对SQL作法:SELECT XH,XM,XB,CJ FROM STUDENT1 WHERE CJ>=350SELECT XH,XM,XB,CJ FROM STUDENT_A WHERE CJ>=350在Visual FoxPro中,同时将JZG1和JZG2表的基本工资大于400的人显示输出VFP作法:SELECT XM,ZC FROM JZG1 WHERE JBGZ>400 UNION SELECT XM,ZC FROM JZG2 WHERE JBZG>400。