8.4 SELECT-SQL命令
[※ 重点]
SQL(Structured Query Language)是结构化查询语言,是关系数据库语言的标准。SELECT-SQL是从SQL语言中移植过来的查询命令,具有强大的单表和多表查询功能。SELECT语句在任何一种SQL语言中,都是使用频率最高的语句。可以说SELECT语句是SQL语言的灵魂。在第1章中讲述的选择、投影、连接等关系运算,都是由SELECT语句来完成的。
命令格式:
SELECT[ALL|DISTINCT][TOP <数字常数>[PERCENT]]
[<表别名>.]<查询表达式>[AS <列标题>]
[,[<表别名>.]<查询表达式>[AS <列标题>]…]
FROM [FORCE][<数据库名>! ]表名[<表别名>]
[[INNER |LEFT[OUTER]|RIGHT[OUTER]|FULL[OUTER]JOIN
<数据库名>!]表名[<表别名>]
[ON <联接条件>…
[[INTO <目标>]
|[TO FILE <文件名>[ADDITIVE]
|TO PRINTER [PROMPT]
|TO SCREEN]]
[NOCONSOLE][PLAIN][NOWAIT]
[WHERE <连接条件>[AND <连接条件>…]
[AND|OR <筛选条件> [[AND|OR <筛选条件>…]]]
[GROUP BY <分组表达式>[,<分组表达式>…]]
[HAVING <筛选条件>]
[UNION[ALL]<SELECT命令>]
[ORDER BY <排序表达式>[ASC|DESC]
[,<排序表达式>[ASC|DESC]…]]
命令功能:
返回从指定表中查询的数据结果集。
命令说明:
(1)SELECT:在查询结果中指定要显示的字段、常量和表达式。
(2)FROM :表示上述查询列名的结果来自于那些数据库的哪些表中。
示例:最简单的查询,选择查询“学生管理”数据库的“学生”表的数据。
SELECT * FROM 学生管理!学生
其中,在SELECT语句中“*”表示所有的列。
(3)[ALL|DISTINCT]:参数中的ALL参数将筛选出满足给定条件的所有记录;使用DISTINCT关键字就能够从返回的结果数据集中删除掉重复的行,使返回的结果更简洁。
示例:选择查询“学生”表的专业编码。
SELECT 专业编码 FROM 学生管理!学生 && 有许多重复记录
SELECT DISTINCT 专业编码 FROM 学生管理!学生 && 没有重复记录
(4)[TOP <数字常数>[PERCENT]]:指定只返回前面一定数量的数据。<数字常数>是一个常数,允许的数值范围为 1 到 32767;如果使用“PERCENT”关键字的是百分数,则范围为 0.001 到 99.99。
示例:选择查询“学生”表的前10条记录和前10%的记录数据。
SELECT TOP 10 * from 学生管理!学生 ORDER BY 学号
SELECT TOP 10 PERCENT * from 学生管理!学生 ORDER BY 学号
(5)[[<表别名>.]<查询表达式>[AS <列标题>]:中的
<查询表达式> 参数指定查询结果中的每一项,它可以是字段名、字段名表达式以及常量,或者是用户自定义函数和系统函数(如下表所示)。
名称 | 函数 | 功能说明 |
均值 | AVG(<查询表达式>) | 求(<查询表达式>)值的平均值 |
计数 | COUNT(<查询表达式>) | 统计(<查询表达式>)的记录个数 |
最小 | MIN(<查询表达式>) | 求(<查询表达式>)值的最小值 |
最大 | MAX(<查询表达式>) | 求(<查询表达式>)值的最大值 |
求和 | SUM(<查询表达式>) | 求(<查询表达式>)值的和 |
若<查询表达式>是一个常量,那么查询结果中的每一行都出现该常量值。
[AS <列标题>]参数为查询结果中的每一项列名加标题。若<查询表达式>是一个字段名,那么[<表别名>.]指明该字段所在表的别名。
示例:设置“学生”表的别名为“A”、字段名“学号”的标题为“学生编码”。
SELECT A.学号 AS 学生编码,A.姓名,A.性别 from 学生管理!学生 A
(6)FROM [FORCE][<数据库名>! ]表名[<表别名>]:FORCE参数表示数据表将按FROM子句出现的顺序联接。
(7)[[INNER |LEFT[OUTER]|RIGHT[OUTER]|FULL[OUTER]JOIN<数据库名>!]表名[<表别名>][ON <联接条件>…:指定表与表之间的联接方式以及连接的条件表达式。其中:
INNER JOIN:内部联接,只有联接字段中的值相等时,才从两个表中选择记录。
示例:查询学生.学号, 学生.姓名, 课程.课程名称, 成绩.成绩等数据。
SELECT 学生.学号, 学生.姓名, 课程.课程名称, 成绩.成绩;
FROM 学生 INNER JOIN 成绩 ON 学生.学号 = 成绩.学号;
INNER JOIN 课程 ON 成绩.课程号 = 课程.课程号;
ORDER BY 学生.学号
LEFT [OUTER] JOIN :左[外部]的联接。OUTER(外部)关键字是可选择的;它包括“左字段列表”的全部记录,以及“右字段列表”中所选字段相匹配记录。
示例:查询学生.学号, 学生.姓名,成绩.select中distinct成绩等数据。
SELECT 学生.学号,学生.姓名, 成绩.成绩;
FROM 学生 LEFT OUTER JOIN 成绩 ON 学生.学号 = 成绩.学号;
ORDER BY 学生.学号
SELECT 学生.学号,学生.姓名, 成绩.成绩;
FROM 成绩 LEFT OUTER JOIN 学生ON 学生.学号 = 成绩.学号;
ORDER BY 学生.学号
RIGHT [OUTER] JOIN :右[外部]的联接。创建一个联接,它包括“右字段列表”的全部记录,以及“左字段列表”中所选字段相匹配记录。
示例:查询学生.学号, 学生.姓名,成绩.成绩等数据。
SELECT 学生.学号,学生.姓名, 成绩.成绩;
FROM 学生 RIGHT OUTER JOIN 成绩 ON 学生.学号 = 成绩.学号;
ORDER BY 学生.学号
SELECT 学生.学号,学生.姓名, 成绩.成绩;
FROM 成绩 RIGHT OUTER JOIN 学生ON 学生.学号 = 成绩.学号;
ORDER BY 学生.学号
FULL [OUTER] JOIN:完全[外部]联接。创建一个联接,为所选字段列出两个列表中的所有记录。
示例:查询学生.学号, 学生.姓名,成绩.成绩等数据。
SELECT 学生.学号,学生.姓名, 成绩.成绩 FROM 学生 FULL OUTER JOIN 成绩 ON 学生.学号 = 成绩.学号 ORDER BY 学生.学号
(8)[[INTO <目标>]:设置查询结果集的输出目标。目标可以是下列形式之一:
● ARRAY <数组名>:输出到数组。
● CURSOR <临时表名>:输出到临时表
● DBF<表名>|TABLE <表名> :输出到表
示例:查询学生.学号, 学生.姓名, 课程.课程名称, 成绩.成绩等数据,生成一个名为“XS”的新表。
SELECT 学生.学号, 学生.姓名, 课程.课程名称, 成绩.成绩;
FROM 学生 INNER JOIN 成绩 ON 学生.学号 = 成绩.学号;
INNER JOIN 课程 ON 成绩.课程号 = 课程.课程号;
ORDER BY 学生.学号 INTO DBF XS
(9)[TO FILE <文件名>[ADDTTIVE]|TO PRINTER[PROMPT]|TO SCREEN]]表示分别将查询结果送到一个文本文件、打印机、屏幕中去。
(10)[PREFERENCE PreferenceName]表示当输出方向为“测览”窗口时保存该窗口的属性,以便下一次调用。
(11)[NOCONSOLE]表示在将查询结果输出到文本文件或打印机上去的同时禁止在屏幕上显示查询结果。
(12)[PLAIN]表示禁止列标题出现在查询结果中。
(13)[NOWAIT]表示在打开浏览窗口将查询结果输出到浏览窗口中去后,允许程序继续执行。
(14)[WHERE <连接条件>[AND <连接条件>…][AND|OR <筛选条件> [[AND|OR <筛选条件>…]]]:子句用以设置多表连接条件以及筛选条件。
★ WHERE子句中的几点说明:
使用WHERE子句可以限制查询的范围,提高查询的效率。在使用时,必须注意WHERE子句必须紧跟FROM子句后面。WHERE子句中的条件表达式包括算术表达式和逻辑表达式两种。
1. 使用算术表达式
使用算术表达式的搜索条件的一般表达式是:
<表达式> <算术运算符> <表达式>
<表达式> <算术运算符> <表达式>
其中:
<表达式>:常量、变量和基于字段表达式的任意有效组合。
<表达式>:常量、变量和基于字段表达式的任意有效组合。
<算术运算符>
WHERE子句中允许使用的算术运算符包括:
=、<、>、 <>(!=、#)、 >=、 <=、 ==;+、-、*、/、^
=、<、>、 <>(!=、#)、 >=、 <=、 ==;+、-、*、/、^
例题:用学生.学号连接成绩.学号。
SELECT 学生.学号,学生.姓名,课程.课程名称,成绩.成绩;
FROM 学生,成绩;
WHERE 学生.学号 = 成绩.学号
2. 使用逻辑运算符
在WHERE子句中可以用逻辑运算符把若干个查询条件合并起来。这些逻辑运算符包括AND、OR和NOT。AND运算符只有在所有条件都为真时,才返回真。OR运算符只要有一个条件为真时,就返回真。NOT运算符用于取反。当一条语句中包含多个逻辑运算符时,其优先级从高到低的顺序是NOT、AND、OR。其语法形式如下:
WHERE [NOT] <表达式> { AND | OR} [NOT] <表达式>
例题:上例中在加上课程.课程号连接成绩.课程号。
SELECT 学生.学号,学生.姓名,课程.课程名称,成绩.成绩;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论