MySQl心得4--4--数据库查询4--子查询(二)
个语句选择的第一列应和被其他语句选择的第一列具有相同的类型。
● 只有最后一个SELECT语句可以使用INTO OUTFILE。
● HIGH_PRIORITY不能与作为UNION一部分的SELECT语句同时使用。
● ORDER BY和LIMIT子句只能在整个语句最后指定,同时还应对单个的SELECT语句加圆括号。排序和限制行数对整个最终结果起作用。
8. 使用UNION的时候,在第一个SELECT语句中被使用的列名称被用于结果的列名称。MySQL自动从最终结果中去除重复行,所以附加的DISTINCT是多余的,但根据SQL标准,在语法上允许采用。要得到所有匹配的行,则可以指定关键字ALL。
例:查找学号为081101和学号为081210的两位同学的信息。
SELECT 学号, 姓名, 专业名, 性别, 出生日期, 总学分
FROM XS WHERE 学号= '081101' UNION
SELECT 学号, 姓名, 专业名, 性别, 出生日期, 总学分
FROM XS WHERE学号= '081210';
9.handler语句
select语句通常用来返回行的一个集合;MySQL还支持另外一个查询数据库的语句:handler语句,该语句能够一行一行的浏览表中的数据,他并属于SQL标准,这是MySQL的专用语句,该语句只适用于MyISAM和InnoDB表。
使用该语句要先使用handler open语句打开一个表,再使用handler read语句浏览打开表的行,浏览完后使用handler close语句关闭已打开的表
1). 打开一个表
可以使用handler open语句打开一个表。
语法格式为: HANDLER 表名 OPEN [ AS 新表名 ]
说明:若打开表时使用别名,则在其他进一步访问表的语句也都要使用别名。
2). 浏览表中的行
handler read语句用于浏览一个已经打开的表的数据行。
语法格式为: HANDLER表名READ { FIRST |NEXT }
[ WHERE where_condition ] [LIMIT ... ]
说明: www.2cto.com
● FIRST | NEXT:这两个关键字是HANDLER语句的读取声明,FIRST表示读取第一行,NEXT表示读取下一行。
● WHERE子句:如果想返回符合特定条件的行,可以加一条WHERE子句,这里的WHERE子句和SELECT语句中的WHERE子句具有相同的功能,但是这里的WHERE子句中不能包含子查询、系统内置函数、BETWEEN、LIKE和IN运算符。
● LIMIT子句:若不使用LIMIT子句,HANDLER语句只取表中的一行数据。若要读取多行数据,则要添加LIMIT子句。这里的LIMIT子句和SELECT语句中的LIMIT子句不同。SLECT语句中的LIMIT子句用来限制结果中的行的总数,而这里的LIMIT子句用来指定HANDLER语句所能获得的行数。
10. 由于没有其他的声明,在读取一行数据的时候行的顺序是由MySQL决定的。如果要按某个顺序来显示,可以通过在HANDLER READ语句中指定索引来实现。
语法格式为:
(1)HANDLER 表名 READ 索引名 { = | >= | <= | < } (value1,value2,...) [ WHERE 条件 ] [LIMIT... ]
(2)HANDLER表名READ索引名{ FIRST | NEXT | PREV | LAST }
[ WHERE条件 ] [LIMIT ... ]
说明:
第一种方式是使用比较运算符为索引指定一个值,并从符合该条件的一行数据开始读取表。如果是多列索引,则值为多个值的组合,中间用逗号隔开。value1、value2是为索引指定的值。
第二种方式是使用关键字读取行,FIRST表示第一行,NEXT表示下一行,prev表示上一行,last表示最后一行。
11. 关闭打开的表
行读取完后必须使用handler close语句来关闭表。
语法格式为: HANDLER 表名close www.2cto.com
例: 一行一行地浏览KC表中的满足要求的内容,要求第一行为学分大于4的第一行数据。
首先打开表: USEXSCJ;(指定库,打开xskj库)
handler KC open;(打开kc表)
读取满足条件的第一行:handler KC readFIRST WHERE 学分>4;
读取下一行: handler KC read NEXT;
关闭该表: handler KC close;
作者 tianyazaiheruan