当前位置:Gxlcms > mysql > MySQl心得4--4--数据库查询4--子查询_MySQL

MySQl心得4--4--数据库查询4--子查询_MySQL

时间:2021-07-01 10:21:17 帮助过:46人阅读

bitsCN.com 1.子查询 在查询条件中,可以使用另一个查询的结果作为条件的一部分,例如,判定列值是否与某个查询的结果集中的值相等,作为查询条件一部分的查询称为子查询。SQL标准允许SELECT多层嵌套使用,用来表示复杂的查询。子查询除了可以用在SELECT语句中,还可以用在INSERT、UPDATE及DELETE语句中。子查询通常与IN、EXIST谓词及比较运算符结合使用。 2.IN子查询 IN子查询用于进行一个给定值是否在子查询结果集中的判断,格式为: expression [ NOT ] IN (subquery ) 其中,subquery是子查询。当表达式expression与子查询subquery的结果表中的某个值相等时,IN谓词返回TRUE,否则返回FALSE;若使用了NOT,则返回的值刚好相反。 例:查找在XSCJ数据库中选修了课程号为206的课程的学生的姓名、学号。 SELECT 姓名,学号 FROM XS WHERE 学号 IN (SELECT 学号 FROM XS_KC WHERE课程号 = '206' ); 说明:在执行包含子查询的SELECT语句时,系统先执行子查询,产生一个结果表,再执行查询。本例中,先执行子查询: SELECT 学号 FROM XS_KC WHERE 课程号='206'; 得到一个只含有学号列的表,XS_KC中的每个课程名列值为206的行在结果表中都有一行。再执行外查询,若XS表中某行的学号列值等于子查询结果表中的任一个值,则该行就被选择。 注意:IN子查询只能返回一列数据。对于较复杂的查询,可以使用嵌套的子查询。 例:查找未选修离散数学的学生的姓名、学号、专业名。 SELECT 姓名,学号,专业名 FROM XS WHERE 学号 NOT IN( SELECT学号 FROM XS_KC WHERE课程号 IN (SELECT 课程号 FROM KC WHERE 课程名 ='离散数学')); 3.比较子查询 这种子查询可以认为是IN子查询的扩展,它使表达式的值与子查询的结果进行比较运算,格式为: expression { < | <= |= | > | >= | != | <> } { ALL | SOME | ANY } ( subquery ) 其中,expression为要进行比较的表达式,subquery是子查询。ALL、SOME和ANY说明对比较运算的限制。 如果子查询的结果集只返回一行数据时,可以通过比较运算符直接比较。 ALL指定表达式要与子查询结果集中的每个值都进行比较,当表达式与每个值都满足比较的关系时,才返回TRUE,否则返回FALSE; SOME或ANY是同义词,表示表达式只要与子查询结果集中的某个值满足比较的关系时,就返回TRUE,否则返回FALSE。 例: 查找XS表中比所有计算机系的学生年龄都大的学生学号、姓名、专业名、出生日期。 SELECT 学号, 姓名, 专业名, 出生日期 FROM XS WHERE 出生日期 = | <= | < } (value1,value2,...) [ WHERE 条件 ] [LIMIT... ] (2)HANDLER表名READ索引名{ FIRST | NEXT | PREV | LAST } [ WHERE条件 ] [LIMIT ... ] 说明: 第一种方式是使用比较运算符为索引指定一个值,并从符合该条件的一行数据开始读取表。如果是多列索引,则值为多个值的组合,中间用逗号隔开。value1、value2是为索引指定的值。 第二种方式是使用关键字读取行,FIRST表示第一行,NEXT表示下一行,prev表示上一行,last表示最后一行。 11. 关闭打开的表 行读取完后必须使用handler close语句来关闭表。 语法格式为: HANDLER 表名close 例: 一行一行地浏览KC表中的满足要求的内容,要求第一行为学分大于4的第一行数据。 首先打开表: USEXSCJ;(指定库,打开xskj库) handler KC open;(打开kc表) 读取满足条件的第一行:handler KC readFIRST WHERE 学分>4; 读取下一行: handler KC read NEXT; 关闭该表: handler KC close; 作者 tianyazaiheruan bitsCN.com

人气教程排行