数据查询是 SQL 语言的核心,也称作 SQL-SELECT 命令。使用 SQL-SELECT 命令,可以对数据源进行各种组合,有效地筛选记录、管理数据、并对结果排序及指定输出去向等,无论查询多么复杂,其内容只有一条 SELECT 语句。
SQL-SELECT 命令可以进行多个查询块的嵌套查询,以完成更复杂的查询任务。
格式: SELECT [DISTINCT] [TOP< 数值 > [PERCENT]]
[< 别名 1>.]< 选项 1> AS < 列名 1>,
[< 别名 2>.]< 选项 2> AS < 列名 2>,……
FROM < 表 1> [AS < 别名 1>],< 表 2>[AS < 别名 2>],……
[[INNER|LEFT|RIGHT|FULL] JOIN < 表 2>
ON < 联接条件 >]
[INTO < 目标 >]|TO FILE < 文件名 >|TO PRINT
[WHERE < 筛选条件 > [AND < 联接条件 >]]
[GROUP BY < 分组项 >] [HAVING < 筛选条件 >]
[ORDER BY < 排序项 1>, < 排序项 2>]
[UNION SELECT < 命令 >]
5.4.1. 基本查询 : SELECT … FROM … WHERE
例如,从“学生”表中查询所有男生的学号、姓名和出生日期:
SELECT 学号 , 姓名 , 出生日期 FROM 学生 WHERE 性别 = “男”
5.4.2. 带特殊运算符的条件查询: 在 WHERE 子句所带的筛选条件表达式中可以使用一些特殊运算符,如 IN 、 BETWEEN … AND …、 LIKE 。
例如,查询成绩良好( 75 ~ 85 分)的学生和课程信息:
SELECT * FROM 成绩 WHERE 成绩 BETWEEN 75 AND 85
5.4.3. 排序查询:
使用 ORDER BY 子句,可以对查询结果按升序( ASC )或降序( DESC )排列。
例如,按课程号输出学生的各科成绩,同一门课按成绩降序排列:
SELECT * FROM 成绩 ORDER BY 课程号 , 成绩 DESC
5.4.4. 计算与分组查询:
使用 GROUP BY 子句可以实现分组查询,通常与计算查询(如计数、求和、求平均值等)结合使用,先按指定的数据项分组,再对各组汇总计算。
例如,查询各门课程的平均成绩:
SELECT 课程号 ,AVG( 成绩 ) AS 平均成绩 FROM 成绩 GROUP BY 课程号
5.4.5. 多表查询:
多表查询时,表和表之间必须有联接关系,在 WHERE 子句中可以指定表间的联接关系。其格式为:
< 表名 1>.< 字段名 1> = < 表名 2>.< 字段名 2> 或
< 别名 1>.< 字段名 1> = < 别名 2>.< 字段名 2>
例如,查询各门课程的平均成绩,要求输出课程名和成绩信息:
SELECT 课程名 ,AVG( 成绩 ) AS 平均成绩 FROM 课程 KC ,成绩 CJ;
WHERE KC. 课程号 = CJ. 课程号 GROUP BY CJ. 课程号
5.4.6. 联接查询
:利用 FROM … ON 子句建立两表之间的联接。
格式: FROM < 表名 1> INNER | LEFT | RIGHT | FULL JION
< 表名 2> ON < 联接条件 >
说明: INNER JOIN( 内部联接 ) 、 LEFT JOIN( 左联接 ) 、 RIGHT JOIN (右联接)、 FULL JOIN (全联接)的含义与 4.1.2 节中相同。
例如,
查询各门课程的平均成绩,要求输出课程名和成绩信息:
SELECT 课程名 ,AVG( 成绩 ) AS 平均成绩 FROM 课程 KC ;
INNER JOIN 成绩 CJ;
ON KC. 课程号 = CJ. 课程号 ;
GROUP BY CJ. 课程号
5.4.7. 嵌套查询:
在一个 SELECT 命令的 WHERE 子句中出现另一个 SELECT 命令 ( 即子查询)。
子查询的结果必须是确定的值。
例如,查询李华同学所学课程的课程名和成绩:
SELECT 课程名 , 成绩 FROM 课程 KC, 成绩 CJ;
WHERE KC. 课程号 = CJ. 课程号 ;
AND CJ. 学号 = (SELECT 学号 FROM 学生 WHERE 姓名 = “李华” )
5.4.8. 查询输出:
查询结果默认显示在浏览窗口中,通过 INTO 子句或 TO 子句可以对输出重定向。
格式:
INTO ARRAY < 数组 > | CURSOR < 临时表 > | && 保存到内存
DBF < 表文件 > | TABLE < 表文件 > && 保存到表文件
TO FILE < 文本文件 > && 保存到文本文件
TO PRINT && 打印
例如,查询各门课程的平均成绩,结果保存在 “ 平均成绩 ” 表中。
SELECT 课程号 ,AVG( 成绩 ) AS 平均成绩 FROM 成绩 ;
GROUP BY 课程号 INTO TABLE 平均成绩 |