当前位置:文档之家› SELECT语句

SELECT语句

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][NOW AIT][WHERE <连接条件>[AND <连接条件>…][AND|OR <筛选条件> [[AND|OR <筛选条件>…]]][GROUP BY <分组表达式>[,<分组表达式>…]][HA VING <筛选条件>][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 <列标题>]:中的<查询表达式> 参数指定查询结果中的每一项,它可以是字段名、字段名表达式以及常若<查询表达式>是一个常量,那么查询结果中的每一行都出现该常量值。

[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 学生.学号,学生.姓名, 成绩.成绩;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)[NOW AIT]表示在打开浏览窗口将查询结果输出到浏览窗口中去后,允许程序继续执行。

(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 学生.学号,学生.姓名,课程.课程名称,成绩.成绩;FROM 学生,课程,成绩;WHERE 学生.学号= 成绩.学号;AND 课程.课程号= 成绩.课程号3.使用BETWEEN关键字使用BETWEEN关键字可以更方便地限制查询数据的范围,使用BETWEEN的语法是:<表达式> [NOT] BETWEEN <下限表达式> AND <上限表达式>使用BETWEEN表达式进行查询的效果可以用含有>=和<=的逻辑表达式来代替。

使用NOT BETWEEN进行查询的效果可以用含有>和<的逻辑表达式来代替。

相关主题