当前位置:文档之家› SQL语言 5.3.3 使用SQL语句查询表数据

SQL语言 5.3.3 使用SQL语句查询表数据


功能:通过指定的联接类型建立多表间的 联接。 注意:若SELECT后要查询的列名(字段名) 在2个表中都有,则必须采用“表名.字段 名”,若字段名唯一,则可仅写出字段名。
【例5.31】显示dab和xkcjb中成绩不及格的学生姓名、
SELECT dab.学号, 姓名,课程号,成绩 FROM xkcjb;
5)带计算函数的查询 在SELECT语句中,使用SQL语言提供的一些查询计算 函数,可以增强查询功能。基本的查询计算函数的格式 及功能如下表所示。 函数的格式 COUNT(*) 函数功能 计算记录条数
SUM(字段名)
AVG(字段名)
求字段名所指定字段值的总和
求字段名所指定字段的平均值
MAX(字段名)
运算符 =、>、<、>=、<=、 <> NOT、 AND、 OR LIKE BETWEEN AND IS NULL IN、NOT IN 成绩>=60
实例
成绩>=60 AND成绩<70 性别 LIKE "男" 成绩BETWEEN 60 AND 70 成绩 IS NULL
专 业 班 级 IN (“ 计 算 机 ” ,” 英 语”)
联接类型
• 右联接(Right
Outer Join):与左联接正好
• 完全联接(Full
Join):无论2个表中的记录 是否满足联接条件,都将全部记录选入查询结
通常有3种方法实现多表联接查询,一是在查 询命令中显示地指定联接类型;二是在查询命令 中使用WHERE (1 格式:SELECT … FROM <表或视图> INNER|LEFT|RIGHT|FULL JOIN <表或视图> ON <联接条件> WHERE …
功能:在指定表末尾添加一条新记录。
【例5.39】向表dab INSERT INTO dab (学号,姓名,性别,出生日期,专 业班级); VALUES("20060002","张三","男",{^1987-1010},"计算机1班")
2)
UPDATE <表名> SET <字段名1>=<表达式l> [,<字段名2>=<表达式2>…
【例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
(3)使用嵌套查询实现多表间的联接查询 在SQL语言中,由SELECT、FROM、WHERE语句组 成一个查询块。嵌套查询就是将第2个查询块放在 第1个查询块的WHERE条件中,形成外层(第1个)查 询包含内层(第2个)查询的嵌套查询。 外层查询也称为主查询、父查询,内层查询也 称为下层查询、子查询。系统对嵌套查询的处理过 程是先做子查询,在子查询的基础上再做主查询。
使用SQL语句对表中记录进行操作,无须用USE 命令打开表,便可完成有关记录的插入、更新、 删除等相关操作。SQL语句与前面介绍的添加记录、 修改记录及删除记录命令相比较,在操作方式和 方法上有很大的不同。SQL语句在只对一条记录的 操作时要简捷得多,但对多条记录操作并不方便。
1)
格式:INSERT INTO<表名>(<字段名1>[,< 字段名2>…]) VALUES(<表达式l>[,<表达 式2>…])
(2)使用INTO ARRAY <数组名>将查询结果存放到数 组中。
【例5.36】 查询学生档案信息并将结果放入数组 TEMP
SELECT * FROM DAB INTO ARRAY TEMP (3)使用INTO CURSOR <文件名>将查询结果存放到临
【例5.37】 查询课程表信息并将结果放入临时表 TEMP
SELECT * FROM KCB INTO CURSOR TEMP
(4)使用INTO DBF|TABLE <文件名>将查询 结果存放到永久表中。 【例5.38】 查询课程表信息并将结果放 入永久表TEMP SELECT * FROM KCB INTO DBF TEMP
5.3.4
使用SQL语句更新表
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 [数据库名称!]<表或视图> 功能:从指定表或视图中查询全部记录的指定字段值。
【例5.17】 查询dab中的男生学号、姓名、性别。 SELECT 学号,姓名,性别 FROM ="男" dab WHERE 性别
【例5.18】 查询dab中计算机1 SELECT 姓名 FROM 计算机1班" 结果是: 【例5.19】 查询xkcjb中成绩在70~90 dab WHERE 性别="男" AND 专业班级="
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
结果如下图所示。
LIKE子句中可以用通配符:下划线“_”,表示任何 一个字符;百分号符“%”,表示一串字符。
【例5.21】 查询xkcjb中选修课程号为“001”的 SELECT * FROM ("001") xkcjb WHERE 课程号 IN
结果有3条记录,学号分别为“20050010”、 “20050020”和“20045643”。
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
SELECT *
SELECT *
FROM
FROM
xkcjb WHERE 成绩 BETWEEN 70 AND 90
xkcjb WHERE 成绩>=70 AND 成绩<=90
结果如图所示。等价于:
【例5.20】 查询dab中所有姓“张”
SELECT * FROM
dab
WHERE 姓名 LIKE
"张%"
3) 在SELECT语句中,可以通过WHERE子句为查询规 定条件 WHERE WHERE <条件表达式1>[AND <条件表达式2>… 功能:查询指定表或视图中满足查询条件的记录。 其中<条件表达式>可以是关系表达式,也可以是逻 辑表达式,下表列出了组成<条件表达式>常用的运
运算符类别 关系运算符 逻辑运算符 字符串匹配运算符 范围运算符 空值运算符 集合运算符
2) 唯一性查询指对于要显示的结果,若有重复出现时,则 只显示重复行中的一行。这可通过在基本SELECT语句中加入 DISTINCT关键字的方法实现。若不加此关键字,则显示全部
【例5.16】查询dab中“专业班级”字段,要求数据重
SELECT 专业班级 FROM dab DISTINCT
结果如图所示。
8)多表联接查询
SELECT语句可以实现对Visual FoxPro 6.0 的4种联接类型的查询:
• 内部联接(Inner • 左联接(Left
Join):只有2个表的字段都 满足联接条件时,才将此记录选入查询结果中。 Outer Join):联接条件左边表中 的记录都包含在查询结果中,而右边表中的记录
【例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
【例5.28】 SELECT MAX (成绩) AS 最高成绩,
MIN(成绩) AS 最低成绩 FROM
相关主题