SQL语言 5.3.3 使用SQL语句查询表数据
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SELECT * FROM KCB INTO CURSOR TEMP
(4)使用INTO DBF|TABLE <文件名>将查询 结果存放到永久表中。 【例5.38】 查询课程表信息并将结果放 入永久表TEMP SELECT * FROM KCB INTO DBF TEMP
5.3.4
使用SQL语句更新表
结果如下图所示。
LIKE子句中可以用通配符:下划线“_”,表示任何 一个字符;百分号符“%”,表示一串字符。
【例5.21】 查询xkcjb中选修课程号为“001”的 SELECT * FROM ("001") xkcjb WHERE 课程号 IN
结果有3条记录,学号分别为“20050010”、 “20050020”和“20045643”。
(2)使用INTO ARRAY <数组名>将查询结果存放到数 组中。
【例5.36】 查询学生档案信息并将结果放入数组 TEMP
SELECT * FROM DAB INTO ARRAY TEMP (3)使用INTO CURSOR <文件名>将查询结果存放到临
【例5.37】 查询课程表信息并将结果放入临时表 TEMP
功能:通过指定的联接类型建立多表间的 联接。 注意:若SELECT后要查询的列名(字段名) 在2个表中都有,则必须采用“表名.字段 名”,若字段名唯一,则可仅写出字段名。
【例5.31】显示dab和xkcjb中成绩不及格的学生姓名、
SELECT dab.学号, 姓名,课程号,成绩 FROM xkcjb;
MIN(字段名)
求字段名所指定字段的最大值
求字段名所指定字段的最小值
【例5.24】 SELECT Sum_ 31 SUM(学分) FROM kcb
【例5.25】
SELECT Cnt 12 COUNT(*) FROM dab
【例5.26】
SELECT AVG(YEAR(DATE())-YEAR(出生日期)) FROM
Avg_exp_1
dab
19.33
【例5.27】 SELECT MAX(成绩) ,MIN(成绩) FROM Max_成绩 Min_ xkcjb
100.0
38.0
6) 将列名用含义更明确的别名输出,便于理解,可以通过 AS
格式: AS <列别名> 功能:将查询输出的列名以列别名输出。其中,列别名若为 常字串,则无须加定界符。
(3)使用嵌套查询实现多表间的联接查询 在SQL语言中,由SELECT、FROM、WHERE语句组 成一个查询块。嵌套查询就是将第2个查询块放在 第1个查询块的WHERE条件中,形成外层(第1个)查 询包含内层(第2个)查询的嵌套查询。 外层查询也称为主查询、父查询,内层查询也 称为下层查询、子查询。系统对嵌套查询的处理过 程是先做子查询,在子查询的基础上再做主查询。
联接类型
• 右联接(Right
Outer Join):与左联接正好
• 完全联接(Full
Join):无论2个表中的记录 是否满足联接条件,都将全部记录选入查询结
通常有3种方法实现多表联接查询,一是在查 询命令中显示地指定联接类型;二是在查询命令 中使用WHERE (1 格式:SELECT … FROM <表或视图> INNER|LEFT|RIGHT|FULL JOIN <表或视图> ON <联接条件> WHERE …
SELECT *
SELECT *
FROM
FROM
xkcjb WHERE 成绩 BETWEEN 70 AND 90
xkcjb WHERE 成绩>=70 AND 成绩<=90
结果如图所示。等价于:
【例5.20】 查询dab中所有姓“张”
SELECT * FROM
dab
WHERE 姓名 LIKE
"张%"
功能:在指定表末尾添加一条新记录。
【例5.39】向表dab INSERT INTO dab (学号,姓名,性别,出生日期,专 业班级); VALUES("20060002","张三","男",{^1987-1010},"计算机1班")
2)
UPDATE <表名> SET <字段名1>=<表达式l> [,<字段名2>=<表达式2>…
[WHERE <条件表达式> 功能:更新表中满足条件记录的字段值,即用< 表达式>的值替换对应的<字段名>的值。
【例5.40】将dab表中的姓名“张三”改为“李四”。
UPDATE dab SET 姓名="李四" WHERE 姓名="张三"
3)
DELETE FROM <表名> [WHERE <条件表达式>] 注意:SQL语句的删除记录语句是逻辑删除,如果 要物理删除记录需要继续使用PACK命令。
8)多表联接查询
SELECT语句可以实现对Visuaபைடு நூலகம் FoxPro 6.0 的4种联接类型的查询:
• 内部联接(Inner • 左联接(Left
Join):只有2个表的字段都 满足联接条件时,才将此记录选入查询结果中。 Outer Join):联接条件左边表中 的记录都包含在查询结果中,而右边表中的记录
5)带计算函数的查询 在SELECT语句中,使用SQL语言提供的一些查询计算 函数,可以增强查询功能。基本的查询计算函数的格式 及功能如下表所示。 函数的格式 COUNT(*) 函数功能 计算记录条数
SUM(字段名)
AVG(字段名)
求字段名所指定字段值的总和
求字段名所指定字段的平均值
MAX(字段名)
【例5.28】 SELECT MAX (成绩) AS 最高成绩,
MIN(成绩) AS 最低成绩 FROM
结果是: 最高成绩
xkcjb
100.0
38.0
7) 通过GROUP BY GROUP BY <分组字段名1>[,<分组字段名2>… [HAVING <过滤条件>
其中,<分组字段名>可以是表的字段名、字段函数名 或标识列的数值型表达式;[HAVING <过滤条件>]子句 注意:若只有HAVING子句而无GROUP BY子句,则 HAVING子句相当于WHERE子句。
【例5.41】逻辑删除表dab中姓名为“李四”的
DELETE FROM dab WHERE 姓名="李四" 结果如图所示。
本章小结
本章系统地介绍了VFP中关于建立视图与 数据查询以及使用嵌入到VFP中的SQL语言实现 数据库操作的内容,这些都是VFP的特色所在。 其中SQL语言尤其重要,在以后的程序设计过 程中可以通过使用SQL语言简化大量的程序代 码。学好这一章,是掌握VFP的关键,因此应 引起足够重视。
【例5.14】查询dab SELECT * FROM dab 结果如下图所示。其中“*”是通配符,表示所有
SELECT 学号,姓名,性别,出生日期,专业班级 FROM
dab
【例5.15】 查询dab中“姓名”、 “性别” SELECT 姓名,性别 FROM dab 结果将仅显示如图中的第2列、 第3列数据。
INNER JOIN dab ON dab.学号=xkcjb.学号; WHERE 成绩<60 结果如图所示。
(2)用WHERE子句实现多表间的联接查询 用WHERE子句实现多表间的联接查询时,无须直 接指明联接类型(隐含是内部联接),只需把联接 条件直接写入WHERE 【例5.32】用WHERE子句完成例5.31 SELECT dab.学号,姓名,课程号,成绩 FROM xkcjb,dab WHERE dab.学号=xkcjb.学号 AND 成绩 <60
4)排序查询 通过ORDER BY子句可以实现查询结果的排序输出,允
ORDER BY <排序选项1>[ASC|DESC][,< 排序选项2> [ASC|DESC]… 其中,ASC表示升序排序(缺省方式),DESC表示降 【例5.22】
SELECT * FROM
kcb
ORDER
BY
学分
【例5.23】 按学号升序,相同学号再按成绩降序查询出 SELECT * FROM xkcjb ORDER BY 学号,成绩 DESC
【例5.29】 SELECT 课程号,AVG(成绩) FROM xkcjb GROUP BY
【例5.30】求至少选修了2门课程的学生的信息。 SELECT dab.学号,姓名,课程号 FROM dab,xkcjb WHERE dab.学号=xkcjb. 学号; GROUP BY dab.学号 HAVING COUNT(*)>=2
使用SQL语句对表中记录进行操作,无须用USE 命令打开表,便可完成有关记录的插入、更新、 删除等相关操作。SQL语句与前面介绍的添加记录、 修改记录及删除记录命令相比较,在操作方式和 方法上有很大的不同。SQL语句在只对一条记录的 操作时要简捷得多,但对多条记录操作并不方便。
1)
格式:INSERT INTO<表名>(<字段名1>[,< 字段名2>…]) VALUES(<表达式l>[,<表达 式2>…])
运算符 =、>、<、>=、<=、 <> NOT、 AND、 OR LIKE BETWEEN AND IS NULL IN、NOT IN 成绩>=60
实例
成绩>=60 AND成绩<70 性别 LIKE "男" 成绩BETWEEN 60 AND 70 成绩 IS NULL
专 业 班 级 IN (“ 计 算 机 ” ,” 英 语”)
2) 唯一性查询指对于要显示的结果,若有重复出现时,则 只显示重复行中的一行。这可通过在基本SELECT语句中加入 DISTINCT关键字的方法实现。若不加此关键字,则显示全部
【例5.16】查询dab中“专业班级”字段,要求数据重
SELECT 专业班级 FROM dab DISTINCT
结果如图所示。
5.3 SQL语言
5.3.3 使用SQL语句查询表数据
5.3.3 使用SQL语句查询表数据
SQL语句最主要的功能是查询,即把数据表中的数据查 找出来,以便浏览和使用。SQL语句中查询表数据使用的是 SELECT语句。SELECT语句的基本形式分为3部分:查什么数 据、由哪儿查数据、查的条件是什么,即SELECT FROM WHERE。 1)基本的SELECT语句 格式:SELECT <字段名1>[,<字段名2>…]; FROM [数据库名称!]<表或视图> 功能:从指定表或视图中查询全部记录的指定字段值。
3) 在SELECT语句中,可以通过WHERE子句为查询规 定条件 WHERE WHERE <条件表达式1>[AND <条件表达式2>… 功能:查询指定表或视图中满足查询条件的记录。 其中<条件表达式>可以是关系表达式,也可以是逻 辑表达式,下表列出了组成<条件表达式>常用的运
运算符类别 关系运算符 逻辑运算符 字符串匹配运算符 范围运算符 空值运算符 集合运算符
【例5.17】 查询dab中的男生学号、姓名、性别。 SELECT 学号,姓名,性别 FROM ="男" dab WHERE 性别
【例5.18】 查询dab中计算机1 SELECT 姓名 FROM 计算机1班" 结果是: 【例5.19】 查询xkcjb中成绩在70~90 dab WHERE 性别="男" AND 专业班级="
在子查询中还可以再包含更下层的查询,从而 形成层嵌套查询。
【例5.33】查询成绩在90分及以上的学生姓名。 SELECT 姓名 FROM (SELECT 学号 FROM >=90) 结果是蜂雪燕和张伟。 dab WHERE 学号 IN WHERE 成绩
xkcjb
9)查询中的几个特殊选项 (1)使用TOP <数值表达式> PERCENT]短语显示部分 结果 【例5.34】显示学分较高的2 SELECT * TOP 2 FROM KCB ORDER BY 学分 DESC 注意:TOP短语要与ORDER BY短语同时使用才有效。 【例5.35】显示学分最低的20% SELECT * TOP 20 PERCENT FROM KCB ORDER BY 学 分
(4)使用INTO DBF|TABLE <文件名>将查询 结果存放到永久表中。 【例5.38】 查询课程表信息并将结果放 入永久表TEMP SELECT * FROM KCB INTO DBF TEMP
5.3.4
使用SQL语句更新表
结果如下图所示。
LIKE子句中可以用通配符:下划线“_”,表示任何 一个字符;百分号符“%”,表示一串字符。
【例5.21】 查询xkcjb中选修课程号为“001”的 SELECT * FROM ("001") xkcjb WHERE 课程号 IN
结果有3条记录,学号分别为“20050010”、 “20050020”和“20045643”。
(2)使用INTO ARRAY <数组名>将查询结果存放到数 组中。
【例5.36】 查询学生档案信息并将结果放入数组 TEMP
SELECT * FROM DAB INTO ARRAY TEMP (3)使用INTO CURSOR <文件名>将查询结果存放到临
【例5.37】 查询课程表信息并将结果放入临时表 TEMP
功能:通过指定的联接类型建立多表间的 联接。 注意:若SELECT后要查询的列名(字段名) 在2个表中都有,则必须采用“表名.字段 名”,若字段名唯一,则可仅写出字段名。
【例5.31】显示dab和xkcjb中成绩不及格的学生姓名、
SELECT dab.学号, 姓名,课程号,成绩 FROM xkcjb;
MIN(字段名)
求字段名所指定字段的最大值
求字段名所指定字段的最小值
【例5.24】 SELECT Sum_ 31 SUM(学分) FROM kcb
【例5.25】
SELECT Cnt 12 COUNT(*) FROM dab
【例5.26】
SELECT AVG(YEAR(DATE())-YEAR(出生日期)) FROM
Avg_exp_1
dab
19.33
【例5.27】 SELECT MAX(成绩) ,MIN(成绩) FROM Max_成绩 Min_ xkcjb
100.0
38.0
6) 将列名用含义更明确的别名输出,便于理解,可以通过 AS
格式: AS <列别名> 功能:将查询输出的列名以列别名输出。其中,列别名若为 常字串,则无须加定界符。
(3)使用嵌套查询实现多表间的联接查询 在SQL语言中,由SELECT、FROM、WHERE语句组 成一个查询块。嵌套查询就是将第2个查询块放在 第1个查询块的WHERE条件中,形成外层(第1个)查 询包含内层(第2个)查询的嵌套查询。 外层查询也称为主查询、父查询,内层查询也 称为下层查询、子查询。系统对嵌套查询的处理过 程是先做子查询,在子查询的基础上再做主查询。
联接类型
• 右联接(Right
Outer Join):与左联接正好
• 完全联接(Full
Join):无论2个表中的记录 是否满足联接条件,都将全部记录选入查询结
通常有3种方法实现多表联接查询,一是在查 询命令中显示地指定联接类型;二是在查询命令 中使用WHERE (1 格式:SELECT … FROM <表或视图> INNER|LEFT|RIGHT|FULL JOIN <表或视图> ON <联接条件> WHERE …
SELECT *
SELECT *
FROM
FROM
xkcjb WHERE 成绩 BETWEEN 70 AND 90
xkcjb WHERE 成绩>=70 AND 成绩<=90
结果如图所示。等价于:
【例5.20】 查询dab中所有姓“张”
SELECT * FROM
dab
WHERE 姓名 LIKE
"张%"
功能:在指定表末尾添加一条新记录。
【例5.39】向表dab INSERT INTO dab (学号,姓名,性别,出生日期,专 业班级); VALUES("20060002","张三","男",{^1987-1010},"计算机1班")
2)
UPDATE <表名> SET <字段名1>=<表达式l> [,<字段名2>=<表达式2>…
[WHERE <条件表达式> 功能:更新表中满足条件记录的字段值,即用< 表达式>的值替换对应的<字段名>的值。
【例5.40】将dab表中的姓名“张三”改为“李四”。
UPDATE dab SET 姓名="李四" WHERE 姓名="张三"
3)
DELETE FROM <表名> [WHERE <条件表达式>] 注意:SQL语句的删除记录语句是逻辑删除,如果 要物理删除记录需要继续使用PACK命令。
8)多表联接查询
SELECT语句可以实现对Visuaபைடு நூலகம் FoxPro 6.0 的4种联接类型的查询:
• 内部联接(Inner • 左联接(Left
Join):只有2个表的字段都 满足联接条件时,才将此记录选入查询结果中。 Outer Join):联接条件左边表中 的记录都包含在查询结果中,而右边表中的记录
5)带计算函数的查询 在SELECT语句中,使用SQL语言提供的一些查询计算 函数,可以增强查询功能。基本的查询计算函数的格式 及功能如下表所示。 函数的格式 COUNT(*) 函数功能 计算记录条数
SUM(字段名)
AVG(字段名)
求字段名所指定字段值的总和
求字段名所指定字段的平均值
MAX(字段名)
【例5.28】 SELECT MAX (成绩) AS 最高成绩,
MIN(成绩) AS 最低成绩 FROM
结果是: 最高成绩
xkcjb
100.0
38.0
7) 通过GROUP BY GROUP BY <分组字段名1>[,<分组字段名2>… [HAVING <过滤条件>
其中,<分组字段名>可以是表的字段名、字段函数名 或标识列的数值型表达式;[HAVING <过滤条件>]子句 注意:若只有HAVING子句而无GROUP BY子句,则 HAVING子句相当于WHERE子句。
【例5.41】逻辑删除表dab中姓名为“李四”的
DELETE FROM dab WHERE 姓名="李四" 结果如图所示。
本章小结
本章系统地介绍了VFP中关于建立视图与 数据查询以及使用嵌入到VFP中的SQL语言实现 数据库操作的内容,这些都是VFP的特色所在。 其中SQL语言尤其重要,在以后的程序设计过 程中可以通过使用SQL语言简化大量的程序代 码。学好这一章,是掌握VFP的关键,因此应 引起足够重视。
【例5.14】查询dab SELECT * FROM dab 结果如下图所示。其中“*”是通配符,表示所有
SELECT 学号,姓名,性别,出生日期,专业班级 FROM
dab
【例5.15】 查询dab中“姓名”、 “性别” SELECT 姓名,性别 FROM dab 结果将仅显示如图中的第2列、 第3列数据。
INNER JOIN dab ON dab.学号=xkcjb.学号; WHERE 成绩<60 结果如图所示。
(2)用WHERE子句实现多表间的联接查询 用WHERE子句实现多表间的联接查询时,无须直 接指明联接类型(隐含是内部联接),只需把联接 条件直接写入WHERE 【例5.32】用WHERE子句完成例5.31 SELECT dab.学号,姓名,课程号,成绩 FROM xkcjb,dab WHERE dab.学号=xkcjb.学号 AND 成绩 <60
4)排序查询 通过ORDER BY子句可以实现查询结果的排序输出,允
ORDER BY <排序选项1>[ASC|DESC][,< 排序选项2> [ASC|DESC]… 其中,ASC表示升序排序(缺省方式),DESC表示降 【例5.22】
SELECT * FROM
kcb
ORDER
BY
学分
【例5.23】 按学号升序,相同学号再按成绩降序查询出 SELECT * FROM xkcjb ORDER BY 学号,成绩 DESC
【例5.29】 SELECT 课程号,AVG(成绩) FROM xkcjb GROUP BY
【例5.30】求至少选修了2门课程的学生的信息。 SELECT dab.学号,姓名,课程号 FROM dab,xkcjb WHERE dab.学号=xkcjb. 学号; GROUP BY dab.学号 HAVING COUNT(*)>=2
使用SQL语句对表中记录进行操作,无须用USE 命令打开表,便可完成有关记录的插入、更新、 删除等相关操作。SQL语句与前面介绍的添加记录、 修改记录及删除记录命令相比较,在操作方式和 方法上有很大的不同。SQL语句在只对一条记录的 操作时要简捷得多,但对多条记录操作并不方便。
1)
格式:INSERT INTO<表名>(<字段名1>[,< 字段名2>…]) VALUES(<表达式l>[,<表达 式2>…])
运算符 =、>、<、>=、<=、 <> NOT、 AND、 OR LIKE BETWEEN AND IS NULL IN、NOT IN 成绩>=60
实例
成绩>=60 AND成绩<70 性别 LIKE "男" 成绩BETWEEN 60 AND 70 成绩 IS NULL
专 业 班 级 IN (“ 计 算 机 ” ,” 英 语”)
2) 唯一性查询指对于要显示的结果,若有重复出现时,则 只显示重复行中的一行。这可通过在基本SELECT语句中加入 DISTINCT关键字的方法实现。若不加此关键字,则显示全部
【例5.16】查询dab中“专业班级”字段,要求数据重
SELECT 专业班级 FROM dab DISTINCT
结果如图所示。
5.3 SQL语言
5.3.3 使用SQL语句查询表数据
5.3.3 使用SQL语句查询表数据
SQL语句最主要的功能是查询,即把数据表中的数据查 找出来,以便浏览和使用。SQL语句中查询表数据使用的是 SELECT语句。SELECT语句的基本形式分为3部分:查什么数 据、由哪儿查数据、查的条件是什么,即SELECT FROM WHERE。 1)基本的SELECT语句 格式:SELECT <字段名1>[,<字段名2>…]; FROM [数据库名称!]<表或视图> 功能:从指定表或视图中查询全部记录的指定字段值。
3) 在SELECT语句中,可以通过WHERE子句为查询规 定条件 WHERE WHERE <条件表达式1>[AND <条件表达式2>… 功能:查询指定表或视图中满足查询条件的记录。 其中<条件表达式>可以是关系表达式,也可以是逻 辑表达式,下表列出了组成<条件表达式>常用的运
运算符类别 关系运算符 逻辑运算符 字符串匹配运算符 范围运算符 空值运算符 集合运算符
【例5.17】 查询dab中的男生学号、姓名、性别。 SELECT 学号,姓名,性别 FROM ="男" dab WHERE 性别
【例5.18】 查询dab中计算机1 SELECT 姓名 FROM 计算机1班" 结果是: 【例5.19】 查询xkcjb中成绩在70~90 dab WHERE 性别="男" AND 专业班级="
在子查询中还可以再包含更下层的查询,从而 形成层嵌套查询。
【例5.33】查询成绩在90分及以上的学生姓名。 SELECT 姓名 FROM (SELECT 学号 FROM >=90) 结果是蜂雪燕和张伟。 dab WHERE 学号 IN WHERE 成绩
xkcjb
9)查询中的几个特殊选项 (1)使用TOP <数值表达式> PERCENT]短语显示部分 结果 【例5.34】显示学分较高的2 SELECT * TOP 2 FROM KCB ORDER BY 学分 DESC 注意:TOP短语要与ORDER BY短语同时使用才有效。 【例5.35】显示学分最低的20% SELECT * TOP 20 PERCENT FROM KCB ORDER BY 学 分